文字识别OCR方法整理

文字识别OCR方法整理

文字识别OCR也是目前CV的主要研究方向之一。本文主要总结目前文字识别方向相关内容,包括单独文字识别以及结合文字检测和文字识别的端到端的文字识别。希望这篇文章能够帮助各位。

图0 文字检测Detection与文字识别Recognition

对于文字识别,实际中一般首先需要通过文字检测定位文字在图像中的区域,然后提取区域的序列特征,在此基础上进行专门的字符识别。但是随着CV发展,也出现很多端到端的End2End OCR。

文字检测(Text Detection)

文字检测定位图片中的文本区域,而Detection定位精度直接影响后续Recognition结果。

图1.1

如图1.1中,红框代表“LAN”字符ground truth(GT),绿色框代表detection box。在GT与detection box有相同IoU的情况下,识别结果差异巨大。所以Detection对后续Recognition影响非常大!

目前已经有很多文字检测方法,包括:
EAST/CTPN/SegLink/PixelLink/TextBoxes/TextBoxes++/TextSnake/MSR/...

其中CTPN方法的介绍如下:

场景文字检测—CTPN原理与实现zhuanlan.zhihu.com图标

文字识别(Text Recognition)

识别水平文本行,一般用CRNN或Seq2Seq两种方法(欢迎移步本专栏相关文章):

  • CRNN:CNN+RNN+CTC
一文读懂CRNN+CTC文字识别zhuanlan.zhihu.com图标
  • CNN+Seq2Seq+Attention(文末有OCR代码)
完全解析RNN, Seq2Seq, Attention注意力机制zhuanlan.zhihu.com图标

对于特定的弯曲文本行识别,早在CVPR2016就已经有了相关paper:

  • Robust Scene Text Recognition with Automatic Rectification. CVPR2016.
Robust Scene Text Recognition with Automatic Rectificationarxiv.org
图2.1

对于弯曲不规则文本,如果按照之前的识别方法,直接将整个文本区域图像强行送入CNN+RNN,由于有大量的无效区域会导致识别效果很差。所以这篇文章提出一种通过STN网络学习变换参数,将Rectified Image对应的特征送入后续RNN中识别。

图2.2

其中Spatial Transformer Network(STN)指:

Spatial Transformer Networksarxiv.org
图2.3 STN

对于STN网络,可以学习一组点 (x_i^s,y_i^s) 到对应点 (x_i^t,y_i^t) 的变换。而且STN可以插入轻松任意网络结构中学习到对应的变换。

\left (  \begin{matrix}    x_i^s \\    y_i^s   \end{matrix}   \right ) = T_\theta(G_i)=A_\theta  \cdot  \left (  \begin{matrix}    x_i^t \\    y_i^t \\    1   \end{matrix}   \right ) = \left [  \begin{matrix}    \theta_{11} &\theta_{12} & \theta_{13} \\    \theta_{21} &\theta_{22} & \theta_{23}    \end{matrix}   \right ] \left (  \begin{matrix}    x_i^t \\    y_i^t \\    1   \end{matrix}   \right ) \\

如果对于 A_\theta 有:

 A_\theta = \left [  \begin{matrix}   s &0 & t_x \\   0 & s & t_y    \end{matrix}   \right ]\\

代表典型二维平面图像的缩放 (s_x,s_y) +平移 (t_x,t_y) 运算:

x_i^t = s\cdot x_i^s+t_x\\ y_i^t = s\cdot y_i^s+t_y\\

核心就是将传统二维图像变换(如旋转/缩放/仿射等)End2End融入到网络中。考虑篇幅不再进行详细介绍。

  • Scene Text Recognition from Two-Dimensional Perspective. AAAI2018.

该篇文章于MEGVII 2019年提出。首先在文字识别网络中加入语义分割分支,获取每个字符的相对位置。


图2.4

其次,在获取每个字符位置后对字符进行分类,获得文字识别信息。该方法采用分类解决识别问题,并没有像传统方法那样使用RNN。

图2.5

除此之外,在文章中还是使用了Deformable Convolution可变形卷积。相比传统3x3卷积,可变形卷积可以提取文字区域不同形状的特征。

图2.6
  • SqueezedText: A Real-time Scene Text Recognition by Binary Convolutional Encoderdecoder Network. AAAI2018.
SqueezedTextren-fengbo.lab.asu.edu

该文章引入二值层(-1 or +1)部分替换CRNN中的float浮点卷积,核心是使用很小的网络进行识别。

  • Handwriting Recognition in Low-resource Scripts using Adversarial Learning. CVPR2019.
Handwriting Recognition in Low-resource Scripts using Adversarial Learningarxiv.org
  • ESIR: End-to-end Scene Text Recognition via Iterative Image Rectification. CVPR2019.
ESIR: End-to-end Scene Text Recognition via Iterative Image Rectificationopenaccess.thecvf.com


图2.7

ESIR采用cascade R-CNN级联思路,通过3次变换将弯曲字符变换为水平,再经过LSTM识别。具体变换思路请查阅论文。

End2End OCR (Detection+ Recognition)

由于End2End OCR同时涉及文字检测+文字识别两个方向,对于不熟悉的读者建议首先阅读上述CTPN/CRNN/Seq2Seq三篇文章了解相关内容(当然求点赞喽)。

在之前介绍的算法中,文字检测和文字识别是分为两个网络分别完成的,所以一直有研究希望将OCR中的Detection+ Recognition合并成一个End2End网络。目前End2End OCR相关研究如下:

  • Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks. ICCV2017.
Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networksopenaccess.thecvf.com
图3.1

该篇文章采用Faster R-CNN的Two-stage结构:首先Text Proposal Network(即RPN)生成对应的文本区域Text Proposal,后续通过Bounding Box regression和Box Classification进一步精修文本位置。但是不同的是,在RoI Pooling后接入一个LSTM+Attention的文字识别分支中,如图3.2。由于识别与之前介绍的文字识别方法大同小异,后续不再重复介绍。

图3.2

但是这样的结构存在问题。举例说明:Faster R-CNN的RPN只是初步产生Proposal,后续还需要再经过一次Bounding Box regression才能获取准确的检测框,该问题在CTPN论文中有说明,如图3.3:

图3.3 CTPN文章中提及RPN生成Proposal不准的问题

所以Text Proposal不一定很准会对后续识别分支产生巨大影响,导致该算法在复杂数据集上其实并不是很work。

  • Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Framework. ICCV2017.
Deep TextSpotter: An End-to-End Trainable Scene Text Localization and Recognition Frameworkopenaccess.thecvf.com
图3.4 Deep TextSpotter

在与Faster R-CNN不同,Deep TextSpotter生成的Region Proposal包含6个数值:

[x, y, w, h, \theta,p]\\

其中 [x, y, w, h] 代表Proposal box在图像中的位置, \theta \in (-\frac{\pi}{2},\frac{\pi}{2}) 代表Proposal box与水平方向的夹角, p\in[0,1] 代表置信度confidence。

对于Region Proposal所在的特征 U\in \mathbb{R}^{w\times h\times C} ,通过双线性插值可以获得 H’=32 固定高度的变换后的特征 V\in \mathbb{R}^{(wH'/h)\times H'\times C}

V^c_{x',y'}=\sum_{x=1}^{w}\sum_{y=1}^{h}{U^c_{x,y}\cdot \kappa (x-\mathcal{T}_x(x'))\cdot \kappa(y-\mathcal{T}_y(y'))}\\

其中 \kappa(v)=\max(0, 1-|v|) 代表双线性采样核,本质就是传统的图像旋转+缩放插值变换。

图3.5

在获得 V\in \mathbb{R}^{(wH'/h)\times H'\times C} 后,显然可以后接RNN+CTC进行识别。可以看到Deep TextSpotter通过学习角度 \theta ,将proposal通过双线性插值变换为固定高度的水平特征,然后再进行识别,达到一种End2End的效果。与同时期的上一个方法类似,同样存在RPN生成Proposal不准导致识别率低的问题,所以在复杂数据集实际效果可能并不是太好。

图3.6 Deep TextSpotter对应的CTC识别
  • Attention-based Extraction of Structured Information from Street View Imagery. ICDAR2017.
Attention-based Extraction of Structured Information from Street View Imageryarxiv.org
图3.7 spatial attention ocr

该文章由Google在2017年提出,主要针对多视角的街景采集数据进行OCR,其关键点为:

  1. 利用CNN提取不同视角的图片的特征,并将特征concat为一个大的特征矩阵 f
  2. 计算图片中文的spatial attention \alpha_t\alpha_t 越大该区域为文字区域的概率越大
  3. 通过 \alpha_t 抽取 f 中文字区域特征 u_t ,并送入后续RNN进行识别

该方法利用spatial attention进行端到端OCR,相比检测+检测方法更加新颖。

  • Mask TextSpotter: An End-to-End Trainable Neural Network for Spotting Text with Arbitrary Shapes. ECCV2018.
Mask TextSpotter: An End-to-End Trainable Neural Network for Spotting Text with Arbitrary Shapesarxiv.org
图3.8 Mask TextSpotter

该方法由 @旷视科技 在2018年提出,主要用于解决不规则弯曲字符End2End的识别问题。相比倾斜字符,处理弯曲不规则字符更难,无法简单通过Proposal角度 \theta 对特征进行变换。

Mask TextSpotter借鉴了Mask RCNN,首先由RPN网络生成Proposal,再由Faster R-CNN分支对Proposal做进一步分类和位置回归,同时通过Mask分支分割出文本所在区域Global word map和每个字符所在中心Background map。这样不仅可以获得整个文本word区域,还可以获得每个字符character区域。

图3.9 Mask TextSpotter进行文字识别

在文字识别方面Mask TextSpotter设计0~1和A~Z共计36个“one-hot”形式的Character map进行分类,即没有使用RNN直接强行分类。如果用Mask TextSpotter识别汉字,则需要设计4000+ Character map,这显然是不科学的。另外该方法在识别过程中也没有用到文字的序列信息(总体来说该方法与之前的Scene Text Recognition from Two-Dimensional Perspective思路类似)。

  • Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline. ECCV2018.
Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baselineopenaccess.thecvf.com

在该文章中提出一个包含250k图的中国车牌数据集CCPD,每个标注包含1个box+4个定位点+识别文字GT:

图3.10 车牌数据集CCPD

在网络方面该文章提出一种PRNet:

  1. 利用Box Regression layer层预测车牌位置 [cx,cy,w,h]
  2. 检测出来[cx,cy,w,h]确定位置后,采集对应不同尺度的特征图进行ROI Pooling;
  3. 把不同尺度特征拼接在一起,进行识别。
图3.11 PRNet

该文章核心内容就是推出了一个车牌OCR数据集CCPD,并在这个数据集上提出一种BaseLine方法。该方向研究人员可以尝试使用该数据集。

在这里特别感谢一下所有开放数据集的研究人员!数据才是cv第一生产力!
  • An end-to-end TextSpotter with Explicit Alignment and Attention. CVPR2018.
An end-to-end TextSpotter with Explicit Alignment and Attentionopenaccess.thecvf.com
图3.12

改文章与Deep TextSpotter比较类似,首先生成带有角度 \theta 的倾斜Text Proposal,然后通过类似于RoI Pooling的Text-alignment提取固定长度的feature sequence,再送入RNN+Seq2Seq+Attention结构进行识别。

图3.13

与Deep TextSpotter不同的是,Text-alignment在通过双线性插值提取到整个Proposal特征后,再通过一组Inception卷积获取feature sequence送入RNN,而不是直接把双线性插值结果送入RNN。

图3.15
  • FOTS: Fast Oriented Text Spotting with a Unified Network. CVPR2018.
FOTS: Fast Oriented Text Spotting with a Unified Networkarxiv.org

FOTS采用Single-Shot结构结合Feature Pyramid Network直接检测文字区域,输出带角度 \theta 的Bounding Box;之后利用双线性插值RoIRotate获取固定大小的特征,送入双向LSTM进行识别。

图3.16 FOTS Architecture
图3.17 FPN
图3.18 RoIRotate

由于使用Single-Shot结构,所以应该是相对“Fast”一点。。。

  • SEE: Towards Semi-Supervised End-to-End Scene Text Recognition. AAAI2018.
SEE: Towards Semi-Supervised End-to-End Scene Text Recognitionarxiv.org


图3.19
图3.20

另外SEE作者2017年在arXiv上放出STN-OCR的论文,应该是没有中任何会议。考虑到完整性也挂在这里。

STN-OCR: A single Neural Network for Text Detection and Text Recognitionarxiv.org


只整理了CVPR/ICCV/ECCV/ICDAR/AAAI等顶会相关算法,后续有相关paper随时更新。

编辑于 2019-08-22

文章被以下专栏收录