PP-OCR 论文解读:百度 PaddleOCR 通用中英文 3.5M 超轻量 OCR 模型
Paddle OCR 论文《PP-OCR: A Practical Ultra Lightweight OCR System》
文章目录
1. 论文介绍
题目:PP-OCR: A Practical Ultra Lightweight OCR System
作者:Baidu Inc.
发表时间:2020年
论文地址:https://arxiv.org/pdf/2009.09941.pdf
PaddleOCR 开源代码:https://github.com/PaddlePaddle/PaddleOCR
PP-OCR 文字识别简单 demo / 使用教程:【OCR】PaddleOCR 简单 demo 入门
PP-OCR 简介:PP-OCR是一个通用的超轻量中英文 OCR 系统,其识别 6622 个汉字的模型为 3.5M,识别 63 个英文数字的模型为 2.8M。除此之外,PP-OCR 也在包括法语、韩语、日语和德语等其他几种语言的识别任务上进行了验证。
模型轻量化的动机:在实际应用中,需要处理的图像通常是海量的,这使得高计算效率成为设计 OCR 系统的重要标准。并且 OCR 系统在很多场景下需要运行在嵌入式设备上,如手机。这就需要考虑模型大小,并权衡模型大小和性能。
2. PP-OCR 模型架构
PP-OCR 模型架构如下:
PP-OCR 是一个三阶段的 OCR 模型,这是目前主流的 OCR 模型结构,包括三个子模型:
- Text Detection(文本检测):定位图像中的文本区域,使用 DBNet 作为文本检测器,这是一种基于分割的文本检测方法。
- Detection Boxes Rectify(检测框调整):将文本框通过仿射变换转换为水平框;再使用一个文本方向分类器确定文本的上下方向,如果文本框上下颠倒,则将其翻转。
- Text Recognition(文本识别):将文本框解码为文字,使用 CRNN 作为文本识别器,采用 CTC loss 进行训练。
3. 文本检测网络:DBNet
OCR 的文本检测算法可以分为两大类:基于回归和基于分割。其中基于分割的方法将文本检测问题看成一个二分类任务,判断每个像素是否是文本,之后再聚合像素组成文本行。
DBNet (Differentiable Binarization,可微分二值化) 是发表在 AAAI2020 的论文 Real-time Scene Text Detection with Differentiable Binarization,DBNet 目前已经成为了基于分割的文本检测问题的典型算法,取得了广泛的应用。
3.1 DBNet 网络结构和 DB 函数
DBNet 的网络结构如下:
DBNet 的 backbone 是一个 FPN(特征金字塔)结构,两个 head 分别输出 probability map 和 threshold map, 同时图片 size 从1/4(H, W) 上采样回原图大小;然后两个 map 通过 DB 运算得到最终的 binary map
在基于图像分割的文本检测算法中,最后通常需要二值化 probability map 来得到文本域和背景域。一般方法是设置一个先验阈值,大于这个阈值认为是文本域,小于这个阈值是背景;最后通过一些后处理算法来拿到结果。
DBNet 将二值化操作放到令人网络的训练过程中,将一个固定的阈值改为训练一个可学习每个位置阈值的 DB 函数。于是有了 threshold map,用于二值化probability map。但二值化是不可微的,所以作者提出了一个与二值化相近的函数:
B ^ i , j = 1 1 + e − k ( P i , j − T i , j ) (1) \hat B_{i,j}=\frac{1}{1+{e^{-k(P_{i,j}-T_{i,j})}}} \tag{1} B^i,j=1+e−k(Pi,j−Ti,j)1(1)
这是一个 sigmod 形式的函数,其中 B ^ i , j \hat B_{i,j} B^i,j 表示近似的 binary map, T T T 是从网络学习的自适应阈值映射, k k k 是放大因子,通过实验设置 k = 50 k=50 k=50。下图展示了 k = 50 k=50 k=50 时,DB 与 SB (Standard Binarization) 非常相似:
3.2 Label generation
DBNet 的 label 是 probability map,binary map 和 threshold map,其中 probability map 和 binary map 是相同的。下图是 label 的生成过程:
DBNet 的 label 生成是基于 PSENet 实现的。对于一个文本图像,其 GT 区域是一个多边形 (polygon),即红色多边形。
使用 Vatti clipping algorithm 对 GT 多边形进行缩放,缩放偏移量 D D D 由 GT 多边形的周长 L L L 和面积 A A A 计算得到,其中 r = 0.4 r=0.4 r=0.4 为收缩系数:
D = A ( 1 − r 2 ) L (2) D=\frac{A(1-r^2)}{L} \tag{2} D=LA(1−r2)(2)
根据 D D D 生成一个缩小的二值化 mask 的 probability map(蓝色多边形)和放大的非二值化的 threshold map(绿色多边形)。
下图是博客 Differentiable Binarization论文阅读 展示的threshold map 的数值,其范围为 [ 0.3 , 0.7 ] [0.3,0.7] [0.3,0.7],0.3 和 0.7 是预设的最小和最大阈值。
threshold map 不是定值,与 DB 可微分是匹配的。
3.3 loss function
损失函数 L L L 由 probability map loss L s L_s Ls,binary map loss L b L_b Lb 和 threshold map loss L t L_t Lt 组成,其中 α = 1 \alpha=1 α=1, β = 10 \beta =10 β=10:
L = L s + α L b + β L t (3) L=L_s+\alpha L_b+\beta L_t \tag{3} L=Ls+αLb+βLt(3)
对于二值化的 L s L_s Ls 和 L b L_b Lb,使用 BCE Loss (binary cross-entropy),使用的正负样本比例为 1 : 3 1:3 1:3
L t L_t Lt 表示为计算预测值和放大的多边形 GT 的 L1 距离之和。
3.4 DBNet 训练和推理时的区别
DB 操作仅用于训练阶段;推理阶段与传统算法一样,即仅使用 probability map,直接给一个阈值进行二值化。如下图所示,其中蓝色表示传统 pipeline ,红色表示 DB pipeline,虚线表示仅推理运算。
在推理阶段,probability map 直接给一个阈值然后二值化。作者说可以加快推理而且精度损失不高。
本节参考:文本检测-DBNet(Differentiable Binarization)
3.5 PP-OCR 对 DBNet 的改进
为了进一步提升 DBNet 的效果和效率,PP-OCR 采用以下6个策略:超轻量骨干网络选择、头部轻量化、SE模块的舍弃、余弦学习率、预热学习率以及使用 FPGM 模型裁剪器。最终,PP-OCR的文本检测模型的大小只有1.4M。
4. 方向分类器:MobileNetV3
为了提升检测框中的文字识别效果,保持文字的一致性,一般都希望待识别的文本框是正的水平方向。由于DB的文本检测结果是多边形4点表示,所以很容易将检测结果经过仿射变换,变成水平方向。如果变换后的图像是竖直方向,则旋转90度后,变为水平方向。
但是变为水平方向后,文本可能是颠倒的。所以需要一个文本方向分类器判断文本是不是颠倒的。如果实颠倒的文本,转正再识别就可以了。训练文本方向分类器是一个基本的图像分类任务。
为了进一步提升文本方向分类器的效果和效率,PP-OCR采用以下4个策略:超轻量骨干网络选择,数据增强,增大输入分辨率和 PACT int8量化。最终,PP-OCR的文本分类器模型的大小只有500KB。
本节参考:干货|PP-OCR: 3.5M超轻量中英文OCR模型详解(一) 简介、方案概览和数据
5. 文本识别:CRNN
CRNN 是 2015 年提出的论文 An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition,尽管其历史久远,但依然是目前最普遍也最有效的文本识别方法之一。
CRNN 的结构是 CNN+RNN+CTC,这也是其名字的由来。其网络结构如下:
CNN,RNN 和 CTC 分别用于特征提取,序列建模和解码预测。关于 CTC 的介绍见 CTC Loss 数学原理讲解:Connectionist Temporal Classification
为了进一步提升 CRNN 的效果和效率,PP-OCR采用以下9个策略:超轻量骨干网络选择,数据增强,余弦学习率,增大特征图分辨率,正则化参数,预热学习率,头部轻量化,预训练大模型和PACT int8量化。最终,PP-OCR里面中英文文本识别模型的大小只有1.5M,纯英文数字文本识别模型的大小只有900KB。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)