线上 网站建设 商务信息,深圳最新政策消息,网站建设知识及维护技巧,成都网站建设方案服务文章目录1 概述2 模型介绍2.1 输入2.2 Feature extraction2.3 Sequence modeling2.4 Transcription2.4.1 训练部分2.4.2 预测部分3 模型效果参考资料1 概述
CRNN(Convolutional Recurrent Neural Network)是2015年华科的白翔老师团队提出的#xff0c;直至今日#xff0c;仍…
文章目录1 概述2 模型介绍2.1 输入2.2 Feature extraction2.3 Sequence modeling2.4 Transcription2.4.1 训练部分2.4.2 预测部分3 模型效果参考资料1 概述
CRNN(Convolutional Recurrent Neural Network)是2015年华科的白翔老师团队提出的直至今日仍旧是文本识别领域最常用也最好用的方法。CRNN主要由三部分组成分别是feature extractionsequence modeling和transcription如下图1-1所示。
图1-1 CRNN总体结构图feature extraction用于按宽度抽取图像特征sequence modeling用于融合这些特征并输出label的预测分布transcription用于将这个特征序列转化为文本。
CRNN强大的地方就是它只是一个框架其中的feature extraction和sequence modeling部分都是可以替换成不同的模型的比如feature extraction部分可以换成任意的抽取图像特征的模型想要追求性能就换成小模型想要追求效果就换成大模型非常灵活。
2 模型介绍
2.1 输入
输入是一般是文本检测的输出一个长条形的图片是横向长条的因为我们的文字都是横着写的。而且这一长条里只能有一行文字不能多行。多行就得要切成多个单行的长条分别输入。
文本有一些倾斜问题不大但最好是在文本检测部分调整即在文本检测部分检测多边形再仿射变换成长条形使得文本部分不倾斜。也有论文提出在CRNN的前面前置一个STN。STN要真的有效需要有好的训练数据。就算有好的数据也降低了模型的总体性能增大了模型的训练难度。STN可以看成一个极简版的物体检测模块。
输入的尺寸一般为h×w×c32×280×3h \times w \times c 32 \times 280 \times 3h×w×c32×280×3不是这个尺寸的就resize and pad成这个尺寸尽量不要只resize这会使得文字变形。输入尺寸www会根据需求做调整如果文本都是短文本则可以考虑w100w100w100。
2.2 Feature extraction
Feature extraction就是对32×280×332 \times 280 \times 332×280×3的输入进行特征抽取的一个deep convolutional neural networks输出1×w/4×d1×70×5121 \times w/4 \times d1 \times 70 \times 5121×w/4×d1×70×512的向量。w/4w/4w/4表示对32×432 \times 432×4的一小块图片区域抽取一个512维的特征。这一小块区域被称为receptive field感受野或是帧。
图2-1 特征抽取示意图帧的尺寸是可以变的输出的特征维度也是可以变的这些都是超参数。也正是因为CRNN这种抽取特征的方式使得它没法办法处理竖向的文本所有高度上的像素都被压到一个特征里了分不开了。帧的尺寸决定了模型的精度比如有两个文字完全都在同一帧内那模型就没法把这两个文字分开了识别就有问题了。
要处理竖向的文本需要训练一个识别文本方向的分类网络然后根据文本的方向对竖向的文本进行旋转或者切片拼接等不同的操作。目的就是变成CRNN可以处理的输入。
2.3 Sequence modeling
我们令feature extraction部分的输出为xx1,x2,...,xT\bold{x}x_1, x_2, ..., x_Txx1,x2,...,xTT70T70T70xtx_txt表示第ttt帧的特征为一个512维的向量。假设字典的长度为NNNSequence modeling就是一个双向的LSTM输出yy1,..,yT\bold{y} y_1, .., y_Tyy1,..,yTyty_tyt表示第iii帧为每个字典中字符的概率是一个N1N1N1维的向量。
Sequence modeling部分的总输出是一个T×(N1)T \times (N1)T×(N1)的概率图。
图2-2 序列模型使用双向LSTM的好处是 1文本是一个序列抽取特征的CNN模型只能看到附近几帧的图片特征而双向LSTM可以融合更远的特征使得模型看到完整的整个字 2LSTM可以和CNN使用Back-Propagation Through Time (BPTT)的方法拼接起来一起训练 3LSTM可以处理任意长度的输入。
2.4 Transcription
这部分是使用CTC来做的它在训练和预测时有着不同的处理方法。2.3中的y\bold{y}y之所以维度为N1N1N1就是因为CTC需要一个空白符ϕ\phiϕ。CTC的对齐基于两个规则
1先合并所有的重复字符 2再删除所有的空白符。
比如下面两个序列s\bold{s}s经过对齐之后都是Hello。
HϕeeeϕlllϕϕϕlllϕooHeeϕϕlllϕϕllllϕoooH \phi eee \phi lll \phi\phi\phi lll \phi oo \\ H ee \phi\phi lll \phi\phi llll \phi ooo HϕeeeϕlllϕϕϕlllϕooHeeϕϕlllϕϕllllϕooo
2.4.1 训练部分
训练时我们是知道文本标签的。
假设我们的训练数据为{Ii,li}\{\bold{I}_i, \bold{l}_i\}{Ii,li}Ii\bold{I}_iIi为第iii张训练图片li\bold{l}_ili为第iii张图片的文本标签yi\bold{y}_iyi为第iii张图片的预测概率图序列都用粗体进行了表示。我们的目标就是
argmin−∑ilogp(li∣yi)(2-1)arg\min -\sum_{i} log p(\bold{l}_i|\bold{y}_i) \tag{2-1} argmin−i∑logp(li∣yi)(2-1)
其中p(li∣yi)p(\bold{l}_i|\bold{y}_i)p(li∣yi)表示用概率图yi\bold{y}_iyi得到文本序列li\bold{l}_ili的概率。
p(li∣yi)∑s:B(s)lip(s∣yi)(2-2)p(\bold{l}_i|\bold{y}_i) \sum_{\bold{s} : \Beta(\bold{s})\bold{l}_i} p(\bold{s}|\bold{y}_i) \tag{2-2} p(li∣yi)s:B(s)li∑p(s∣yi)(2-2)
s\bold{s}s表示可以变成文本l\bold{l}l的一条路径B(s)\Beta(\bold{s})B(s)表示对s\bold{s}s进行CTC对齐操作。p(li∣yi)p(\bold{l}_i|\bold{y}_i)p(li∣yi)也就是所有可以从s\bold{s}s变为li\bold{l}_ili的路径概率和。
p(s∣yi)∏t1Tystt(2-3)p(\bold{s}|\bold{y}_i) \prod_{t1}^T y_{s_t}^t \tag{2-3} p(s∣yi)t1∏Tystt(2-3)
要找到所有可以从s\bold{s}s变为li\bold{l}_ili的路径用枚举法是不行的这里一般会用HMM中的前向后向算法也就是动态规划。
2.4.2 预测部分
预测时我们是不知道文本标签的。
这个时候要去计算所有可能的文本序列的概率再找到最大的简直无法想象。所以预测时我们只能寄希望于模型训练的足够好每一帧都预测得很准。然后用greedy search或者beam search的方法来找到最有路径。
greedy search是实际最常用的方法就是取每帧概率最大的标签。
beam search是在每帧去概率最大的前n条路径一直保留n条概率最大的路径直到最后一帧当n取1时beam search就退化为greedy search。
以上说的都是只有字典的情况当我们有词表lexicon时我们可以根据结果取编辑距离小于δ\deltaδ的所有词然后再看取这些词时概率最大的是哪个词以此确定最终的输出。
3 模型效果
作者还对比了不同数据集下CRNN对比其他模型的效果不过这都是2015年的时候的了看看即可。 不如看下百度开源的paddle-ocr里的对比结果。CRNN虽然不是准确率最高的但是是paddle-ocr最推荐的算法。它的效果和性能的综合优势是最高的。
参考资料
[1] An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition [2] 一文读懂CRNNCTC文字识别 [3] PaddleOCR