欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 【多模态文档智能】OCR-free感知多模态大模型技术链路及训练数据细节

【多模态文档智能】OCR-free感知多模态大模型技术链路及训练数据细节

2024/12/21 6:02:49 来源:https://blog.csdn.net/yjh_SE007/article/details/144457417  浏览:    关键词:【多模态文档智能】OCR-free感知多模态大模型技术链路及训练数据细节

目前的一些多模态大模型的工作倾向于使用MLLM进行推理任务,然而,纯OCR任务偏向于模型的感知能力,对于文档场景,由于文字密度较高,现有方法往往通过增加图像token的数量来提升性能。这种策略在增加新的语言时,需要重新进行训练,计算开销较大,成本较高。因此,本文再来看看vary和got这两个衔接工作,看看其完整的技术链路。

Vary

传统的vlm做法和vary

技术点

  • 新视觉词汇表的生成:设计了一个词汇网络和一个小型解码器Transformer,通过自回归生成所需的词汇表。具体使用SAM预训练的ViTDet(base scale)作为新词汇网络的主要部分,并在其最后一层后添加两个卷积层,以将特征形状转换为与CLIP-L输出匹配的形状。

    添加了两个卷积层,以使输出与CLIP相似

  • 数据:在生成阶段,使用手动文档和图表数据作为正样本,自然图像作为负样本,通过自回归方式训练词汇网络。文档数据包括从arXiv和CC-MAIN-2021-31-PDF-UNTRUNCATED收集的英文和中文字档,图表数据包括使用matplotlib和pyecharts渲染的图表。

  • 词汇表融合:在生成新词汇表后,将其添加到原始LVLMs中,引入新特征。在这个过程中,冻结新旧词汇网络的权重,解冻其他模块的权重。新词汇表与原始CLIP-VIT并行,各自拥有独立的输入嵌入层,在LLM之前集成。

训练方法

整体分为两个阶段:Vary-tiny和Vary-base

  1. Vary-tiny

    首先构建了一个具有新视觉词汇表(vision vocabulary)的视觉Transformer(ViT),命名为Vary-tiny。采用了SAM预训练的ViTDet作为Vary-tiny的主要组成部分,并在其后添加了两个卷积层,以便将特征形状调整为与CLIP-VIT的输出相匹配。接下来,将一个全连接层和一个文本解码器OPT-125M(这里也可以使用更大的大型语言模型(LLM)来替代OPT-125M。)连接到Vary-tiny上。

    为了训练Vary-tiny,需要构造正负样本的图像-文本对。正样本包括需要进行OCR处理的图像及其OCR结果(如密集文本和Python字典风格的图表结果)。负样本则来自COCO数据集,包含自然图像以及与之对应的文本“This is an natural image”。

  2. Vary-base

    Vary-base 是基于 Vary-tiny 的改进版本,它将 Vary-tiny 与原始的 CLIP-L ViT 并行运行。这两个视觉变换器(ViT)的输出嵌入首先分别输入到它们各自的线性层,然后将这两个线性层的输出连接起来,最后输入到LLM中。在 Vary-base 中,Vary-tiny 的输入图片分辨率为 1024×1024,而其最后一层输出的特征图尺寸为 64×64×256。这与 CLIP-L 的输出尺寸不匹配,因此在 Vary-tiny 中添加了两个卷积层来进行特征转换,以确保尺寸的一致性。在训练 Vary-base 的过程中,会冻结两个 ViT 的权重,只更新线性投影层和 LLM 的参数。训练数据包括自然场景和 OCR 场景的视觉问答(VQA),以便让模型能够在这些场景下表现出更好的性能。

训练数据

  1. Vary-tiny(学习新的视觉词汇表)
  • 文档数据:从arXiv和CC-MAIN-2021-31-PDF-UNTRUNCATED收集的高分辨率文档图像文本对。英文部分:从arXiv的开放获取文章中收集PDF格式的文档。中文部分:从互联网上的电子书籍中收集。处理方式:

    • 使用PyMuPDF库提取每页PDF中的文本信息。
    • 使用pdf2image库将每页转换为PNG图像。
    • 构建了100万张中文和100万张英文的文档图像文本对用于训练。
  • 图表数据:使用matplotlib和pyecharts作为渲染工具生成图表图像文本对。matplotlib风格:构建了25万张中英文图表图像文本对。pyecharts风格:构建了50万张中英文图表图像文本对。处理方式:

    • 将图表中的文本(如标题、x轴和y轴标签)随机从互联网下载的自然语言处理(NLP)语料库中选择,并转换为Python字典格式。

  • 负样本自然图像:从COCO数据集中提取自然图像及其对应的文本。文本:随机选择以下句子:“It’s an image of nature”、“Here’s a nature picture”、“It’s a nature photo”、“This is a natural image”、“That’s a shot from nature”。目的确保新引入的词汇不会对CLIP-VIT擅长的自然图像数据造成干扰

  1. Vary-base(合并后再训练)
  • 文档数据:除了文档数据外,还需要支持公式和表格等格式的数据。
    处理方式:

    • 从arxiv收集一些.tex源文件,使用正则表达式提取表格、数学公式和纯文本。
    • 使用pdflatex重新渲染这些内容,并收集100万张英文页面和40万张中文页面。
    • 将每个文档页的文本基准转换为mathpix markdown格式,以统一格式。
  • 图表数据:使用GPT-4生成相关语料库,并利用高质量的语料库渲染20万张图表数据用于Vary-base训练。处理方式:

    • 使用GPT-4生成图表,确保图表中的文本(如标题、x轴和y轴值)具有强相关性。
  • 通用数据:使用LAION-COCO数据集随机提取自然图像文本对(400万对图像文本对)。在预训练和微调阶段使用这些数据进行训练。

格式遵循LLaVA-MPT sft格式:

<|im_start|>user: <img>"<image>"</img> "texts
input"<|im_end|> <|im_start|>assistant: "texts output" <|im_end|>

实验

GOT-OCR

GOT-OCR是Vary的后续,提出了通用OCR理论(OCR-2.0)及其模型GOT,用于解决OCR-1.0系统的局限性和LVLMs的不适用性问题。GOT模型采用统一的端到端架构,包括一个高压缩率的编码器和一个长上下文长度的解码器。编码器使用VitDet结构,具有约80M参数,能够处理1024x1024的输入图像。解码器使用Qwen模型,具有约0.5B参数,支持8K的最大长度tokens,以确保能够处理长上下文场景。

模型架构上分三部分:vision encoder + 线性层 + LLM。注意这里的encoder是一个80M的小模型(VitDet结构),并非CLIP,需要从头训练

GOT的训练分为三个阶段:

  • 预训练阶段:使用Tiny OPT-125M(为了节省GPU资源)对视觉编码器进行纯文本识别任务的预训练。输入图像被调整为1024x1024的方形,并使用自然场景和裁剪切片进行训练。

  • 联合训练阶段:将预训练的视觉编码器连接到更大的Qwen-0.5B解码器,并使用更多的通用OCR数据进行训练,如乐谱、数学公式和几何形状。

  • 后训练阶段:通过细粒度、多裁剪/页面的合成数据进一步改进GOT的泛化能力和适用性,支持区域提示OCR、超大图像OCR和批量PDF OCR特征。

下面展开看一下:

阶段一:纯文本识别任务的预训练(Pre-training of the Vision Encoder)

在第一个阶段,主要目标是预训练视觉编码器(vision encoder),以便它能够有效地处理常见的场景文本和文档级字符。

方法:为了提高训练效率和节省GPU资源,选择了一个小型的解码器(例如OPT-125M)来传递梯度给编码器。将包含场景文本的图像和包含文档级字符的手动图像输入到模型中。这样可以让编码器学习到两种最常见的字符编码能力。由于高分辨率图像的计算成本较高,选择了具有局部注意力机制的VitDet(base版本,约80M参数)作为编码器结构。该编码器可以将1024x1024x3的输入图像转换为256x1024的图像标记。最后通过一个1024x768的线性层,将这些图像标记投影到语言模型(如OPT-125M)的维度。

数据

  • 自然场景数据:英文图像:来自Laion-2B数据集。中文图像:来自Wukong数据集。使用PaddleOCR工具从这些多样化真实场景中捕获伪GT。总共获得200万(2M)数据,其中一半是中文,一半是英文。
  • 文档级数据:从Common Crawl收集开源PDF样式文件。
    使用Fitz Python包提取相应的密集文本内容。
    获得120万(1.2M)全页PDF样式图像-文本对和80万(0.8M)图像切片数据。
    切片数据包括行级和段落级,通过解析边界框从PDF图像中裁剪出来。

处理过程:对于自然场景数据,进行两种类型的处理:

  1. 移除边界框并按从上到下、从左到右的顺序合并每个文本内容。
  2. 根据边界框从原始图像中裁剪文本区域并保存为图像切片。

后一种方法获得了另外100万(1M)切片类型图像-文本对。

阶段二:多任务联合训练(Joint-training of the Encoder with a New Decoder)

在第二个阶段,目标是通过连接预训练的视觉编码器到一个新的、更大的解码器来扩展GOT的知识,以处理更通用的OCR任务。

方法:将第一阶段预训练的视觉编码器连接到具有更强能力的更大语言模型(例如Qwen-0.5B,500M参数)上,构建GOT的最终架构。将连接器(即线性嵌入层)的维度调整为1024x1024,以与Qwen-0.5B的输入通道对齐(1024*1024的图像最终被压缩为256个tokens再输入到LLM)。这个过程中,准备大量更通用的OCR数据(如乐谱、数学/分子公式和几何形状),以扩展OCR-2.0知识。

数据

  • 普通OCR数据:使用前一阶段的数据,并添加手写文本识别子任务,涉及不同语言的各种手写字体。上一阶段数据的80%(300万(3M)场景文本OCR数据和200万(2M)文档OCR数据)用于这阶段,并追加手写场景的OCR,数据来自Chinese CASIA-HWDB2 [ 1], English IAM [2], and Norwegian NorHand-v3,原数据的line-level slice会被6到8个地组合在一起当作longer-text。

  • 数学公式数据:从Arxiv爬取大量LATEX源.tex文件,提取约100万(1M)公式片段。
    将公式源转换为Mathpix格式,并使用Chrome-driver调用Mathpix-markdown-it工具将其渲染为HTML格式。
    将HTML文件转换为SVG并保存为PNG图像。

  • 分子公式数据:下载ChEMBL_25文件,包含200万(2M)smile源。
    使用Mathpix-markdown-it工具和rdkit.Chem包收集约100万(1M)分子公式图像-文本对。

  • 表格数据:从爬取的.tex文件中提取约30万(0.3M)表格源,并将其渲染为图像。使用IATEX作为渲染工具,因为其对高级表格的渲染效果更好。

  • 全页数据:使用Nougat方法获得约50万(0.5M)英文markdown PDF文本对。参照Vary方法,收集另外50万(0.5M)中文markdown对,并将其内容转换为Mathpix格式。还添加了20万(0.2M)内部数据,这些数据是使用Mathpix直接标记的,包括书籍、论文和财务报告。

  • 更通用的OCR数据乐谱数据:选择GrandStaff数据集作为源进行渲染。从音乐摘录中提取Humdrum kern转录,生成约50万(0.5M)样本。几何形状数据:使用TikZ风格的点和线,构造简单的几何形状和函数曲线,生成约100万(1M)几何Tikz数据。图表数据:使用Matplotlib和Pyecharts工具渲染图表图像-文本对,生成200万(2M)图表数据,其中一半来自Matplotlib,另一半来自Pyecharts。

阶段三:解码器的进一步后训练(Further Post-training of the Decoder)

二阶段训练后GOT已经能进行多场景OCR了。现在只对解码器部分进行后训练来定制GOT以启用三个新特性,即细粒度、多页面和动态分辨率OCR。在第三个阶段,目标是进一步提高GOT的泛化能力和适用性,通过后训练解码器来定制新的OCR特征。

方法:在不修改视觉编码器的情况下,通过后训练解码器来定制GOT,以支持细粒度、多页和动态分辨率OCR等新功能。

数据:生成细粒度的交互式OCR数据、多页OCR数据和动态分辨率数据,以支持区域提示OCR、超大图像OCR和批量PDF OCR功能。

  • 细粒度数据

    • 自然细粒度OCR:数据集:RCTW、ReCTS、ShopSign和COCO-Text。这些数据集提供文本边界框,可以直接用于生成细粒度(区域/颜色提示)OCR数据。
    • 文档级细粒度OCR:从下载的PDF文件中过滤出扫描格式的文件,使用Python包(Fitz/PDFminer)解析左侧部分。记录页面级图像、每行/段落的边界框及相应文本,生成box-guided OCR子任务的GT。每个坐标值首先标准化,然后放大1000倍。选择红色、绿色和蓝色作为最常用的颜色框架,并在原始图像上绘制它们。
  • 多裁剪数据:支持1024x1024输入分辨率,适用于常见OCR任务。使用InternVL-1.5裁剪方法,最大瓷砖数为12。使用单页PDF数据合成超高分辨率图像,包括水平和垂直拼接。通过这种方法,获得50万(50万)图像-文本对。

  • 多页数据:从Mathpix格式的PDF数据中随机采样2-8页,组成单个OCR任务。每个选定的页面包含的文本少于650个标记,以确保总长度不超过8K。生成约20万(20万)多页OCR数据,大部分是中文和英文页面交替的。

实验

总结

笔者关注vary和GOT已久,抽空做了下技术思路记录,GOT是Vary的后续,GOT通过三个阶段的训练,模型能够逐步提升其在各种OCR任务上的性能,从基础的纯文本识别到处理更复杂的格式化和通用OCR任务。每个阶段的训练都注重不同的数据类型和任务,确保模型在多样化的应用场景中都能表现出色。笔者在折腾过程中,这个链路的一阶段的数据搞起来太伤身了,可以直接在开源权重上进行post-train,二/三阶段微调后发现效果也达不到落地的效果,数据质量和数量都需要进一步的提升。目前该技术链路可以是多模态OCR-free模型打样。

参考文献

  • Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models,https://arxiv.org/abs/2312.06109
  • General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Model,https://arxiv.org/abs/2409.01704

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com