热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CRNN文字识别

OCR文字识别领域论文系列:1️⃣CRNN:CRNN文字识别2️⃣ASTER:ASTER文本识别详解CRNN论文下载:AnE

OCR文字识别领域论文系列:

1️⃣CRNN:CRNN文字识别

2️⃣ASTER:ASTER文本识别详解


CRNN论文下载: 
An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
CRNN论文翻译:

CRNN论文翻译——中英文对照


CRNN介绍:


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


CRNN网络结构:


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


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


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


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


1.卷积层




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

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



论文中该CNN结构输出的特征图大小为  ,若输入图片高度为32,宽度为100,则特征图的大小为(1, 24, 512)。这个结果可以认为图片从左到右被分割成了24块,每块大小的特征维度为512。
提取的特征序列中的向量是从特征图上从左到右按照顺序生成的,每个特征向量表示了图像上一定宽度上的特征,论文中使用的这个宽度是1,就是单个像素。



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


2.循环层

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

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



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




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)和去重操作,就可以得到最终的序列标签。


CRNN完整网络结构图:

从整个网络中可以看出,卷积层是由一系列的卷积、最大池化、批量归一化等操作组成,由标准的CNN模型中的卷积层和最大池化层组成,结构类似于VGG网络。


CRNN模型计算公式:


CRNN模型计算详细流程:


4.CTC原理介绍


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


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

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


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



前向概率:


 后向概率:


 计算CTC Loss:



CTC原理参考:

一文读懂CRNN+CTC文字识别 - 知乎

【Learning Notes】CTC 原理及实现_丁丁的博客-CSDN博客_ctc实现

CTC(Connectionist Temporal Classification)介绍 - PilgrimHui - 博客园


5.CRNN模型训练:

在模型训练过程中,首先使用标准的CNN网络提取文本图像的特征,再利用BLSTM将特征向量进行融合以提取字符序列的上下文特征,然后得到每列特征的概率分布,最后通过转录层(CTC)进行预测得到文本序列。其具体模型训练流程为:


1.将输入图像统一缩放至32*W*3。
2.利用CNN提取后图像卷积特征,得到的大小为:1*W/4*512。
3.通过上述输入到LSTM提取序列特征,得到W/4*n后验概率矩阵。
4.利用CTC损失,实现标签和输出一一对应,进行训练。



6.CRNN+CTC总结

CRNN将CNN/LSTM/CTC三种方法结合:提供了一种end2end文本行图片算算法。

(1)CNN提取图像卷积特征

(2)LSTM进一步提取图像卷积特征中的序列特征

(3)引入CTC解决训练时字符无法对齐的问题


优点:


  • 可以直接从序列标签学习,不需要详细的标注
  • 具有直接从图像数据学习信息表现的DCNN的相同性质,既不需要手工特征也不需要预处理步骤,包括实体化/分割,组件定位等;
  • 具有 RNN 相同的性质,能够产生一系列标签
  • 对类序列对象的长度无约束,只需要在训练阶段和测试阶段对高度进行归一化
  • 比标准 DCNN​ 模型包含的参数要少的多,占用更少的存储空间

7.CRNN实战:


【AI实战】手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法) - 雪饼的个人空间 - OSCHINA - 中文开源技术交流社区文字识别是AI的一个重要应用场景,文字识别过程一般由图像输入、预处理、文本检测、文本识别、结果输出等环节组成。 其中,文本检测、文本识别是最核心的环节。文本检测方面,在前面的文章中已介绍过了多种基于深...https://my.oschina.net/u/876354/blog/3070699




推荐阅读
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • ICRA2019最佳论文  Making Sense of Vision and Touch: SelfSupervised Learning of Multimodal Representatio
    文章目录摘要模型架构模态编码器自监督预测控制器设计策略学习控制器设计实验结论和展望会议:ICRA2019标题:《MakingSenseofVision ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
author-avatar
___何鵬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有