文字识别OCR也是目前CV的主要研究方向之一。本文主要总结目前文字识别OCR方向相关内容,包括单独文字识别以及结合文字检测和文字识别的端到端的文字识别。希望这篇文章能够帮助各位。
对于文字识别,实际中一般首先需要通过文字检测定位文字在图像中的区域,然后提取区域的序列特征,在此基础上进行专门的字元识别。但是随著CV发展,也出现很多端到端的End2End OCR。
文字检测定点阵图片中的文本区域,而Detection定位精度直接影响后续Recognition结果。
如图2中,红框代表「LAN」字元ground truth(GT),绿色框代表detection box。在GT与detection box有相同IoU的情况下,识别结果差异巨大。所以Detection对后续Recognition影响非常大!
目前已经有很多文字检测方法,包括:
其中CTPN方法的介绍如下:
识别水平文本行,一般用CRNN或Seq2Seq两种方法(欢迎移步本专栏相关文章):
一文读懂CRNN+CTC文字识别?zhuanlan.zhihu.com
完全解析RNN, Seq2Seq, Attention注意力机制?zhuanlan.zhihu.com
对于特定的弯曲文本行识别,早在CVPR2016就已经有了相关paper:
Robust Scene Text Recognition with Automatic Rectification?arxiv.org
对于弯曲不规则文本,如果按照之前的识别方法,直接将整个文本区域图像强行送入CNN+RNN,由于有大量的无效区域会导致识别效果很差。所以这篇文章提出一种通过STN网路学习变换参数,将Rectified Image对应的特征送入后续RNN中识别。
其中Spatial Transformer Network(STN)指:
Spatial Transformer Networks?arxiv.org
对于STN网路,可以学习一组点 到对应点 的变换。而且STN可以插入轻松任意网路结构中学习到对应的变换。
如果对于 有:
代表典型二维平面图像的缩放 +平移 运算:
核心就是将传统二维图像变换(如旋转/缩放/仿射等)End2End融入到网路中。考虑篇幅不再进行详细介绍。
由于End2End OCR同时涉及文字检测+文字识别两个方向,对于不熟悉的读者建议首先阅读上述CTPN/CRNN/Seq2Seq三篇文章了解相关内容(当然求点赞喽)。
在之前介绍的演算法中,文字检测和文字识别是分为两个网路分别完成的,所以一直有研究希望将OCR中的Detection+ Recognition合并成一个End2End网路。目前End2End OCR相关研究如下:
Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks?openaccess.thecvf.com
该篇文章采用Faster R-CNN的Two-stage结构:首先Text Proposal Network(即RPN)生成对应的文本区域Text Proposal,后续通过Bounding Box regression和Box Classification进一步精修文本位置。但是不同的是,在RoI Pooling后接入一个LSTM+Attention的文字识别分支中,如图7。由于识别与之前介绍的文字识别方法大同小异,后续不再重复介绍。
但是这样的结构存在问题。举例说明:Faster R-CNN的RPN只是初步产生Proposal,后续还需要再经过一次Bounding Box regression才能获取准确的检测框,该问题在CTPN论文中有说明,如图8:
所以Text Proposal不一定很准会对后续识别分支产生巨大影响,导致该演算法在复杂数据集上其实并不是很work。
Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework?openaccess.thecvf.com
在与Faster R-CNN不同,Deep TextSpotter生成的Region Proposal包含6个数值:
其中 代表Proposal box在图像中的位置, 代表Proposal box与水平方向的夹角, 代表置信度confidence。
对于Region Proposal所在的特征 ,通过双线性插值可以获得 固定高度的变换后的特征 ,
其中 代表双线性采样核,本质就是传统的图像旋转+缩放插值变换。
在获得 后,显然可以后接RNN+CTC进行识别。可以看到Deep TextSpotter通过学习角度 ,将proposal通过双线性插值变换为固定高度的水平特征,然后再进行识别,达到一种End2End的效果。与同时期的上一个方法类似,同样存在RPN生成Proposal不准导致识别率低的问题,所以在复杂数据集实际效果可能并不是太好。
Attention-based Extraction of Structured Information from Street View Imagery?arxiv.org
该文章由Google在2017年提出,主要针对多视角的街景采集数据进行OCR,其关键点为:
该方法利用spatial attention进行端到端OCR,相比检测+检测方法更加新颖。
Mask TextSpotter: An End-to-End Trainable Neural Network for Spotting Text with Arbitrary Shapes?arxiv.org
该方法由 @旷视科技 在2018年提出,主要用于解决不规则弯曲字元End2End的识别问题。相比倾斜字元,处理弯曲不规则字元更难,无法简单通过Proposal角度 对特征进行变换。
Mask TextSpotter借鉴了Mask RCNN,首先由RPN网路生成Proposal,再由Faster R-CNN分支对Proposal做进一步分类和位置回归,同时通过Mask分支分割出文本所在区域Global word map和每个字元所在中心Background map。这样不仅可以获得整个文本word区域,还可以获得每个字元character区域。
在文字识别方面Mask TextSpotter设计0~1和A~Z共计36个「one-hot」形式的Character map进行分类,即没有使用RNN直接强行分类。如果用Mask TextSpotter识别汉字,则需要设计4000+ Character map,这显然是不科学的。另外该方法在识别过程中也没有用到文字的序列信息。
Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline?openaccess.thecvf.com
在该文章中提出一个包含250k图的中国车牌数据集CCPD,每个标注包含1个box+4个定位点+识别文字GT:
在网路方面该文章提出一种PRNet:
该文章核心内容就是推出了一个车牌OCR数据集CCPD,并在这个数据集上提出一种BaseLine方法。该方向研究人员可以尝试使用该数据集。
在这里特别感谢一下所有开放数据集的研究人员!数据才是cv第一生产力!
An end-to-end TextSpotter with Explicit Alignment and Attention?openaccess.thecvf.com
改文章与Deep TextSpotter比较类似,首先生成带有角度 的倾斜Text Proposal,然后通过类似于RoI Pooling的Text-alignment提取固定长度的feature sequence,再送入RNN+Seq2Seq+Attention结构进行识别。
与Deep TextSpotter不同的是,Text-alignment在通过双线性插值提取到整个Proposal特征后,再通过一组Inception卷积获取feature sequence送入RNN,而不是直接把双线性插值结果送入RNN。
FOTS: Fast Oriented Text Spotting with a Unified Network?arxiv.org
FOTS采用Single-Shot结构结合Feature Pyramid Network直接检测文字区域,输出带角度 的Bounding Box;之后利用双线性插值RoIRotate获取固定大小的特征,送入双向LSTM进行识别。
由于使用Single-Shot结构,所以应该是相对「Fast」一点。。。
SEE: Towards Semi-Supervised End-to-End Scene Text Recognition?arxiv.org
另外SEE作者2017年在arXiv上放出STN-OCR的论文,应该是没有中任何会议。考虑到完整性也挂在这里。
只整理了CVPR/ICCV/ECCV/ICDAR/AAAI等顶会相关演算法,后续有相关paper随时更新。
推荐阅读: