论文链接:PP-OCR: A Practical Ultra Lightweight OCR System
1.导入
OCR (Optical Character Recognition,光学字符识别)是指电子设备检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。现有的OCR识别技术面临的挑战主要有:
①文本场景多样
文本场景主要分为场景文本和文件文本两大类。
场景文本主要的难点在于文本的视角、大小比例、弯曲、字体多样、语言多样、模糊与反光等,在各种现实场景中的干扰条件下,我们仍希望准确地识别这些文本。
文件文本的难点在于文件中文字的编排较为稠密,且文本相对较长,同时也面对不同字体甚至手写体识别的需求。
②计算效率
OCR任务对效率有较高的要求,最好在没有GPU的应用场景下,使用CPU也能完成较快的推理。同时,由于有在嵌入式系统上使用的需求,减小模型的大小也是必要的。
2.PaddleOCR模型简介
PaddleOCR主要将OCR任务切分成以下几个子任务:
①文本检测:目标检测任务,在图像中定位文本。PP-OCR基于简单分割网络,并使用了Differentiable Binarization算法。同时还使用了图中的6种策略提高准确率和加速。最终模型的大小减小至1.4M。
②检测框的矫正:图像分类任务,在识别检测到的文本之前,文本框需要被矫正为水平的矩形框,因此需要一个分类器来决定文本的朝向。采用了图中的4种策略来提高准度,同时减小模型大小。这个文本朝向分类器大概只有500KB。
③文本识别:使用CRNN作为文本识别器,整合了特征提取和序列化建模(sequential modeling)采用Connectionist Temporal Classification(CTC)损失函数来避免预测和标签上的不一致性。使用了图中的9种策略来优化准度和减小模型大小,最终这一文本识别器的大小为1.6M(中文),900KB(英文)。
训练数据:
文本检测数据集:97K imgs
文本朝向数据集:600K imgs
文本识别数据集:17.9M imgs
其中的一小部分数据被用作消融实验,从而验证上图中提到的一些策略的有效性。另外,研究团队还验证了PaddleOCR在日语、法语等其他语种上的识别表现。
3.主要策略
3.1文本检测任务
1.轻量级骨干网络
骨干网络的大小在很大程度上决定了整个模型大小,在综合考量各轻量级模型的准确率与大小之后,选择了MobileNetV3_large_x0.5作为模型的backbone。
2.轻量级检测头
检测头与FPN(特征金字塔)架构类似,融合不同尺寸的特征图来提高小文本区域的检测准度。为了便于不同分辨率的特征图进行合并,采用1×1的卷积层来将特征图的通道数变为一致(简称inner_channel)。Probability map(可能性预测图)和Threshold map(阈值图)从融合的特征图中产生,这之中也用到了inner_channel,因此inner_channel的数量对模型大小有重要影响,将inner_channel从256减少至96时,模型大小从7M减小至4.1M,但是准度也略微下降了。
3.移除SE模块
SE(Squeeze and excitation)模块,通过显式地建模通道之间的相互依赖关系,自适应地重新校准通道式的特征响应。这一模块可以显著提升视觉任务的准度,因此在MobileNetV3架构中包含了很多SE模块。但是,当输入图像的分辨率较大(例如640*640)时,很难去评估通道尺度上SE的特征响应。研究团队发现,SE对准度的提升是有限的,而时间消耗却较高,当从backbone中移除时SE,模型的大小从4.1M降至2.5M,但准度几乎没有下降。
4.余弦学习率衰减
一开始模型处于一个随机初始化状态,设置一个相对较大的学习率以加快收敛,之后逐渐衰减学习率来防止错过局部最小值点。
T=总batch数,t=当前batch数
5.学习率预热
在训练一开始,过大的学习率会导致模型的不稳定,这时推荐使用较小的学习率,当训练过程稳定下来以后,再使用初始化的学习率。实验证明在文本检测上面,这一策略同样有效。
6.EPGM剪枝
为了防止模型剪枝所带来的准度下降,使用了FPGM来寻找模型中对结果不重要的一些子网络进行剪枝。FPGM使用几何中值作为标准,每一个卷积层中的filter被当做欧式空间中的一个点,计算这些点的几何中点,然后移除值相近的filter。对每一层都进行剪枝往往导致准度的大幅下降,在PP-OCR中,通过论文《Pruning filters for efficient convnets》中提到的方法来计算出每一层对剪枝的敏感度,然后来评估每一层的冗余程度。
3.2 文本朝向分类任务
1.轻量级骨干网络
同样使用MobileNetV3作为backbone。因为这一任务相对简单,使用MobileNetV3_small_x0.35来权衡准确率和效率,研究团队采用更大规模的backbone时,并没有准度上的提升。
2.数据增强
旋转、视角扭曲、模糊以及高斯噪声(即基础的数据增强BDA,Basic Data Augmentation)被随机地使用于训练数据。实验表明,BDA对文本朝向分类器也有提升效果。除了BDA,RandAugment(将数据增广所产生的增量样本空间大大缩小,从而使其可与模型训练过程捆绑在一起完成,避免将其作为独立的预处理任务来完成)和RandErasing(随机删除一个矩形区域,通过均值填充)也对提升准度有帮助,其中RandAugment的表现较好,最终PP-OCR的文本朝向分类训练数据上应用了BDA和RandAugment。
3.提高输入分辨率
通常当归一化图像输入的分辨率增加时,准确率也会增加。由于骨干网络的轻量化,增加输入分辨率并不会引起显著的计算时间增加。在先前的文本识别方法中,归一化后的图像高度和宽度一般被设置为32和100。PP-OCR中,高度和宽度被设置成了48和192,从而增加准确率。
4.PACT量化
量化能使神经网络的延迟降低,体积减小,并减小计算功耗。当前的量化主要分为两种:offline和online。Offline用KL散度或滑动平均法来决定量化参数,并不需要重训练。Online是在训练过程中动态决定量化参数,可以产生更少的量化损失。PACT是一种新的online量化方法,提前将一些离群值从激活中移除,这样模型就能学到更加合适的量化比例,预处理激活的公式如下:
原始PACT对激活的预处理是基于ReLU函数的,所有激活值大于一个特定阈值时会被截断。不过MobileNetV3使用的激活函数并不只有ReLU,也有Hard Swish。使用原始的PACT量化会导致更高的量化损失。因此,研究团队更改了公式来减小量化损失:
另外,还增加了系数为0.001的L2正则化,来提升模型的鲁棒性,防止过拟合。
3.3 文本识别任务
1.轻量级骨干网络
采用MobileNetV3_small_x0.5或Mobile_V3_small_x1.0,后者比前者大了2M,但是准度有明显提高,可以根据实际应用需求来进行选择。
2.数据增强
除了基本的数据增强,团队也使用了TIA(Learn to Augment: Joint Data Augmentation and Network Optimization for Text Recognition)首先在图像上选一定的基准点,之后将这些点随机移动,并对图像进行几何变换来生成新的图像。
3.余弦学习率衰减
同3.1.4
4.调整特征图分辨率
为了适应多语言的识别,尤其是中文的识别,在PP-OCR中CRNN的输入宽度和高度设置为了32和320。原本MobileNetV3的步长就不合适了,为了保存更多的水平信息,我们修改了除第一层外下采样特征图的步长。为了保留更多垂直信息,我们进一步修改了第二个下采样层的stride(从2,1到1,1)。因此,第二个下采样层特征图的步长s2就影响到了整个特征图的分辨率,从而大幅提升了文本识别器的准度。实验说明,在PP-OCR中,s2被设置为(1,1)可以得到更好的准度。
5.正则化参数
weight_decay是一种广泛使用的避免过拟合的方法。在最终的损失函数后增加了L2正则项,让网络权重倾向于选择更小的数值,提升了泛化能力。
6.学习率预热
同3.1.5
7.轻量级检测头
原本的MobileNetV3使用一个全连接层对预测字符的序列化特征进行编码。这一序列化特征对模型的大小有影响,尤其是字符种类大于6000的中文字符识别。同时,也并不是维度越高,表示能力就越好。在PP-OCR中,序列化特征的维度被设置为48。
8.预训练模型
如果训练数据不多,可以在已有的预训练模型上进行fine-tune,在图像分类和目标检测任务的迁移学习上可以证明这是有效的。实际场景中,可以用于文本识别的数据往往是有限的,在很多样本(即使是合成的)上预训练的模型能有效提高模型的准度。
9.PACT量化
同3.2.4,使用PACT量化,但由于对LSTM层的复杂度太高,因此没有对LSTM层使用。