淘宝客网站怎么批量采集淘宝商品方维采集淘宝数据思路,WordPress播放背景音乐,做教育网站,丹阳网站优化目前的一些多模态大模型的工作倾向于使用MLLM进行推理任务#xff0c;然而#xff0c;纯OCR任务偏向于模型的感知能力#xff0c;对于文档场景#xff0c;由于文字密度较高#xff0c;现有方法往往通过增加图像token的数量来提升性能。这种策略在增加新的语言时#xff0…目前的一些多模态大模型的工作倾向于使用MLLM进行推理任务然而纯OCR任务偏向于模型的感知能力对于文档场景由于文字密度较高现有方法往往通过增加图像token的数量来提升性能。这种策略在增加新的语言时需要重新进行训练计算开销较大成本较高。因此本文再来看看vary和got这两个衔接工作看看其完整的技术链路。
Vary 技术点 新视觉词汇表的生成设计了一个词汇网络和一个小型解码器Transformer通过自回归生成所需的词汇表。具体使用SAM预训练的ViTDetbase scale作为新词汇网络的主要部分并在其最后一层后添加两个卷积层以将特征形状转换为与CLIP-L输出匹配的形状。 数据在生成阶段使用手动文档和图表数据作为正样本自然图像作为负样本通过自回归方式训练词汇网络。文档数据包括从arXiv和CC-MAIN-2021-31-PDF-UNTRUNCATED收集的英文和中文字档图表数据包括使用matplotlib和pyecharts渲染的图表。 词汇表融合在生成新词汇表后将其添加到原始LVLMs中引入新特征。在这个过程中冻结新旧词汇网络的权重解冻其他模块的权重。新词汇表与原始CLIP-VIT并行各自拥有独立的输入嵌入层在LLM之前集成。
训练方法 整体分为两个阶段Vary-tiny和Vary-base Vary-tiny 首先构建了一个具有新视觉词汇表vision vocabulary的视觉TransformerViT命名为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”。 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以便让模型能够在这些场景下表现出更好的性能。
训练数据
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擅长的自然图像数据造成干扰。
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: imgimage/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来传递梯度给编码器。将包含场景文本的图像和包含文档级字符的手动图像输入到模型中。这样可以让编码器学习到两种最常见的字符编码能力。由于高分辨率图像的计算成本较高选择了具有局部注意力机制的VitDetbase版本约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图像中裁剪出来。
处理过程对于自然场景数据进行两种类型的处理
移除边界框并按从上到下、从左到右的顺序合并每个文本内容。根据边界框从原始图像中裁剪文本区域并保存为图像切片。
后一种方法获得了另外100万1M切片类型图像-文本对。
阶段二多任务联合训练Joint-training of the Encoder with a New Decoder
在第二个阶段目标是通过连接预训练的视觉编码器到一个新的、更大的解码器来扩展GOT的知识以处理更通用的OCR任务。
方法将第一阶段预训练的视觉编码器连接到具有更强能力的更大语言模型例如Qwen-0.5B500M参数上构建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万2Msmile源。 使用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 Modelshttps://arxiv.org/abs/2312.06109General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Modelhttps://arxiv.org/abs/2409.01704