▌OCR基础科普
1.文字意义
文字在我们日常生活中随处可见,它是重要的信息载体,也是语言的载体。无论在衣食住行,还是工作学习中,都是可以看到文字。文字不仅可以让我们了解到图片的内容,还可以帮我们记录一些很重要的信息。因此,文字在我们的日常生活中扮演着很重要的角色。如果没有了文字,我们是很难理解世界的。
无论是一些具体的图像还是视频,例如下图中可以看到建筑物,如果把它前面石匾上的字遮住,就无法快速知道这是什么建筑或者什么类型的建筑物。再譬如西湖旁边拍的一个路牌,如果遮住文字区域,我们也很难知道箭头代表着哪个方向的路。最近看世界杯,如果碰到了不熟悉的队伍,若号牌被遮住,我们也不知道哪个球员进的球。博物馆里面的一个甲骨文的碑刻,若没有文字我们将很难理解历史。因此文字是理解世界、记录历史的一种重要符号。
2.OCR类型
OCR的子类比较多,这里我们将其粗略的分为三类:DAR、STR、HCR。
DAR是文档图像分析与识别,也是当下的一个热门研究方向。文档在我们日常生活中较为常见如A4打印的文档、票据等都属于这个范畴。文档里有比较丰富的一些图文的元素,除了文字外,还可以有表格、柱状图、饼状图、印章等。
STR代表场景文字检测与识别。它通常是指我们看到的自然场景当中的文字,例如街景,实拍的一些商品等。这个方向为无人驾驶、智慧交通,以及实拍商品检索等方面提供了帮助。
HCR即在线文字识别,如常见的手写的输入法,银行的手写的一些签名,都可以认为是 HCR 的范畴。这个领域在深度学习出来之前就已经有了一定的发展,而且识别精度较高,在实际的商用过程中较为常见。例如我们很早就会用搜狗输入法,这个技术在传统的方法方面已经能做到比较高的水平了,到了深度学习阶段精度有了进一步的提高。
3.泛OCR研究问题和典型的处理流程
OCR是贯穿图像文本到语义理解的一种 AI 技术。与ASR类似,其核心都是语义理解,但相比之下,OCR的难点在于要理解的语义是二维的。
下面罗列了一些典型的技术。
第一步需要对图片做预处理,比较典型方法有预分类、图像增强、图像校正等。
第二步是版面分析。版面分析对于文档图像文字识别来说是非常重要的,如文本段落、文本块,页眉、页脚、表格、标题等,这些都是版面分析中常会涉及到的元素。另外有一些很重要的区域,我们需要对它单独进行分析,这个也属于版面分析,比如手写签名、logo、水印等。
第三步是比较核心的内容,把版面分析得到的区块进行细致的数字化,主要包括文字检测、文字识别,另外还有公式、图表的检测和分类等。
最后是语义处理,这也是近两年的热门研究。这个模块以前通常称为OCR的后处理阶段,是离用户最近的地方。涉及结构化的理解、信息抽取、表格识别等。达摩院在这些方面都有团队在做一些研究,并陆续开放相关的模型。
4.ModelScope中OCR模型
达摩院在工业界和学术界上开源出了一系列的模型,这些模型贯穿了从基础的预训练模型,到核心处理模型,再到行业应用模型。下图中灰色部分表示即将在 ModelScope 上开源出来的模型。
达摩院OCR团队会在modelscope上全栈布局,并将最新的研究成果公开,最终能够促进行业落地。希望这些开源的模型,无论在学术界还是工业界,为大家提供帮助。
▌DIY通用场景OCR
接下来介绍如何利用在ModelScope上面公开的模型定制一些OCR pipeline。
首先介绍通用场景的pipeline。我们的通用场景主要包括三种场景,网络图、文档图、和街景图。利用这三大类数据集,训练了通用的文字检测和识别。
如何定制通用的 OCR 的pipeline。首先在model scope 找到通用行检测和行识别模型,下载对应的开源模型。另外现在平台可以兼容不同框架下的模型。接下来启动Notebook 编程界面(包括CPU 或GPU镜像)就可以进行 DIY 编程。
具体实现如下,首先加载了两个模型(检测模型和识别模型),并串联主函数。第二步是文字检测流程,即从检测的结果中提取出多边形区域结果输出。第三步文字识别流程,遍历多边形检测区域,对每一个区域进行剪裁,处理成文字行,调用文字行的识别模型。上述就是一个文字检测和识别的串联流程。
同时也可以通过在线体验(https://modelscope.cn/studios/damo/cv_ocr-text-spotting/summary),通过上传一张图片,选择相应场景,输出文字检测的区域及文字行识别结果。
对于上述内容,这里简单介绍一下相关的实现原理。对于文字识别网络构建,其中我们采用ConvTransformer 替换了以前的LSTM 特征提取模块,并且在实践中验证了这种模式的效果要优于之前的模型。整个模型流程大致为:先输入一张图片,进行一些视觉的 embedding提取,这里可以选用常见的一些骨干网络,如resNet等;对提取出的卷积 patch 进行一些处理,输入到 ConvTransformer模块,最后解码出来做CTC 对齐。(https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-general_damo/summary)
此外,我们还上线了业界流行的CRNN模型
(https://www.modelscope.cn/models/damo/cv_crnn_ocr-recognition-general_damo/summary),相比于Transformer模型,它更加轻便,性能稳定。不久后,我们将上线CRNN模型的训练代码,以便开发者训练自己的数据。
通用文字检测模型采用的是自底向上的一个文字检测网络:SegLink++,该方法基本的原理是检测出文字行中的文字块和文字块之间的吸引排斥的连接关系,最后组成每行文字的多边形外接框。它不仅可以对各种形状、长度的文本行检测,同时调参也较为方便。对于文本弯曲、粘连、密集等检测效果更好。(seglink++模型:https://modelscope.cn/models/damo/cv_resnet18_ocr-detection-line-level_damo/summary)
此外,我们也上线了DBNet文字检测模型,该模型是基于文字区域像素分割的方法,通过多尺度特征学习文字中心区域响应图和边缘区域响应图,经过处理之后可以得到文字区域四边形外接框。DBNet模型的特点是后处理简单,速度快,能够支持不同形状和长度的文字行的检测。
(DB模型:https://modelscope.cn/models/damo/cv_resnet18_ocr-detection-db-line-level_damo/summary)
▌DIY手写OCR
接下来介绍DIY 手写OCR。文字手写用的较多的两个场景是课堂笔记,另外一个是成人手写。相比于通用文字识别,手写它通常有一些笔划、笔锋等不规范写法,同时也会有文字超出文本行区域的情况。同样它的DIY流程与上面通用流程类似。
(https://www.modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-handwritten_damo/summary)
这里要使用读光手写行识别模型。
下面是一个示例,图中手写文档如果用通用识别模型识别的结果较差,语句也不通顺,切换为手写识别模型,准确率高了很多。
▌DIY表格OCR
最后一部分介绍如何DIY表格OCR。表格特别是在文档 OCR 领域较为常见,如发票、证件、 Excel转图片等。
表格模型选择有线表格模型。检测模型可以思考一下用行识别还是单词力度的检测模型更好。识别模型视情况选择手写或者通用模型。DIY过程中首先要做表格的检测,然后再做文字的检测和识别,最后要把文字再嵌入单元格。
红色是用文表格结构识别模型检测出来的结果。然后调用基础的文字的检测和识别,把文字放置回所属单元格中,最终形成一个完整的表格。
最后介绍一下表格 OCR 的原理。与大部分视觉任务所见即所得不同,表格结构识别需要获取单元格与其他单元格的关系才能推出该单元格在表格中的位置(逻辑坐标),因此表格结构识别的第一个难点在于关系的学习。
除此之外,在表格OCR场景,需要精确的得到单元格在图片中的位置(物理坐标)才能精确的获取文字与表格的关系,因此第二个难点是需要非常精准的得到表格线的位置。我们表格结构识别模型使用了一个双向回归的表格类检测网络,基于自底向上的思路,将基础元素的检测,还有关系的学习放在了一个网络中,使得关系的学习变成了一个回归问题,这样可以使网络很简单地学习出来表格的基础结构,同时也可以学习到这些基础结构之间的关系。
首先,基于关键点检测得到单元格的顶点以及中心点的位置;其次,用一个关系学习模块,基于单元格中心点学习到顶点的距离,获得单元格bbox,并基于单元格顶点学习出到共用该顶点的单元格的中心点距离,获得gbox(group box)。其实,gbox表征的即是单元格之间的关系。由于关键点检测可以获得非常精确的单元格顶点坐标,因此基于gbox将bbox拼接起来,可以获得非常精准的单元格bbox。从而分别解决了表格结构识别的两个难点。
除此之外,我们加入了一个Pair Loss,让模型关注与bbox与gbox的协同学习并挖掘其中的难样本。
对于无线表格数据,我们正在推出无线表格结构识别模型,该模型可以识别出图片中的无线单元格并预测单元格的逻辑坐标,如下图所示。
其主要原理为结合视觉特征与单元格检测结果直接对单元格的逻辑坐标进行预测。模型设置了两个级联的回归器使得网络可以兼顾全局与局部的注意力。同时模型显式地利用了单元格间与单元格内的逻辑约束来对网络进行优化。
与有线表格类似,这里同样可以调用基础的文字的检测和识别,把文字放置回所属单元格中,最终形成一个完整的表格。
表格模型下载:https://modelscope.cn/models/damo/cv_dla34_table-structure-recognition_cycle-centernet/summary
表格体验创空间:https://modelscope.cn/studios/damo/cv_table-ocr/summary
▌OCR预训练技术-文档预训练
文档具有丰富的内容和多变的形态,是重要的信息载体。借助文档领域OCR技术的成熟应用,文档理解逐渐成为泛OCR领域的重要技术方向。为面向未来的数字化、智能化进程提供可能,具有巨大的研究价值和广泛的应用价值。近年来,伴随文档理解预训练技术的快速发展,相比传统方法在文档理解下游任务上取得巨大的效果提升,文档预训练模型已逐渐成为学术界的热点研究问题,也是工业界重点发展的技术领域。
读光OCR团队针对现有文档预训练模型没有充分利用视觉和语言两个模态信息之间的交互,以及过分侧重语义、对版式(layout)建模较弱的问题,提出了 VLDoc 系列模型,通过提出视觉-语言双向特征精准对齐的文档预训练方法,充分利用视觉和语言两个模态信息之间的交互。同时融合一种基于文档文字结构的预训练方法,以实现对文档版式信息更充分的建模。VLDoc系列模型在包括在FUNSD (表格理解)、CORD (发票信息提取)、RVL-CDIP (文档分类)、DocVQA (文档VQA)等学术界公共数据集上取得SOTA效果。
在真实业务场景中,VLDoc系列模型也被证明具有良好的泛化性以及小样本学习能力。因此,作为基座模型,在达摩院文档AI产品(包括IDP和自学习平台)中获得广泛应用。
为方便用户使用文档理解多模态预训练模型,考虑到用户对模型效果以及使用场景的要求,读光OCR团队结合已提出的 VLDoc 系列文档预训练模型的优势预训练任务以及模型结构,推出了中英文文档理解多模态预训练模型VLDoc,集成在modelscope上,提供了简洁的调用示例,欢迎大家使用。
模型下载链接地址:https://www.modelscope.cn/models/damo/multi-modal_convnext-roberta-base_vldoc-embedding/summary
▌OCR预训练技术-文字检测预训练
场景文字检测是计算机视觉领域中的一个非常基础、但也十分有挑战性的任务,它在许多实际应用场景中发挥着关键作用,比如场景理解、自动驾驶、图像搜索、智慧超市等。因此,如何快速准确地提取图片中的文字信息,不仅吸引了许多科研工作者,也是众多公司核心业务场景之一。
随着深度学习的迅猛发展,基于神经网络模型的文字检测算法取得了长足的进步。但由于图片内的文字样式复杂多变,书写顺序灵活,而且部分场景的数据规模很小,网络仅依靠图像信息很难获得对文字的深层次理解。因此,为了解决这个问题,读光OCR团队根据文字检测天然涉及到图像和文本两种模态这一特点,研发出了一种基于多模态交互理解的文字检测预训练算法VLPT。
VLPT主要通过三个预训练任务来建立起图像和离散文本之间的对应关系。第一个任务是掩码语言建模,即根据图片中所有文本构成文本序列,同时遮蔽住部分文本,然后根据图像信息预测该掩码对应的文本。第二个任务是图文对比学习,即通过将图片和文本序列嵌入到一个共享的空间中,训练网络使得对应的文本序列和图片在该空间中距离更近。第三个任务是文本存在判断,即通过判断字典中该文本的相似词是否出现在图片中,训练网络理解文本形近字能力。通过这三个任务,VLPT训练得到的模型不仅在图像层面上理解了文字的表现形式,而且能够对同一文本的各种样式变换以及文本的阅读顺序等进行更深入的理解。
VLPT可以适配几乎所有基于卷积神经网络的文字检测算法,而且我们在多种文字检测算法(如EAST、PSENet和DB)和多种数据集(如IC15、IC17、TotalText、CTW1500和TD500)上验证了方法的有效性。这种基于多模态交互理解的文字检测预训练算法为解决场景文字检测问题提供了一种新的思路和方法,为相关领域的研究和应用带来了更广阔的发展空间。
为方便用户使用文字检测多模态预训练模型,读光OCR团队将基于VLPT的文字检测算法DB集成在modelscope上,提供了简洁的调用示例,欢迎大家使用。
Modelscope链接:
https://www.modelscope.cn/models/damo/cv_resnet50_ocr-detection-vlpt/summary