1.druid源码学习笔记9_testOnBorrow&testOnReturn&testWhileIdl
2.Nougat学习小结
3.代码分析神器:understand、读读bouml
4.å¦ä½å¦å¥½IDLç¼ç¨
druid源码学习笔记9_testOnBorrow&testOnReturn&testWhileIdl
druid源码中,取源关于testOnBorrow、文件testWhileIdle和testOnReturn的读读属性配置值得重点关注。在1.2.9版本后,取源这些属性的文件应用及源码与底层源码默认值与早期wiki中的记录有所不同。testOnBorrow的读读默认值从true变为false,而testWhileIdle的取源默认值则从false变为true。这表明代码在年后可能进行了更新,文件但wiki尚未同步更新。读读 testOnBorrow主要在getConnectionDirect方法中起作用,取源当设置为true时,文件获取连接后会执行validationQuery检查连接是读读否可用。如果连接不可用,取源将重新获取。文件魔兽坐骑源码复制而testWhileIdle则在连接空闲时间达到timeBetweenEvictionRunsMillis时执行验证,同样用于检查连接状态。 testWhileIdle与testOnBorrow互斥,如果两者都为true,仅执行testOnBorrow。计算空闲时间的规则涉及checkExecuteTime、lastKeepTimeMillis和当前时间的比较。 testOnReturn属性在DruidPooledConnection#close()方法,即归还连接时被调用。当设置为true时,回收连接后会检查其状态,如连接未关闭,会执行validationQuery。如果连接不可用,辉光管时钟 源码会关闭并计数,否则继续归还操作。 总结如下:testOnReturn在连接归还时检查,默认为false。
testOnBorrow和testWhileIdle在连接借用时检查,早期testOnBorrow为true,testWhileIdle为false,但新版本可能出于性能考虑进行了调整。
Nougat学习小结
项目地址: github.com/facebookrese...
论文地址: Nougat: Neural Optical Understanding for Academic Documents
背景
近期,MetaAI推出了一项新的技术突破,提出了一种全新的端到端的OCR模型。该模型采用自回归方法,能够在给定后输出相应的Markdown标记。该模型不仅能够实现版面分析、gfxbench 3.1源码build文本检测、文本识别、公式识别等功能,而且整体架构采用了“编码器-解码器”(encoder-decoder)模式。以下,本文将从论文、源码、测试三个方面对Nougat进行深度学习与理解,共同探讨Nougat的实现过程。
方法大意
1.1 模型架构
该模型采用了常规的“编码器-解码器”(encoder-decoder)架构,具体如下:
编码器(Encoder):
解码器(Decoder):
从上述描述中可以看出,Nougat的encoder与decoder都采用了较大的transformer架构,整体pipeline的参数量达到了M。
1.2 数据工程
Nougat将OCR问题定义为:[公式]
其核心关键在于如何以低成本的主力识别平台源码方式构造(,对应的markdown)pair。对于我而言,这是这篇文章最有价值、最值得借鉴学习的地方。
1.2.1 数据源
目前,并没有大规模的pdf与对应markdown标记pair的数据集。Nougat从arXiv、PMC (PubMed Central)、IDL(Industry Documents Library)三个来源构建数据集。其中,PMC与IDL的数据由于语义信息不充足,仅用于预训练阶段,以使模型具备基础的ocr能力。而arXiv数据有tex源码,能获取所有需要的语义信息,用于预训练和微调阶段。
1.2.2 图文对构建pipeline
1.2.2.1 思路介绍
图文对构造的整体pipeline如上图所示。从arXiv拿到的Tex源码出发,获取全篇文章的markdown标记,与pdf每页的与文本进行对应。
1.2.2.2 markdown 划分
代码位置:nougat/nougat/dataset/split_md_to_pages/split_markdown
1.2.2.2.1 预处理
预处理1:去除PDF中的表格
由于表格在PDF的位置和tex源码的位置可能有所差异,作者采取的办法是先用pdffigures2工具将PDF的和表格移除。当划分完markdown后再在markdown的末尾加入移除的信息。
1.2.2.2.2 markdown page 划分
叙述核心逻辑,详细细节见源码
2 小结
Nougat描绘了一个愿景,即以端到端的方式实现过去繁琐的数据加工pipeline。然而,从目前尝试来看,该方法并不适用于实际场景。单纯从架构来看,主要有以下几点缺陷:
或许在未来,以上问题将不再是问题。
Reference
[1] Ali Furkan Biten, Rubén Tito, Lluis Gomez, Ernest Valveny, and Dimosthenis Karatzas. OCR-IDL: OCR Annotations for Industry Document Library Dataset, February .
[2] Liu, Ze, et al. "Swin transformer: Hierarchical vision transformer using shifted windows." Proceedings of the IEEE/CVF international conference on computer vision. .
[3] Liu, Yinhan, et al. "Multilingual denoising pre-training for neural machine translation." Transactions of the Association for Computational Linguistics 8 (): -.
代码分析神器:understand、bouml
在工程源码分析中,面对复杂的函数调用关系,特别是开源项目如Linux、Android源码或第三方库时,自行梳理难度较大。这时,借助代码分析工具能提供极大帮助。以下介绍两款工具:understand和bouml。
bouml是一款面向对象语言分析工具,支持C++、Java、IDL、PHP、Python、MySQL等。在4.版本之前提供免费版,但可能存在一些bug,例如误删调用关系后无法恢复。对于专业使用,建议购买正版。bouml主要用于分析类继承与函数调用关系。
understand软件虽无免费版本,但CSDN上能找到注册机下载。支持多种编程语言,包括C、C++、C#、Ada、Java、Fortran、Delphi、Jovial等,尤其适合嵌入式工程师。了解其功能后,网上能找到大量使用教程。
bouml利用UML生成调用关系图,提供时序图等可视化展示,有助于理解函数生命周期。除此之外,市场上还有更多付费UML工具,功能更加强大。
understand则提供了详细的代码分析功能,通过官网scitools.com可了解更多信息。在源码分析过程中,运用understand和bouml可大幅提升效率与准确性。
å¦ä½å¦å¥½IDLç¼ç¨
ããå¦ä½å¦å¥½IDLç¼ç¨ï¼
ããä¸æ¯åéåéã读åæ件çï¼å®ä»¬æ¯ä½ æ¿æ¥è·é¥ææ°æ®æ交éçä¸è¥¿ï¼
ããäºæ¯åæ¸ ç¨åºç»æï¼èªå·±åå缩è¿ï¼ä»£ç åä¹é´ç¨ç©ºè¡åå¼ï¼å注éççï¼ä¸ä¸è足ï¼
ããä¸æ¯ææ¡å¥½functionåprocedureä¸å ³é®åçç¨æ³ãIDLä¸åC++æè .NETççï¼ææå¼ä¼ ååæå¼ç¨ä¼ åä¹åï¼IDL解å³æ¤ç±»é®é¢çæ¹æ³æ¯å ³é®åã
ããåæ¯åéæ°åå¾åå¤çé£é¨åçåºæ¬ç®æ³ï¼è½ç¶å¤§é¨ååè½å·²ç»ç±IDLé 好äºè½®åï¼ä½åªæåéäºåçï¼ç¨çæ¶åæè½ä¿¡æææ¥ã
许å¤å½æ°ææºç æä¾ï¼IDLDE(å¼åç¯å¢çé¢)éå¨å½æ°æè¿ç¨åä¸ç¹å³é®ï¼ç»¿è²å称çé¤äºå¸®å©ä¹å¤ä¸è¬é½ææ¥çæºç çé项ï¼å¯ä»¥å¦å°ä¸å°ä¸è¥¿