CRNN文字识别

简介: 近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,

一、CRNN介绍:


近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,


二、CRNN网络结构:


image.png

网络结构包含三部分,从下到上依次为:

(1)卷积层。作用是从输入图像中提取特征序列。

(2)循环层。作用是预测从卷积层获取的特征序列的标签(真实值)分布。

(3)转录层。作用是把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果。

1.CRNN完整网络结构图:

image.png

从整个网络中可以看出,卷积层是由一系列的卷积、最大池化、批量归一化等操作组成,由标准的CNN模型中的卷积层和最大池化层组成,结构类似于VGG网络。maps为卷积核个数,k为卷积核大小,s为步长,pw为填充,这里要注意后两层最大池化改成2×1,保证高度缩小一半,而宽度+1。


2.CRNN模型计算公式:

image.png

3.CRNN模型计算详细流程:

image.png

image.png


注意前几层卷积核使用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.卷积层

卷积:提取图像特征 池化:为了降维减少计算量。

image.png

CRNN卷积层由标准的CNN模型中的卷积层和最大池化层组成,自动提取出输入图像的特征序列。与普通CNN网络不同的是,CRNN在训练之前,先把输入图像缩放到相同高度(图像宽度维持原样),论文中使用的高度值是32。


论文中该CNN结构输出的特征图大小为   ,若输入图片高度为32,宽度为100,则特征图的大小为(1, 24, 512)。这个结果可以认为图片从左到右被分割成了24块,每块大小的 特征维度 为512。

提取的特征序列中的向量是从特征图上从左到右按照顺序生成的,每个特征向量表示了图像上一定宽度上的特征,论文中使用的这 个宽度是1,就是单个像素。

特别强调序列的顺序是因为在之后的循环层中,先后顺序是LSTM训练中的一个重要参考量。

2.循环层

转录就是 RNN 对每个像素的预测转换为标签序列的过程。

image.png

CRNN的循环层由一个双向LSTM循环神经网络构成,预测特征序列中的每一个特征向量的标签分布(真实结果的概率列表),循环层的误差被反向传播,最后会转换成特征序列,再把特征序列反馈到卷积层,这个转换操作由论文中定义的“Map-to-Sequence”自定义网络层完成,作为卷积层和循环层之间连接的桥梁。


LSTM(长短期记忆网络)则是一种特殊结构的RNN,用于解决RNN的长期依赖问题,普通RNN会出现“梯度消失”或“梯度爆炸”的问题,不能获取更多上下文信息,所以 CRNN 中使用的是 LSTM,允许捕获长距离依赖。LSTM单元由输入门、遗忘门和输出门组成。

image.png

RNN原理参考:水很深的深度学习-Task05循环神经网络RNN_GoAl的博客-CSDN博客


LSTM原理参考:LSTM原理介绍_GoAl的博客-CSDN博客


3.转录层

转录是将LSTM网络预测的特征序列的所有可能的结果进行整合,转换为最终结果的过程。论文中在双向LSTM网络的最后连接上一个CTC模型,做 到端对端的识别。

CTC模型(Connectionist temporal classification)联接时间分类,CTC可以执行端到端的训练,不要求训练数据对齐和一一标注,直接输出不定长的序列结果。

CTC一般连接在RNN网络的最后一层用于序列学习和训练。对于一段长度为T的序列来说,每个样本点t(t远大于T)在RNN网络的最后一层都会输出一个softmax向量,表示该样本点的预测概率,所有样本点的这些概率传输给CTC模型后,输出最可能的标签,再经过去除空格(blank)和去重操作,就可以得到最终的序列标签。


四、CTC原理介绍


CTC是一种Loss计算方法,用CTC代替Softmax Loss,训练样本无需对齐。引入blank字符,解决有些位置没有字符的问题,通过递推,快速计算梯度。

image.png

image.png

以下以apple单词为例,引入“-”符号,解释CTC网络是如何展开路径进行计算的。

9deaf6842206bc6938a5bd9a7c823365_a87ef95e8e2047d89c38ec71984045a3.png

路径展开原则:(如图中5点)

0608220151faf18e5c7c8159e2d141e3_482941d361a842048b63e7ca38534d4c.png

CTC训练流程和传统的神经网络类似,构建损失函数,然后根据BP算法进行训练,不同之处在于传统的神经网络的训练准则是针对每帧数据,即每帧数据的训练误差最小,而CTC的训练准则是基于序列的,比如最大化 p(l|x) ,序列化的概率求解比较复杂,因为一个输出序列可以对应很多的路径,所有引入前后向算法来简化计算。


前向概率:

image.png

后向概率:

image.png

计算CTC Loss:


image.png

image.png

image.png

CTC原理参考:

一文读懂CRNN+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 模型包含的参数要少的多,占用更少的存储空间


七.CRNN实战

【AI实战】手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法) - 雪饼的个人空间 - OSCHINA - 中文开源技术交流社区

文字识别是AI的一个重要应用场景,文字识别过程一般由图像输入、预处理、文本检测、文本识别、结果输出等环节组成。 其中,文本检测、文本识别是最核心的环节。文本检测方面,在前面的文章中已介绍过了多种基于深...

https://my.oschina.net/u/876354/blog/3070699


目录
相关文章
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
434 15
|
Linux Shell 开发工具
Cmder的安装和设置
Cmder的安装和设置
790 0
Cmder的安装和设置
|
7月前
|
缓存 AI芯片
飞桨x昇腾生态适配方案:02_常用环境变量
本节介绍训练前建议设置的常用环境变量,涵盖NPU私有格式、在线编译、性能优化参数(如`aclnn_scale`和`aclnn_split`)、算子黑名单配置、NPU卡号指定、Paddle内存分配策略及日志设置等内容。通过合理配置这些变量,可有效提升训练性能并解决潜在问题。例如,关闭`FLAGS_npu_storage_format`以禁用NPU私有格式,或调整`ASCEND_MAX_OP_CACHE_SIZE`优化Kernel缓存大小。同时,CANN和Paddle的日志环境变量也提供了调试支持。
282 0
|
存储 Ubuntu 机器人
机械臂手眼标定详解
这篇文章是关于机械臂手眼标定的详细教程,包括了使用ROS1 Noetic和Realsense D415相机在Ubuntu 20.04环境下进行标定的步骤和配置方法。
2067 0
机械臂手眼标定详解
|
机器学习/深度学习 存储 文字识别
OCR -- 文本识别 -- 实践篇
OCR -- 文本识别 -- 实践篇
745 1
|
机器学习/深度学习 编解码 文字识别
【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】
【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】
|
文字识别 算法 固态存储
OCR -- 文本检测
OCR -- 文本检测
339 0
|
数据采集 机器学习/深度学习 文字识别
OCR -- 文本检测 - 训练DB文字检测模型
OCR -- 文本检测 - 训练DB文字检测模型
467 0
|
监控 安全 物联网
物联网设备间通信协议选择的技术探讨
【7月更文挑战第31天】物联网设备间的通信协议选择是一个复杂而重要的决策过程。通过综合考虑应用场景、设备资源、网络环境、安全性、兼容性以及扩展性等多个因素,我们可以为物联网系统选择最合适的通信协议,从而构建出高效、可靠、安全的物联网生态系统。未来,随着物联网技术的进一步普及和深入应用,我们有理由相信,更多的创新通信协议将不断涌现,为物联网设备间的通信提供更加灵活、高效、安全的解决方案。同时,随着标准化进程的加速推进,不同协议之间的互操作性和兼容性也将得到进一步提升,为物联网系统的集成和扩展提供更加便捷的途径。
|
机器学习/深度学习 人工智能 文字识别
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

热门文章

最新文章