Table of Contents
1 OCR的应用场景............................................................................... 4
2 OCR的技术路线............................................................................... 5
3 DB论文笔记:................................................................................. 6
3.1 论文主要创新点:.......................................................................... 6
3.2 论文内容:.................................................................................... 6
3.3 DB算法网络架构:....................................................................... 7
3.4 可微二值化.................................................................................... 7
3.5 膨胀卷积....................................................................................... 9
3.6 标签生成....................................................................................... 9
3.6.1 训练参数设置:......................................................................................... 11
4 CRNN论文笔记.............................................................................. 12
4.1 论文主要创新点:........................................................................ 12
4.2 论文内容:.................................................................................. 12
4.2.1 整体网络架构............................................................................................. 13
4.2.2 CNN提取序列特征.................................................................................... 13
4.2.3 双向LSTM预测序列特征.......................................................................... 15
4.2.4 CTC转译序列特征到标签.......................................................................... 15
4.2.5 无词典转译:............................................................................................. 16
4.2.6 基于词典转译:......................................................................................... 16
4.2.7 Loss设计:............................................................................................... 16
4.2.8 训练参数设置:......................................................................................... 17
5 OCR身份证识别结果:................................................................... 18
OCR模型项目地址:GitHub - PaddlePaddle/PaddleOCR
- OCR的应用场景
根据OCR的应用场景而言,可以大致分成识别特定场景下的专用OCR以及识别多种场景下的通用OCR。就前者而言,证件识别以及车牌识别就是专用OCR的典型案例。针对特定场景进行设计、优化以达到最好的特定场景下的效果展示。那通用的OCR就是使用在更多、更复杂的场景下,拥有比较好的泛性。在这个过程中由于场景的不确定性,比如:图片背景极其丰富、亮度不均衡、光照不均衡、残缺遮挡、文字扭曲、字体多样等等问题,会带来极大的挑战。
- OCR的技术路线
典型的OCR技术路线如下图所示:
其中OCR识别的关键路径在于文字检测和文本识别部分,这也是深度学习技术可以充分发挥功效的地方。PaddleHub开源的预训练模型的网络结构是Differentiable Binarization+ CRNN,基于icdar2015数据集下进行的训练。
DB模型参考论文:Real-time Scene Text Detection with Differentiable Binarization
CRNN(Convolutional Recurrent Neural Network)即卷积递归神经网络,是CNN和RNN的组合,专门用于识别图像中的序列式对象。与CTC loss配合使用。参考论文:An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition
-
DB论文笔记:
- 论文主要创新点:
- 提出可微的二值化模块,将阈值映射加入到训练阶段,形成自适应的阈值映射,在推理阶段删去阈值映射,这种情况下不会增加推理时间
- 2. 我们的方法执行速度比以前的领先方法快得多,因为DB可以提供一个高度鲁棒的二值化映射,大大简化了后处理。
3.DB在使用轻量级骨干时工作得非常好,它显著地增强了ResNet-18骨干的检测性能。
4. 由于可以在推断阶段删除DB,而不牺牲性能,因此测试不需要额外的内存/时间成本。
-
- 论文内容:
情景文本检测分为回归方法的检测和给予分割方法的检测,然而回归方法通常采用的后处理(如NMS)对于不规则形状的文本效果很差(弯曲,多角度)。基于分割的方法通常结合像素级预测和后处理算法来得到bbox。分割算法存在的不足则是训练阶段只训练了segmentation map,大部分文章都是对后处理进行优化提升性能,后处理流程见Fig.2。如近期发表的PSENet (Wang et al. 2019a)提出了递进尺度扩展的后处理,以提高检测精度; (Tian et al. 2019) 中的像素嵌入根据分割结果对像素进行聚类,需要计算像素之间的特征距离。然而复杂的后处理算法会导致推断速度较低。
作者在此提出了DB算法模型,DB算法则是针对分割结果进行了优化。之前的算法只对分割映射进行二值化推理的主要原因是二值化映射是不可微的, 故只能将二值化映射作为固定值放在推理阶段进行。DB算法则提出了类标准二值化映射的算法,使得二值化映射可微,可微后的阈值映射就可以引入训练阶段,与概率映射进行联合训练。如Fig.2红色箭头所示。推理阶段删去阈值映射,从而不损失推理速度。
-
- DB算法网络架构:
DB模型整体网络结构如图。基础网络采用金字塔骨架,下采样的后几层采用膨胀卷积提升弯曲标签的提取效果,上采样通过反卷积进行操作,通过下采样遇上采样元素相加融合特征信息,产生的特征图进行通道拼接进行预测,此时特征图大小为原图的1/4,后续网络预测文本特征的概率图P和阈值图T,然后用P和F计算近似二值映射(ˆB)生成最终的approximate binary map。在训练期间,对概率图、阈值图和近似二值图进行监督,其中概率图和近似二值图共享同一监督。在推理过程中,利用框公式模块可以从近似的二值映射或概率映射中轻松地得到边界框。
-
- 可微二值化
式中ˆB为近似二进制映射;T为从网络学习到的自适应阈值图;P为预测概率图;K为放大系数。根据经验,K设为50。近似二值化函数与标准二值化函数如图4a,近似二值化函数与标准二值化类似,但具有可微性,因此可以在训练期间随分割网络进行优化。具有自适应阈值的可微分二值化方法不仅可以将文本区域从背景中区分出来,而且可以分离出紧密连接的文本实例。表1展示了DConv和DB分别在ResNet18和ResNet50上的消融实验。
DB提高性能的原因可以用梯度的反向传播来解释。令x = Pi,j−Ti,j,通过T对前景和背景之间P的梯度进行影响和缩放。DB可表示为f(x)= 1 /1+e^−kx。则正面标签的损失l+和负面标签的损失l -为:
因此,我们在阈值图上采用类似边界的监督,以便更好地指导。然而,阈值图的动机和用法不同于文本边界图,the text border map文本边界图(Xue, Lu, and Zhan 2018)用于分割文本实例,而阈值地图作为二值化的阈值。
-
- 膨胀卷积
Deformable convolution(Dai et al. 2017;Zhu et al. 2019)可以为模型提供一个灵活的接受域,这对极端高宽比的文本实例尤其有益。随后(Zhu et al. 2019),modulated deformable convolutions被应用于ResNet-18或ResNet-50骨干中的阶段conv3、conv4和conv5的所有3 × 3卷积层(He et al. 2016a)。
-
- 标签生成
G表示标签顶点的集合,n为顶点数。然后利用Vatti裁剪算法(Vati 1992),将多边形G缩小为Gs(图5蓝框),得到正面积。收缩的偏移量D由原始多边形的周长L和面积A计算:
其中r为收缩比,经验值设为0.4。G以偏移量D到Gs收缩D偏移量产生文本框标签,G以偏移量D到Gd展开为阈值映射生成标签。G和Gd之间的差距作为文本区域的边界,其中阈值映射的标签可以通过计算到G中最近的线段的距离来产生。
损失函数L可以表示为概率映射Ls的损失、二进制映射Lb的损失和阈值映射Lt的损失的加权和,α和β分别设为1.0和10。Ls和Lb都应用了二元交叉熵(BCE)损失。为了克服正负数的不平衡,通过对硬负数采样,在BCE损失中使用了硬负挖掘。Sl是正负比为1:3的采样集。Lt为展开文本多边形Gd内部预测与标签之间L1距离之和,Rd为膨胀多边形Gd内部像素的索引集;∗是阈值映射的标签。
在推断阶段,我们可以使用概率映射或近似二进制映射来生成文本边界框,它们产生的结果几乎相同。为了提高效率,我们使用了概率图,从而可以消除阈值分支。方框形成过程包括三个步骤:(1)首先将概率图/近似二值图以恒定阈值(0.2)进行二值化处理,得到二值图;(2)由二值映射得到连通区域(收缩文本区域);(3) Vatti裁剪算法(Vati 1992)利用偏移量D'对收缩区域进行扩张。式中A'为收缩后多边形面积;L'是收缩后多边形的周长;根据经验将r'设置为1.5。
DB算法在横向、多方向和曲面文本五种基准数据集上都取得了较好的性能。表6展示了MSRA-TD500多语言数据集的结果比较。
多边形偏移量D生成源码实现和threshold map生成源码实现DB:Real-time Scene Text Detection with Differentiable Binarization - 简书 (jianshu.com)
因此最后得到的标签
蓝线以内区域 |
绿线和蓝线中间的区域 |
其他区域 |
|
threshold map |
0.3 |
越靠近红线越接近0.7,越远离红线越接近0.3 |
0.3 |
probability map |
1 |
0 |
0 |
binary map |
1 |
0 |
0 |
DB算法讲解:文字检测(三)Differentiable Binarization论文阅读 - 知乎 (zhihu.com)
-
-
- 训练参数设置:
-
在SynthText dataset(Gupta, V edaldi, and Zisserman 2016) 800k合成文本数据集上进行100k iterations预训练,之后在相应的真实世界文本数据集上进行了1200 epochs的微调,训练的batch size设置为16,采用poly学习率,初始学习率设置为0.007,power为0.9,权重衰减0.0001,动量0.9;数据增强采用随机旋转(-10,10)一个角度,随机裁剪,以及随机翻转,数据的最终图像大小设置为640*640。测试时后处理大概占了推理时间的30%。
-
CRNN论文笔记
- 论文主要创新点:
- 将特征提取(卷积神经网络完成),序列建模(循环神经网络完成)和标签转译组合成一个端到端可训练的网络框架
- 它是端到端可训练的,而现有的大多数算法都是单独训练和调优的。
- 它自然地处理任意长度的序列,不涉及字符分割或水平尺度归一化。
- 它不局限于任何预定义的词汇,在无词汇和基于词汇的场景文本识别任务中都取得了显著的性能。
- 它生成了一个有效但更小的模型,更适合实际应用场景。
- 作者借鉴了语音序列处理的时序思路,结合了CNN提取序列特征+双向LSTM预测序列特征+转译序列标签组合了一个端到端可训练网络。
参考链接:06. OCR学习路径之CRNN文本识别 - 腾讯云开发者社区-腾讯云 (tencent.com)
-
- 论文内容:
OCR光学字符识别在检测到文本之后还需要识别出文本内的文字信息,检测出的文本片段一般是一行文字,具有sequence-like属性,因此此类文本识别归属为image-based sequence recognition的问题。这就与常规的物体识别不同,它有一系列的标签,识别出的结果是序列化的字符,而不是单个标签,类序列对象的另一个特点是其长度不统一,标签也是长度变化的。因此,解决此类问题,就不能采用固定输入和输出的传统CNN模型了。作者提出了CRNN模型框架结合CTC方式进行文本检测,
优点:因为CRNN不受序列长度的约束,所以不需要预处理(二值化、切割等)、可以直接从sequence的target上学习。
-
-
- 整体网络架构
-
上图为CRNN模型整体架构,主要包括三个部分:
1) 卷积层,从输入图像中提取特征序列;
2) LSTM层,预测每一帧的标签分布,从卷积层获取的特征序列的标签(真实值)分布
3) 转译层,将每一帧的预测变为最终的标签序列。
-
-
- CNN提取序列特征
-
CNN基于VGG-VeryDeep架构,去除了其中的全连接层,采用其中的卷积层和最大池化层来构造整体卷积提取架构,其中为了让卷积适用于长度不定的文本框检测,以传输序列特征给到后续的RNN模型中,在第3,4层的最大池化层采用1*2的矩形池化窗口代替了传统方形窗口。在进入网络之前,所有的图像需要缩放到相同的高度。然后从卷积层组件产生的特征图中提取特征向量序列,这些特征向量序列作为循环层的输入。
由于卷积层,最大池化层和元素激活函数在局部区域上执行,因此它们是平移不变的。因此,特征图的每列对应于原始图像的一个矩形区域(称为感受野),并且这些矩形区域与特征图上从左到右的相应列具有相同的顺序。如图2所示,特征序列中的每个向量关联一个感受野,并且可以被认为是该区域的图像描述符。
网络配置图和细节操作如下:
l 首先会将图像缩放到 32×W×1 大小
l 然后经过CNN后变为 1×(W/4)× 512
l 接着针对LSTM,设置 T=(W/4) , D=512 ,即可将特征输入LSTM。
l LSTM有256个隐藏节点,经过LSTM后变为长度为T × nclass的向量,再经过softmax处理,列向量每个元素代表对应的字符预测概率,最后再将这个T的预测结果去冗余合并成一个完整识别结果即可。
其中,‘k’, ‘s’ 和‘p’ 代表 kernel size, stride 和padding size
以上都比较好理解,但是最后一步,经过LSTM后变为长度为T × nclass的向量,再经过softmax处理,列向量每个元素代表对应的字符预测概率,最后再将这个T的预测结果去冗余合并成一个完整识别结果即可。
-
-
- 双向LSTM预测序列特征
-
传统的循环序列网络有梯度消失的问题存在,LSTM的提出解决了被限制的存储上下文范围的界限,但LSTM是定向的,他只是用过去的上下文信息。然而,在基于图像的文本序列中,两个方向的上下文是相互有用且互补的。因此作者遵循[17]将两个LSTM进行了向前向后的双向组合,并将双向LSTM进行了堆叠,得到如图3b的深双向LSTM,深层结构允许比浅层抽象更高层次的抽象,并且在语音识别任务中取得了显著的性能改进[17]。
- 基本的LSTM单元的结构。LSTM包括单元模块和三个门,即输入门,输出门和遗忘门。
- 我们论文中使用的深度双向LSTM结构。结合前向(从左到右)和后向(从右到左)LSTMchans双向LSTM。堆叠多个双向LSTM产生在深度双向LSTM中。
在循环层中,误差在图3.b所示箭头的相反方向传播,即反向传播时间(BPTT)。在循环层的底部,传播差异的序列被连接成映射,将特征映射转换为特征序列的操作进行反转并反馈到卷积层。实际上,我们创建一个称为“Map-to-Sequence”的自定义网络层,作为卷积层和循环层之间的桥梁。
-
-
- CTC转译序列特征到标签
-
详细的CTC推导过程网上已经有很多,说一下我的理解就是。由于输出的T=W/4是一个不定长的结果,而我们需要做的就是将该序列结果翻译成最终的识别结果。但是LSTM进行时序分类时的输出有一个特点,就是同一个字符被连续识别两次,因此需要一个去冗余机制。CTC提出了插入blank机制,比如下图的以符号“-”代表blank。若标签为“aaa-aaaabb”则将被映射为“aab”,而“aaaaaaabb”将被映射为“ab”。引入blank机制,就可以很好地处理了重复字符的问题了。
但是通常一个正确的输出序列可以有多条路径达成,比如直接贴一张其他博主的图吧,下面酱紫的:
可以看出,这4条路线都能达到正确的结果输出,那么如何找出最优的路径呢?就引出下一个公式,
Β 的作用就是maps π onto l by firstly removing the repeated labels。
ytπt是时刻t在能输出正确值πt的情况下,所输出某一个字符的概率。
每一个字符的输出都对应着一个softmax计算出的概率ytπt ,再把每一个字符输出对应的概率相乘,得出这条路径的概率为p(π|y),那所有路径的概率总和就是p(l|y),也就是以上公式想表达的意思了。
-
-
- 无词典转译:
-
在这种模式下,以公式1中定义的概率最大的* l作为预测。由于不存在可跟踪的算法来精确求解,我们使用[15]中采用的策略。l∗≈B(arg maxπ p(π|y))可以近似地找到l∗序列,即
在每个时间戳t取最可能的标签πt,并将结果序列映射到* l上。
-
-
- 基于词典转译:
-
在基于词库的模式下,每个测试样本都与一个词库D相关联。基本上,标签序列是通过在公式1中定义的条件概率最高的词库中选择序列来识别的,即* * * = arg maxl∈D p(l|y)。然而,对于大的字典,例如50k个单词的Hunspell拼写检查字典[1],在字典上执行穷举搜索将是非常耗时的,即对字典中的所有序列计算等式1,并选择概率最高的一个。为了解决这个问题,我们观察到,在编辑距离度量下,通过无字典转录(如2.3.2所述)预测的标签序列往往接近于真实值。这表明我们可以将搜索限制到最近的候选Nδ(l0),其中δ是最大的编辑距离,而l0是在无字典模式下从y转录的序列:
-
-
- Loss设计:
-
由以上分析,知道了最佳路径的概率值,那么现在就可以设计一个训练的Loss函数来寻找一个最大概率的输出序列,
Ii是训练图片,I_i是真实标签。
通过对概率的计算,就可以对之前的神经网络进行反向传播更新。类似普通的分类,CTC的损失函数O定义为负的最大似然,为了计算方便,对似然取对数。我们的训练目标就是使得损失函数O优化得最小即可。
-
-
- 训练参数设置:
-
SGD优化器,在转录层,误差微分通过正向向后算法反向传播,如[15]所述。在循环层中,采用时间反向传播法(BPTT)计算误差微分。转录层(在c++中)和BK-tree数据结构(在c++中)的实现。实验在2.50 GHz Intel(R) Xeon(R) E52609 CPU, 64GB RAM和NVIDIA(R) Tesla(TM) K40 GPU的工作站上进行。网络使用ADADELTA计算每个维度的学习率,设置参数ρ为0.9。在训练过程中,为了加速训练过程,所有的图像都被缩放到100 × 32。训练过程大约需要50个小时才能达到收敛。测试图像被缩放为高度为32。宽度与高度成比例缩放,但至少100像素。平均测试时间是0.16秒/样本,在没有字典的IC03上测量。对IC03的50k字典进行近似字典搜索,参数δ设为3。测试每个样本平均需要0.53秒。
- OCR身份证识别结果:
文章来源:https://www.toymoban.com/news/detail-766902.html
文章来源地址https://www.toymoban.com/news/detail-766902.html
到了这里,关于OCR文本检测论文阅读笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!