PP-OCR: A Practical Ultra Lightweight OCR System
论文地址:https://arxiv.org/abs/2009.09941
代码地址:https://github.com/PaddlePaddle/PaddleOCR

一、简介

PP-OCR是一个实用的超轻量中英文OCR系统,是针对中英文OCR问题,对最新的文本检测算法 Differentiable Binarization (DB) 和经典的文本识别算法CRNN的能力充分挖掘,虽然没有理论创新,但是从骨干网络选择和调整、预测头部的设计、数据增强、学习率变换策略、正则化参数选择、预训练模型使用以及模型自动裁剪量化8个方面,采用19个有效策略,对各个模块的模型进行效果调优和瘦身,最终得到整体大小为3.5M的超轻量中英文OCR和2.8M的英文数字OCR,下面是一些识别效果图。
在这里插入图片描述
在这里插入图片描述

二、PP-OCR概览

下图是PP-OCR的流程图,主要由DB文本检测、检测框矫正和CRNN文本识别三部分组成。

在这里插入图片描述

1.文本检测

文本检测的目标是定位出图像中的文字区域,一般希望检测结果是分字段的。PP-OCR采用的是基于分割的DB文本检测算法。使用该方法的出发点是基于分割的文本检测方法,可以得到文本的紧致包围盒。此外,DB的后处理比较简单,方便实际应用。为了进一步提升文本检测器的效果和效率,PP-OCR采用以下6个策略,超轻量骨干网络选择、头部轻量化、SE模块的舍弃、余弦学习率、预热学习率以及使用FPGM模型裁剪器,最终,PP-OCR里面文本检测模型的大小只有1.4M。

2.检测框校准

为了提升检测框中的文字识别效果,保持文字的一致性,一般都希望待识别的文本框是正的水平方向。由于DB的文本检测结果是多边形4点表示,所以很容易将检测结果经过仿射变换,变成水平方向。如果变换后的图像是竖直方向,则旋转90度后,变为水平方向。但是变为水平方向后,文本可能是颠倒的。所以需要一个文本方向分类器判断文本是不是颠倒的。如果实颠倒的文本,转正再识别就可以了。训练一个文本方向分类器是一个基本的图像分类任务。为了进一步提升文本方向分类器的效果和效率,PP-OCR采用以下4个策略,超轻量骨干网络选择,数据增强,增大输入分辨率和PACT int8量化,最终,PP-OCR里面文本分类器模型的大小只有500KB。

3.文本识别

文本识别的目标是将文本行图像转换为文本。PP-OCR采用的是文本识别常用的方法CRNN。虽然CRNN文本识别方法是2016年提出的,有一些历史,但是对于中文识别,是使用最普遍也最有效的文本识别方法。CRNN主要是融合了卷积特征和序列特征,采用CTC损失函数来解决预测标签和真值标签不一致的问题。为了进一步提升文本识别的效果和效率,PP-OCR采用以下9个策略,超轻量骨干网络选择,数据增强,余弦学习率,增大特征图分辨率,正则化参数,预热学习率,头部轻量化,预训练大模型和PACT int8量化,最终,PP-OCR里面中英文文本识别模型的大小只有1.5M。纯英文数字文本识别模型的大小只有900KB。

三、数据

为了实现一个实用的超轻量中英文OCR系统,文中构造了一个大规模的数据集进行模型训练,各个任务的数据统计信息如下表所示。其中合成数据使用的是text_render ( https://github.com/Sanster/text_renderer )

在这里插入图片描述

1.文本检测数据

对于文本检测模型的训练,PP-OCR总共使用了9.7万张图像作为训练集,500张图像作为校验集。训练集中的数据,有6.8万张图像来源于真实场景,2.9万张图像来源于合成数据。上述真实场景中的数据,大部分来源于OCR相关的公开数据集,包括LSVT, RCTW-17 , MTWI 2018 , CASIA-10K, SROIE, MLT 2019, BDI, MSRA-TD500 和 CCPD 2019. 还有一部分数据来源于百度图像搜索,通过关键字搜索,获取文档相关的图像。合成图像主要关注的场景有长文本文字的图像,多方向文本的图像和表格图像。

2.方向分类器数据

对于文本方向分类器模型的训练,PP-OCR总共使用了60万张图像作为训练集,31万张图像作为校验集。训练集中的数据,有10万张图像来源于真实场景,其余50万张图像是利用竖直字体合成,并且旋转成水平得到。真实场景数据主要来源于公开数据集 LSVT, RCTW-17 , MTWI 2018。所有校验集图像来源于真实场景。

3.文本识别数据

对于文本识别模型的训练,PP-OCR总共使用了2千万左右的训练数据和1.87万的校验数据。训练集中的数据,有200万张图像来源于真实场景,其余图像都是合成数据。真实场景,部分数据来源于OCR相关的公开数据集,包括LSVT, RCTW-17 , MTWI 2018和CCPD 2019,其余真实图像来源于百度图像搜索。主要是对检测的真值框或者检测结果的图像进行旋转矫正裁剪得到。合成数据主要关注的场景有背景嘈杂,平移,旋转,透视变换,直线扰动,噪声,竖直文字等等。合成数据的语料来源于真实场景图像的语料。所有校验集图像来源于真实场景。

4.OCR系统评估数据

为了验证OCR系统的效果,针对OCR实际应用场景,包括合同,车牌,铭牌,火车票,化验单,表格,证书,街景文字,名片,数码显示屏等,收集了300张图像作为评估集合。每张图平均有17个文本框,下图给出了一些图像示例。

5.多语言数据

为了验证PP-OCR对于非中英文数据的识别能力,收集了一些英文数字、法语、韩语、日语和德语的语料,合成了一些文本行图像,用于训练相应的文本识别模型。由于MLT 2019是包含多语言的文本图像,因此中英文OCR系统中的文本检测模型可以同时支持多语言文本检测。


感谢大家关注,PP-OCR: 3.5M超轻量中英文OCR模型详解系列总共有4个部分,列表如下:
(一) 简介、方案概览和数据
(二) 文本检测优化瘦身
(三) 文本方向分类器优化瘦身
(四) 文本识别优化瘦身

欢迎大家star PaddleOCR(https://github.com/PaddlePaddle/PaddleOCR),支持该repo的建设。感兴趣的朋友,可以加入Repo里面的PaddleOCR技术交流微信群,一起讨论OCR相关问题。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐