微信扫码
与创始人交个朋友
我要投稿
最近分享了很多关于文档OCR版式识别的文章。总体来看:
视觉语言大模型文档OCR通用效果最强,用起来也最方便;但是缺点也非常明显,由于涉及到视觉模型、桥接层、语言模型三个部分,微调起来非常不方便。
LayoutLM系列模型,基于transformer,虽然能应对多重任务,精准度尚可,但是识别速度没有优势。
YOLO系列的文档OCR版式识别,优点:是速度快,微调模型也方便,在单一场景下精度不输上面两类模型;缺点:是通用性不强,不能像transformer模型那样完成多个任务
建议:
如果是做多模态大模型研究的朋友,可以尝试做一些文档识别、文档问答等一个模型支持多种任务的方向,大而全肯定是大模型发展通用人工智能的方向。
如果是最垂类任务的朋友,选择yolo是目前最佳的选择,成千上万页的PDF文档的请求涌过来,不要钱的CPU随便加还是能抗住的,大模型用上GPU那可就太奢侈了。
import cv2
from doclayout_yolo import YOLOv10
# Load the pre-trained model
mode = YOLOv10.from_pretrained("juliozhao/DocLayout-YOLO-DocStructBench")
# Perform prediction
det_res = model.predict(
"path/to/image", # Image to predict
imgsz=1024, # Prediction image size
conf=0.2, # Confidence threshold
device="cuda:0" # Device to use (e.g., 'cuda:0' or 'cpu')
)
# Annotate and save the result
annotated_frame = det_res[0].plot(pil=True, line_width=5, font_size=20)
cv2.imwrite("result.jpg", annotated_frame)
也可通过https://huggingface.co/spaces/opendatalab/DocLayout-YOLO
实测自己的文档数据。
笔者测试的样例:
DocLayout-yolo是上海AI实验室推出的基于yolov10,通过提供多样性文档预训练及适配文档检测的模型结构优化,可针对多样性文档进行实时鲁棒的检测。
360LayoutAnalysis是360人工智能研究院知识图谱&文档理解团队基于yolov8开源的多场景轻量化版式分析模型。
双方都用的是YOLO系列模型,微调的文档布局检测模型。
主要区别在于:
DocLayout-yolo在文档预训练阶段,将文档合成视为二维装箱问题,并提出Mesh-candidate BestFit算法,合成类型多样性的大规模合文档数据集DocSynth-300K。这个数据集的预训练显著提高了在各种文档类型上的微调性能。360LayoutAnalysis使用的训练数据则要单一的多,所以开源出来的模型只对单一场景效果较好。
DocLayout-yolo在模型结构优化方面,提出了全局到局部可控的感知模块(GL-CRM),确保在尺度变化不一的文档元素上得到精准检测结果。
从图上可知,DocSynth-300K数据集构建分为两个部分:
原始数据的抓取(raw data)
页面版式元素的抽取与标记(Element pool)
为了确保包含各种文档元素,利用大约 2800 个不同文档页面的 74 个不同文档元素,作为初始数据。
对页面进行分段,通过每个细粒度类别提取和构建元素池。 同时,为了保持同一类别元素内部的多样性,我们设计了一个增强管道,扩展了元素数量少于 100 个的稀有类别的数据库池
随机翻转:考虑到不同文档中文本方向的多种可能性,以 0.5 的概率对原始数据进行水平和垂直方向的随机翻转,以增强原始数据。
随机亮度和对比度:通过以 0.5 的概率随机改变元素的亮度和对比度,模拟各种照明条件和亮度水平下的真实世界环境。
随机裁剪:为了引导模型更多地关注局部特征,以 0.7 的概率对元素进行随机裁剪,裁剪区域范围为 0.5 0.9。
边缘提取:使用 Sobel 滤波器进行边缘检测,并以 0.2 的概率提取元素内的轮廓信息,从而增强特征的丰富性。
弹性变换和高斯噪声:通过轻微的弹性变换和高斯噪声添加过程来扭曲和模糊原始数据,以模拟现实中抖动或分辨率引起的失真
为了确保布局多样性和与现实世界文档的一致性,受二维装箱问题的启发,我们将当前布局构建的可用网格视为不同大小的“箱子”,并迭代地执行最佳匹配以生成更多样化和合理的文档布局,平衡布局多样性(随机性)和美观性(例如填充率和对齐)。
对于每个空白页面,通过基于元素大小的从元素池中分层抽样获得一个子集,作为候选集。 然后,从候选集中随机抽取一个元素,并将其放置在页面上的某个位置。
基于布局构造网格,并过滤掉与插入元素重叠的无效网格。 只有剩余的网格才能在后续步骤中参与与候选者的匹配。
对于每个候选者,遍历所有满足大小要求的网格,并搜索具有最大填充率的 Mesh-candidate 对。 随后,从候选集中移除最佳候选,并更新布局。
重复步骤 2 3 直到没有有效的 Mesh-candidate 满足大小要求。 最终,将对所有填充的元素分别应用随机中心缩放。
该算法迭代地搜索候选者和所有网格 (bin) 之间的最佳匹配。 找到最佳匹配对后,候选元素将被插入文档,并继续迭代地搜索最佳匹配,直到元素数量达到阈值 (经验性地设置为 15)。 匹配阈值设置为 。
文档图像中的不同元素在尺度上可能存在很大差异,例如单行标题和整页表格。 为了处理这种尺度变化的挑战,我们引入了一个称为 GL-CRM 的分层架构,它包含两个主要部分:
可控感受野模块 (CRM) :灵活地提取和整合具有多个尺度和粒度的特征
全局到局部设计 (GL)。 GL 架构则以从全局上下文(整页尺度)到子块区域(中等尺度)再到局部语义信息的分层感知过程为特征。
如何理解全局到局部的设计?
全局级别:
对于包含丰富纹理细节的浅层阶段,使用具有扩大核大小和膨胀率的 CRM (k=5,d=1,2,3)。 大内核有助于捕获更多纹理细节并保留整个页面元素的局部模式。
块级别:
对于特征图被下采样且纹理特征被减少的中间阶段,使用具有较小内核的 CRM (k=3,d=1,2,3)。 在这种情况下,扩展的膨胀率足以感知中尺度元素,例如文档子块。
局部级别:
对于语义信息占主导地位的深层阶段,使用一个基本瓶颈,它充当一个轻量级模块,专注于局部语义信息。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-02
李飞飞:Agent AI 多模态交互的前沿探索
2024-12-02
使用Llama 3.2-Vision大模型,搭建本地Ollama OCR应用
2024-11-29
Molmo 7B:多模态智能下的文本提取
2024-11-28
360“纳米搜索”:一切皆可搜索,一切皆可生成视频
2024-11-28
周鸿祎发布纳米搜索,做世界第一的AI搜索
2024-11-26
简单到爆!Llama - OCR 仅需 3 步,小白也能完成高质量 OCR 识别!
2024-11-25
Encord全球首发多模态数据标注编辑器,AI数据开发技术有哪些新趋势?
2024-11-23
Pixtral Large:128K 上下文窗口 + 多模态融合,开启智能新视界!
2024-09-12
2024-05-30
2024-06-17
2024-08-06
2024-08-30
2024-04-21
2024-06-26
2024-07-07
2024-06-14
2024-07-21
2024-11-25
2024-09-26
2024-09-26
2024-09-01
2024-07-15
2024-07-14
2024-07-10
2024-07-02