👨💻作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享,公众号:GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复“加群”或➡️点击链接。
🎉专栏推荐:
➡️点击访问《计算机视觉》:长期更新不限于深度学习、OCR、目标检测、图像分类、分割等方向总结资料。
➡️点击访问《深入浅出OCR》: 对标全网最全OCR教程。以上目前活动仅29.9,感兴趣小伙伴可关注下。
OCR专栏:➡️点击访问 深入浅出OCR
🍀导读:恭喜你发现宝藏!本专栏系列主要介绍计算机视觉OCR文字识别领域,每章将分别从OCR技术发展、方向、概念、算法、论文、数据集、对现有平台及未来发展方向等各种角度展开详细介绍,综合基础与实战知识。以下是本系列目录,分为前置篇、基础篇与进阶篇,进阶篇在基础篇基础上进行全面总结,会针对最经典论文及最新算法展开讲解,内容目前包括不限于文字检测、识别、表格分析等方向。 </font>未来看情况更新NLP方向知识,本专栏目前主要面向深度学习及CV的同学学习,希望大家能够多多交流,欢迎订阅本专栏,如有错误请大家在评论区指正,如有侵权联系删除。
📝OCR文字识别技术合集:
1️⃣OCR系列第一章:OCR文字识别技术总结(一)
2️⃣OCR系列第二章:OCR文字识别技术总结(二)
3️⃣OCR系列第三章:OCR文字识别技术总结(三)
4️⃣OCR系列第四章:OCR文字识别技术总结(四)
5️⃣OCR系列第五章:OCR文字识别技术总结(五)
📝OCR文字识别领域经典论文汇总:
📝OCR文字识别领域论文详解系列:
1️⃣CRNN:CRNN文字识别
2️⃣ASTER:ASTER文本识别详解
近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,
二、CRNN网络结构:
1.CRNN完整网络结构图:
从整个网络中可以看出,卷积层是由一系列的卷积、最大池化、批量归一化等操作组成,由标准的CNN模型中的卷积层和最大池化层组成,结构类似于VGG网络。maps为卷积核个数,k为卷积核大小,s为步长,pw为填充,这里要注意后两层最大池化改成2×1,保证高度缩小一半,而宽度+1。
2.CRNN模型计算公式:
3.CRNN模型计算详细流程:
注意前几层卷积核使用3×3,且padding为1,步长为1,比如输入32,则根据计算公式 (32-3+2×1)/1+1=32,尺寸不变!注意Pooling层计算: 以pool3层为例,如右图, 高H为4,经过k=2,s=2,p=0 带入公式 (4+2×0-2 )/2 +1=2 ,高减少一半 ,而宽为26 ,k=2,s=1,p=1 带入公式( 26+2×1-2 )/1 +1=27, 宽度+1变为27,卷积层计算:以最后一层[H,W]为例,卷积层大小使用2×2,且高的padding为0,步长为2 ,根据上图输入尺寸为2,带入公式:(2-2+2×0 )/1 +1 =1,则最终输出高度为1。 宽度计算同上,宽27 ,padding为0 ,步长为1,带入公式:(27-2+2×0)/1+1=26
三、CRNN网络层介绍
1.卷积层
CRNN卷积层由标准的CNN模型中的卷积层和最大池化层组成,自动提取出输入图像的特征序列。与普通CNN网络不同的是,CRNN在训练之前,先把输入图像缩放到相同高度(图像宽度维持原样),论文中使用的高度值是32。
提取的特征序列中的向量是从特征图上从左到右按照顺序生成的,每个特征向量表示了图像上一定宽度上的特征,论文中使用的这 个宽度是1,就是单个像素。
2.循环层
转录就是 RNN 对每个像素的预测转换为标签序列的过程。
CRNN的循环层由一个双向LSTM循环神经网络构成,预测特征序列中的每一个特征向量的标签分布(真实结果的概率列表),循环层的误差被反向传播,最后会转换成特征序列,再把特征序列反馈到卷积层,这个转换操作由论文中定义的“Map-to-Sequence”自定义网络层完成,作为卷积层和循环层之间连接的桥梁。
LSTM(长短期记忆网络)则是一种特殊结构的RNN,用于解决RNN的长期依赖问题,普通RNN会出现“梯度消失”或“梯度爆炸”的问题,不能获取更多上下文信息,所以 CRNN 中使用的是 LSTM,允许捕获长距离依赖。LSTM单元由输入门、遗忘门和输出门组成。
RNN原理参考:水很深的深度学习-Task05循环神经网络RNN_GoAl的博客-CSDN博客
LSTM原理参考:LSTM原理介绍_GoAl的博客-CSDN博客
3.转录层
CTC一般连接在RNN网络的最后一层用于序列学习和训练。对于一段长度为T的序列来说,每个样本点t(t远大于T)在RNN网络的最后一层都会输出一个softmax向量,表示该样本点的预测概率,所有样本点的这些概率传输给CTC模型后,输出最可能的标签,再经过去除空格(blank)和去重操作,就可以得到最终的序列标签。
四、CTC原理介绍
CTC是一种Loss计算方法,用CTC代替Softmax Loss,训练样本无需对齐。引入blank字符,解决有些位置没有字符的问题,通过递推,快速计算梯度。
以下以apple单词为例,引入“-”符号,解释CTC网络是如何展开路径进行计算的。
路径展开原则:(如图中5点)
CTC训练流程和传统的神经网络类似,构建损失函数,然后根据BP算法进行训练,不同之处在于传统的神经网络的训练准则是针对每帧数据,即每帧数据的训练误差最小,而CTC的训练准则是基于序列的,比如最大化 p(l|x) ,序列化的概率求解比较复杂,因为一个输出序列可以对应很多的路径,所有引入前后向算法来简化计算。
前向概率:
后向概率:
计算CTC Loss:
CTC原理参考:
【Learning Notes】CTC 原理及实现_丁丁的博客-CSDN博客_ctc实现
CTC(Connectionist Temporal Classification)介绍 - PilgrimHui - 博客园
五、CRNN模型训练:
在模型训练过程中,首先使用标准的CNN网络提取文本图像的特征,再利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,然后得到每列特征的概率分布,最后通过转录层(CTC)进行预测得到文本序列。其具体模型训练流程为:
1.将输入图像统一缩放至32*W*3。
2.利用CNN提取后图像卷积特征,得到的大小为:1*W/4*512。
3.通过上述输入到LSTM提取序列特征,得到W/4*n后验概率矩阵。
4.利用CTC损失,实现标签和输出一一对应,进行训练。
六、CRNN+CTC总结
CRNN将CNN/LSTM/CTC三种方法结合:提供了一种end2end文本行图片算算法。
(1)CNN提取图像卷积特征
(2)LSTM进一步提取图像卷积特征中的序列特征
(3)引入CTC解决训练时字符无法对齐的问题
优点:
- 可以直接从序列标签学习,不需要详细的标注
- 具有直接从图像数据学习信息表现的DCNN的相同性质,既不需要手工特征也不需要预处理步骤,包括实体化/分割,组件定位等;
- 具有 RNN 相同的性质,能够产生一系列标签
- 对类序列对象的长度无约束,只需要在训练阶段和测试阶段对高度进行归一化
- 比标准 DCNN 模型包含的参数要少的多,占用更少的存储空间