这次分享的是场景更丰富、情形更复杂的自然场景ocr。核心算法将分为两部分介绍——文本检测和文本识别。不同于传统ocr,自然场景ocr的特点在于“场景”,我们需将文本从复杂的图片场景中独立出来,剔除场景的干扰,才能更快、更准地实现文本识别。故文本检测和文本识别是自然场景ocr端到端系统中两个必不可少的步骤。下面将由近期的ocr学习成果展开介绍。
1.1 PSENet简介
现阶段的文本检测算法主要分为两大类:基于矩形边界盒与基于像素实例分割。但这两类算法面临着两大挑战:
(1)基于矩形边界盒的文本检测方法,很难将文本完全封闭在矩形中,即很难处理任意形状的文本。
(2)大多数基于像素实例分割的算法很难将彼此接近的文本实例分开。
为了解决上述问题,南京大学与南京理工大学提出了PSENet(渐进尺度扩展网络),是一种改良版的实例分割的算法。下面对三个典型的文本检测算法进行对比分析,这三个算法分别是:ctpn,一种基于矩形边界盒的算法;pixel_link,一种基于像素实例分割的算法;PSENet。
如图1.1,(a)为原图,(b)、(c)、(d)依次为ctpn、pixel_link、PSENet的识别效果。由图可见,ctpn的检测框为矩形,处理矩形文本尚可,但很难将弯曲变形文本框进来,容易丢失信息;pixel_link的检测框可以将弯曲文本框进来,但相邻文本并没有区分开,从而影响了识别效果;PSENet既能处理弯曲文本,又能很好地将相邻文本区分开。可见PSENet的优势。
注:PSENet论文地址:https://arxiv.org/pdf/1806.02559.pdf
1.2 PSENet算法整体流程
在FPN的启发下,将低层特征映射与高级特征映射连接起来,从而有四个级联的特征映射。这些映射在F中进一步融合以编码各种视图的信息。然后将特征映射F投影到n个分支中,以产生多个分割结果S1 ,S2 ,…,Sn。每个Si是所有文本实例在一定范围内的一个分割掩码。不同分割掩码的尺度由超参数来决定。这些掩码中,S1 给出了具有最小标度(即最小内核)的文本实例分割结果,而Sn表示原始分割掩码(即最大内核)。在获得这些分段掩码后,使用渐进扩展算法将S1 中的所有实例“内核”逐渐扩展到Sn中的完整形状,并获得最终的结果R。
算法流程简要概括,便是:原图——>下采样——>ResNet进行特征提取——>上采样——>特征融合成——>卷积网络,分割成n个特征图——>逐级拓展,得到最终检测结果。
1.3 渐进式规模扩展算法工作过程
渐进扩展算法的过程,用到了广度优先搜索(BFS)算法的思想。例如,我们有3个分割结果S=S1 ,S2 ,S3(即图1.3的(a),(e),(f))。首先,基于最小内核特征图S1 (图1.3(a)),4个不同的连接组件c=c1,c2,c3,c4(即4个检测框)可以作为初始化分割。图1.3(b)中不同颜色的区域分别表示这些不同的连接部件。到目前为止,已经检测到了所有文本实例的中心部分(即最小内核)。然后,我们通过合并S2 中的像素,然后在S3中逐步扩展检测到的内核。最后,我们在图中提取标有不同颜色的已连接组件作为文本实例的最终预测(即图1.3(d))。
图1.3(g)中展示了尺度扩展的过程。扩展基于广度优先搜索算法,该算法从多个核的像素开始,然后迭代地合并相邻的文本像素。注意,在展开过程中可能存在冲突的像素,如图1.3(g)中的红色框所示。在实践中处理冲突的原则是,混淆的像素只能在先到先得的基础上由一个单一内核合并。由于“渐进的”扩展过程,这些边界冲突不会影响最终检测和处理速度。
1.4 标签生成
生成不同尺度的内核,就需有标签的图像来进行训练。为了生成不同尺寸内核所对应的基本实例,作者采用Vatti裁剪算法将原始多边形pn缩放di个像素来得到pi,其中每个缩放的pi都是使用0/1的二进制掩码来表示分割后的标签。
1.5 损失函数
PSENet的损失函数见式(3)。Lc、Ls分别表示完整文本实例和收缩实例的损失,λ平衡Lc和Ls之间的重要性。在自然场景中,文本实例通常只占据极小的区域,若使用二值交叉熵,网络偏向于非文本区域,故采用dice coefficient。
2.1 aster算法简介
通过文本检测“抠出”文本域后,便可以通过文本识别算法对文本域中的文本进行识别了。常见的文本识别算法面临两大挑战:
(1)大多数是基于水平文本行进行处理的,而处理弯曲文本行效果较差。
(2)大多数易受场景的干扰,场景文字识别效果较差。
为了解决上述问题,华中科技大学白翔老师团队提出了aster——一种具有柔性矫正功能的注意力机制场景文本识别方法。下面对两个典型的文本识别算法进行对比分析,这两个算法分别是densenet和aster。
如图2.1,(a)为原图(一张倾斜文本,一张完全文本),(b)为densenet的文本识别结果,(c)为aster-矫正网络的文本矫正结果,(d)为aster-识别网络的文本识别结果。由图2.1可见,densenet处理规则的倾斜文本效果尚可(倾斜文本旋转任意角度后便是水平文本),但处理弯曲文本的效果很差;相比之下,aster分为两步,它先通过矫正网络把弯曲文本矫正为规则文本,再进行识别,这样确实取得了很好的识别效果。可见aster的优势。
矫正网络自适应地将输入图像中的文本进行矫正并转换成一个新的图像。它以柔性薄板样条插值变换方法作为核心,该方法负责处理各种不规则文本,预测出TPS变换的参数后,并在无人为标注的情况下进行训练。
识别网络是一个基于注意力机制的Seq2Seq模型,它直接从矫正后的图像预测文本序列。整个模型进行端到端训练,只需要图像和它们的gt文本。通过大量的实验,验证了矫正网络的有效性,展现了aster识别规则与不规则的识别能力。此外,还证明了aster在端到端网络中的强大作用,它能够很好地增强文本识别的效果,使得水平方向文本识别器得以识别多方向文字。
2.2 矫正网络
矫正网络的核心是将图片空间矫正过程构建成可学习模型,流程如图2.2.1所示。先将输入图片下采样到Id,定位网络与格点生成器生成TPS变换的参数,再通过采样器生成矫正后的图片Ir。TPS(Thin Plate Spline)可对图片进行柔性变换,对于透视和弯曲这两种典型的不规则文字的矫正效果很好。
TPS插值法是指在对薄板中的N个点An形变到对应的N个点Bn时,采用的使得薄板弯曲能量最小的插值方法。弯曲变形能量小,意味着薄板整体的变形较为平滑,凹凸的部分被抹平了很多。此原理有点像物理学中的能量守恒定理,将空间的所有点移动到势能最低的面。对于二维的图片来说,采用弯曲能量最小的原则,意味着变形后的图像更加平滑,不易出现文字的扭曲变形。
如图2.2.2所示,定位网络分别由2个含有K个基准点的坐标集合组成。K个基准点的坐标用C表示,预测出的坐标用C'表示。定位网络由一个CNN网络预测出控制点坐标,并且在训练过程中无需任何坐标标注,只依赖识别网络的文本gt,完全由反向传播的梯度监督。
2.3 识别网络
弯曲文本通过aster矫正转换成了规则文本,实际上就能作为大部分识别网络的输入了。白翔老师团队使用了双向解码器扩展的seq2seq模型来解决识别问题。由于seq2seq模型的输出是由RNN生成的,因此它获取了字符依赖关系,从而将语言建模融入识别过程。此外,双向解码器可以在两个方向上捕获字符依赖关系,从而利用更丰富的上下文并提高处理速度。图2.3描述了单向版本的结构。根据经典的Seq2Seq模型,识别网络的模型由编码器和解码器组成。
(1)编码器结构为卷积循环神经网络,通过CNN提取特征图后,可以得到输入图像中比较鲁棒的,比较高级的特征图。这里会将这些特征图转化成一个序列,序列的长度就是特征图的宽度,并通过B-LSTM在两个方向上分析一个序列的独立性,并输出另一个同样长度的序列。这样一来,我们就得到了按照从左到右的顺序排列的特征向量。
(2)解码器部分中,seq2seq模型使用注意力机制计算权重,将特征序列转换为字符序列,并通过LSTM联系上下文,将字符序列按顺序依次输出。seq2seq模型能够输入和输出任意长度的序列。这种模型的序列建模能力强,并且能够获取输出依赖关系。要注意的是seq2seq模型是一个单向递归网络。
3.1 实验分析
针对上文介绍的几种算法,这里通过实验来直观地进行分析。一方面,由于本次实验用到的数据集基本为规则文本图片,另一方面,我这缺少大量的中文弯曲文本图片来训练矫正网络,即暂时没有处理中文弯曲文本的预训练模型,故将aster中的矫正网络拿掉,仅用aster的识别网络(基于attention的seq2seq模型)进行实验,从而减少处理时间。
(1)如表3.1测试集1的处理速度及结果所示,由于syn测试集是几乎没什么背景的单行文本图片,故在处理syn时基本上是跳过了文本检测步骤,直接使用识别网络进行识别。从表中可以发现densenet和基于attention的seq2seq模型的处理速度相近,densenet稍微快一点点;识别效果方面,seq2seq模型略优于densenet。综合比较两种识别算法效果相差不大。
(2)如表3.1测试集2的处理速度及结果所示,测试集2用到的是我自己收集200张复杂场景图片,数据来源于新浪微博配图,图片具有多行、场景复杂等特点,故检测网络起到了重要的作用。可见ctpn+densenet组合的处理速度要比PSENet的两个组合慢不少,故ctpn的检测性能要低于PSENet。此外,由于测试集2中的图片我目前没有打标记,故无法计算准确率,凭视觉来看三种组合算法的识别结果相近,均良好。
综上所述,PSENet检测算法+aster识别算法这个端到端组合,在性能和识别结果上达到了较好的折中,更适合投入到实际业务中去。
参考文献
[1] https://github.com/whai362/PSENet
[2] https://github.com/bgshih/aster
[3] https://github.com/YCG09/chinese_ocr
[4] https://blog.csdn.net/weixin_43624538/article/details/88630494
[5] https://cloud.tencent.com/developer/article/1484463
(部分文字、图片来自网络,如涉及侵权,请及时与我们联系,我们会在第一时间删除或处理侵权内容。电话:4006770986 邮箱:zhangming [at]eefung.com 负责人:张明)