作为本系列的开篇文章,首先定下本系列的整体基调。论文精读系列,旨在记录研读深度学习、强化学习相关论文的个人心得和理解,仅供参考,欢迎指正错误和研究探讨。
所有文章只会摘选论文部分进行分析,且不一定按原文行文顺序进行,详细内容请移步原文链接。本系列一个优势是,本人只是一个小白,会对论文中一些抽象的概念名词进行详细解读记录,尤其是一些简化的模型缩写,并且对于一些图表也会分析,因此对于初学者较为友好。
本文记录24年9月份由中国科学院大学和清华大学团队强强联合发表的 General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Model 论文研读心得。其提出了一种新的实现OCR的多模态大模型架构方式——OCR2.0,对传统的OCR1.0流程发起了挑战。
论文链接地址:https://arxiv.org/abs/2409.01704
项目源码地址:https://github.com/Ucas-HaoranWei/GOT-OCR2.0
【预告】本文总体(不严谨得)从三个方面入手记录该论文内容,分别是:动机、模型架构、实验结果
一、动机
在论文的第一和第二部分(Introduction & Related Work)主要是在讲本文创新内容的“动机”,具体来说就是几个问题,传统的OCR方法有什么不好?最近有什么好的新的解决方案?照搬新技术有什么问题?总而言之就是,取其精华去其糟粕。下面就按照这个逻辑记录一下传统的问题,和新的技术。
1.传统OCR弊
文章指出传统OCR,即OCR1.0的问题是“pipeline style”——流程式的解决方案。这里解释一下传统流程式的OCR1.0识别方案。
OCR1.0流程式方案:具体来说,传统的识别字符的方案像流水线工作一样,按顺序大致分为三个独立的模块——目标检测、区域裁剪、字符识别
(问题1:局部最优)
三个独立的模块合在一起按顺序运作才能完成从:文章图片——>文本 的转化。这样文章指出会导致的第一个问题是每个独立的模块容易陷入自己的局部最优。
这里的意思是,比如目标检测模型只专注于检测到文本,那么其最优解就是将图片中所有的文字都用框框住,那么可能就将一些不那么相关或者说最后感兴趣的内容(如批注,水印等等干扰正文信息的文本)框进来,当前最优解变成后续的“噪音”了;
又或者字符识别模型只关心对于裁剪图片中的文字进行提取,而关注不到检测模型看到的当前文本在整张图片中的位置空间信息,因此如行文阅读顺序,文字是否因为倾斜导致漏识别,这些都是识别模型无法解决的。
(问题2:成本高)
由于每个任务都是独立模型,使用起来缺乏通用性,对于不同任务,甚至要对每个模型都重新开始训练,不仅使用起来麻烦,而且成本高。
比如说,对于中文简体和繁体两种类型的字(对应两张不同的图片页面内容),传统的OCR可能要分别训练两个不同的检测模型和识别模型(因为简体和繁体可能对应的行文顺序也发生了变化)。OCR2.0就旨在将这些都统一到一起,固定视觉方面检测,只需微调后面的语言模型即可。
2.新技术的弊
文章指出了一个有潜力改变传统OCR困境的技术——大语言视觉模型(LVLMs)。首先记录解释一下原文出现的几个模型和技术概念。
LVLMs(Large Vision Language Models):是指结合视觉信息和语言信息的大规模多模态的深度学习模型,特别是基于Transformer架构的。可以处理如视觉问答、图像描述生成、图像文本匹配等任务。
CLIP(Contrastive Language-Image Pre-Training):通过图片-文本的对比学习和相似匹配来训练的多模态深度学习模型。CLIP关键技术是将图片和文本信息嵌入到同一个空间进行学习。
LLaVA(Large Language and Vision Alignment):结合大规模的语言模型(如GPT)和视觉模型(文中指出是CLIP)的多模态模型。
Qwen-VL:同样是一个文本和图片相互理解相互生成的多模态模型
文中提到了多个当前流行的多模态大模型例子,但这些模型都主要是处理文本和图像相互关系的,因此作者也指出了直接使用这些技术照搬到OCR来存在的弊端。
(问题1:感知与推理冲突)
文中提到的多模态大模型 LVLMs 主要的目标任务是图片和文本的相互理解转化,这意味着更多的关注是一种推理过程(如描述图片内容到文字,或根据文字生成图片)。而OCR更多关注只要识别到某个区域有字就行了。
简单来说,OCR 比 LVLMs 对视觉的要求更低、处理更简单。举例来说,图片中有一只狗坐在树下,OCR只需认识到图片中有狗和树两个目标检测(感知)即可,LVLMs还需理解树和狗在图片中的空间信息,狗和树的颜色等等更复杂的信息(推理)。
(问题2:标记对齐冲突)
在LVLMs中一张图片对应一句话,也就是说图片经过编码器的输出还要跟文本信息进行一个对齐操作,这样是为了使得后续解码器理解文本和图像之间的复杂细微联系,甚至是逻辑关系。但是OCR不行,一张图片中的每个字都要准确提取出来,一张图或区域可能对应成千个字,这样的对齐是出问题的。
可以理解为,LVLMs是一个更加复杂的任务,推理需要更多的信息准备,因此模型设计的输入上的内容更多,但是这么多信息在OCR上就有一些存在浪费,因为OCR只专注于找到这些文本,而不是去理解它们。
3.通用OCR2.0的利
基于以上背景,作者提出了对新型OCR2.0的目标展望。
主要表现在三个方法:
①端到端(End-to-end):意思是改进传统的多个流程的复杂方式,仅用一个多模态的大模型实现输入图片输出可编辑文本的效果。
②训练推理成本低(Low training and inference costs):这是相对于LVLMs来说的,因为其只需使用简单的视觉识别功能,因此可以对LVLMs任务模型进行改进优化其参数量。
③通用性(Versatility):借助大模型更强的表征能力,训练模型可以识别更通用的人工光学字符,如公式、表格、音符等
原文中附图展示了OCR2.0可以处理的图片输入。包括画面背景下的文字、文档内的高密度文本、对高兴趣区域的独立文本和更广泛的音符、化学符号、图表的识别。
二、模型架构
继续是全文最关键的部分(General OCR Theory),这是其项目缩写GOT名称的由来。
原文中提到整个OCR2.0的框架其实并不复杂,大体分为三个部分——image encoder(视觉文本识别感知模块)、linear layer(线性连接)、output decoder(文本输出模块)。
同时原文还特别指出其团队训练分为三个阶段模式——Pre-training(视觉预训练)、Joint-training(编解码器联合训练)、Post-training(语言模型后训练)。下图给出原文附图解释。
下面按照其模型结构和训练阶段分别展开。
1.视觉文本识别编码器Encoder + 线性连接层Linear layer
下面首先根据原文说法,搭建视觉编码器 encoder 的网络,这个编码器本质上是将图片转化编码成后续语言模型可以读取的标记 image token 信息。
原文指出视觉模块使用的是“经过微小调整”的基础版 VitDet,约80M个参数。其修改了编码器最后两层(具体修改需要参看源码分析)
经过修改后,这个Encoder接受 1024x1024x3 的正方形RGB图片输入,输出 256x1024 的图片 image tokens 标记。
文章还特别指出,其在编码器encoder输出后还添加了一个 1024x768 的线性层,用于连接视觉编码器和文本语言解码器(将输出的 image tokens形状 256x1024 匹配解码端 Qwen 支持的输入形状1024x1024)
2.视觉模块预训练Pre-Train
整个架构可以分为两个主要的模块,分别是处理图像信息的编码器 Encoder 与处理文本信息的解码器 Decoder,整个训练过程也是围绕两者进行的。
实际上(仅就个人理解上,正误未知)训练应该分为“四个阶段”,分别是 1)视觉编码器的预训练、2)视觉模型微调、3)语言文本模型的预训练、4)语言文本模型的微调。原文中没有这里第三个阶段是因为团队直接使用了预训练好的 Qwen 语言文本模型参数。
首先是训练的第一阶段(stage1)——视觉编码器Encoder预训练。
在GOT视觉预训练阶段,团队使用了5M个图文对,并且为了加速训练,提高训练效率并节省 GPU 资源,在解码器端使用的是一个微型语言模型 OPT-125M(而不是最终架构模型中的Qwen-0.5B),这样做是合理的,因为预训练是专注于提高视觉模型的识别能力。
下图是个人理解后简略画图,可能不准确,并且不包括原文中对图片数据的预处理操作,仅供参考。
在原文中有指出在所有的训练阶段都没有去锁定 LLM(Large Language Model)即语言文本模型的参数,在此处阶段指的是小型OPT-125m解码器处的参数。
还可以看到,按照原文意思,视觉编码器img Encoder的输出特征,仅仅只是经过一个线性层的形状转换就传入了文本解码器模型。按文中说法就是没有做图像到文本的对齐处理学习。
在多模态模型LVLMs中,通常会加入图像和文本特征的对齐步骤,以确保视觉编码器生成的图像特征与语义模型的输入特征在空间上和语义上保持一致。
因为是纯文本识别任务,任务更集中在文本识别,而不是复杂的图像-文本对齐,所以直接从图像到文本的生成路径依然有效。总而言之,OCR2.0的架构比 LVLMs 更简单清晰。
3.文本输出解码器Decoder
在通过第一阶段训练 Pre-training 得到预训练好的视觉编码器 img Encoder 后,只需在其输出后添加一个更大、功能更强大的预训练的语言文本解码器,就得到了完整版的 GOT-OCR2.0模型框架了。
原文中使用的是阿里研发的通义千问(Qwen)0.5B(5亿)参数量的语言模型,文中介绍GOT模型架构一共存有580M(5.8亿)参数量,这是对部署友好的,可以在4G内存的消费日常级GPU上实现推理任务。
同时,在语言解码器的输出上,文中指出GOT使用大约8k的上下文长度——意思是可以最多识别一张图片内的八千个光学字符并得到结果。
下图自画了完整的GOT模型可能的架构模式。
4.联合训练Joint-Train
搭建好完整的GOT模型后,进入训练的第二阶段(stage2),虽然原文中并没有提及,但个人感觉,但此处才是真正开始训练一个多模态的OCR模型。
数据是训练的关键,文章也指出,其最后实验结果的优秀表现得益于此处训练时对数据的渲染、合成合成多样数据集等操作,作者团队仔细探索了几种合成方法和数据引擎。
下原文附图所示,研究团队使用了至少六种渲染工具来辅助数据引擎,处理得到了如表格、数学分子式、几何形状、乐谱、图表等多样化的数据。
文中没有明确指出具体的训练方法,但在实验部分指出在联合学习阶段,设置最后输出的最大tokens文本数为6000(区别于最终部署模型的8000)。
因此可以推测此阶段的训练方式和预训练视觉模型没有太大区别,只不过扩展精细化了数据集,并将语言模型转为实际最终的Qwen预训练。不严谨得说,就是视觉预训练就是粗略的训练给GOT模型做热身工作,只有视觉模型“积极参与”;联合训练是正式的训练,视觉语言模型都“严阵以待”。
并且此处的训练就如标题——Scaling Up the OCR-2.0 Knowledge via Multi-task Joint-training 指出,是扩展GOT的知识面信息,在预训练时让模型获得识别文字,转义文本图片的“能力”;在联合学习阶段,具体扩展相应的OCR具体“实践知识”。
5.*功能性语言模型后训练Post-Train
在有了前两个阶段(stage1,2)的准备后,GOT模型已经基本具备图像识别文本的OCR能力,在最后一个阶段(stage3)仅微调解码器就可以为GOT定制其不同任务的能力。
最后阶段(stage3),是项目源码允许用户根据自己数据集进行微调训练的部分。这个阶段的训练微调也展示了整个模型架构相比传统OCR巨大的发展潜力和优越性能。
在原文中,作者团队仅通过调整训练最后的语言模型解码器Decoder就实现了三个新功能的增加——细粒度、多页和动态分辨率 OCR,这是传统OCR流程无法实现的。
具体来说,细粒度OCR——是指对图片目标兴趣区域的文本识别,而排除其他区域干扰,文中指出这项功能对点读笔等应用场景有用。其数据来源是开源的数据库。
如原文最后附录展示的,只提取出目标红框区域的表格文本内容。
多页和多分辨率OCR——具体是指对于图片分辨率大于模型输入的尺寸(1024x1024),其使用滑动窗口的裁剪识别和最后结果的拼接,也得到很好的OCR结果,还有对于多页的PDF文件,每页文件之间也存在页面顺序,多页OCR训练后也能区分。
文章中也在实验部分指出,在此阶段——后训练,才将输出的tokens最大长度设置为8192,达到最终模型的最大输出长度数。
三、实验结果
最后在实验结果结果展示上,作者先解释了其训练的一些细节,如使用 AdamW 优化器和余弦退火调度程序。然后对比了5个不同OCR任务的表现。可以看到其在0.58B的体量上,得到的效果非常好。
具体来说,通过关注其精度 Precison 和召回率 Recall 可以基本判断优劣,两者都是越高越好。
首先是文档级的密集文本数据在中文(zh)和英文(en)的性能不同模型比较。
然后是场景背景的图片数据效果。
然后作者团队还测试了格式化PDF图像的模型能力,其对比了原始图片输入和经过动态调整分辨率裁剪的输入,发现动态分辨率方案在处理高分辨率图像时是一个不错的选择。
还做了交互式OCR——细粒度OCR测试,和FOX做对比实验,效果也更好。还有更加通用的数据——以数字为中心的图表 OCR性能比较,GOT模型都展示了其优越性能。
四、结语
至此,关于这篇多模态的OCR架构文章精读暂告一段落,后续将根据其项目源码地址,进行部署和微调模型的测试,并记录在新的博文系列,敬请期待。
通读多遍全文才窥见部分作者团队思想的精妙绝伦,最后借此机会,对论文的研究团队和其开源代码表示最高的敬意!