字符识别--CRNN+CTC
文字检测过程分两步,第一步为检测出文字所在的位置,第二步根据检测框里的内容进行文字识别。
第一部分文字检测,这里介绍了SAST算法:https://blog.csdn.net/qq_31607947/article/details/114637794
下一步是从定位好的文字框里识别出文字,主要解决的每个文字是什么:
一、背景知识
1、循环神经网络RNN
循环神经网络Recurrent neural network与其他CNN网络不同之处在于RNN每一点的输出依赖于之前的结果。RNN主要用来处理序列数据,如文字,语音等。对于这类数据,基于CNN的前馈神经网络会对每一个输入的特征都训练出一个单独的参数,从而不能很好的进行参数的共享。而RNN可以通过对不同时间点的特征共享参数来更容易的进行训练,泛化效果也更好。
设hi表示某曾隐藏层,该层的计算同时与上一层隐藏层有关,即为
xt表示当前层的输入,将上式展开有:
每一个输入xt都会生成对应的ht,ht之间相互以链式连接。可以将ht看做是输入向量序列(x^t,x^t-1,...x^1)的一种有损表示。根据不同的需要,ht可以控制损失的精度。例如对一些语言模型,可能只有输入附近的文字比较重要,就不需要存储t之前的所有序列信息。
例如有如下输入语句:I want to play basketball。在CNN网络中,这五个单词分别作为5个输入输入网络中得到五个分类输出,彼此之间没有干涉
但对于语言来说,分类输出是没有意义的。语言输入彼此之间存在着某种联系,例如play词后面一定会有一个名词来表示想要玩什么。如果我们的网络想要翻译或者识别一句完整的话,就需要知道每个单词之前说了什么,这样才能预测出下一个词想要表达的意思。
由此引出RNN结构,这种具有依赖性的网络结构,允许关键信息持续存在。
同样输入一句话,I want to play basketball,这五个单词是以时序出现的,将这五个单词一次输入到LSRM结构中。首先是I,它作为时序上第一个出现的单词被用作x0输入,拥有一个h0输出,并且改变了神经元A0的权重。单词want作为时序上第二个出现的单词作为x1输入,这时网络结构的h1输出不仅仅是由h1和x1决定的,也将由上一时刻的神经元状态A0共同决定的,即上文讲到的
之后的情况以此类推,直到输入的最后一个单词basketball。
下图为简单的RNN网络模型示意图
y代表真实值,o代表输出值,L代表损失值。总的损失值为各个L之和。这样的网络模型虽然具有了各个网络层之间的依赖性,但也意味着计算方式只能是顺序计算,而不能进行并行计算,训练过程过于缓慢。
2、seq2seq模型
为了让网络计算加快,可以让网络损失一些普适性,去掉hidden units之间的循环链接,而是建立起前一时间点的真实值和当前hidden unit的链接,则当前hidden unit并不依赖于前一点的h计算值。这样每个h的计算就可以并行进行了。当然y并不能完全代替h,所以这一方法加快了计算速度的同时降低了模型的普适性。这一方法叫做teacher forcing,模型结构如下
利用teacher focing,可使得模型结构为一个向量序列作为输入,输出一个序列,如将已经定位裁剪出的特征图像作为输入,得到描述该图片的输出文字序列,这种结构如下
x作为向量输入网络得到结果,这一过程称为为decoder/reader。计算出x的过程为encoder,使用RNN将输入序列转化为一个向量。这种模式称之为encoder-decoder或称作sequence-to-sequence结构。
但是这样的结构有些问题,尤其是RNN实际机制中存在长梯度消失的问题。对于较长的句子,很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息。所以随着识别句子长度增加,这种结构的效果会显著下降。
3、LSTM结构
LSTM全称long short term memory,是一种特殊的网络结构,能够学会间隔较久的依赖关系。
通常情况下的RNN神经单元的结构是非常简单的,每个模块重复的构成一条网络链
LSTM也具有这种模式,但是重复的模块拥有不同的结构。与RNN简单的一层相比,LSTM拥有四层,这四层以特殊的形式进行交互,并选择保留信息传到下一层。且在原有模式基础上添加了C向量,课看作细胞链。细胞链的作用类似于传送带,模块的状态在整个链上运行,只有一些小的线性操作作用在细胞链上。信息很容易的保持不变的流过整个链。
LSTM可以在较长句子中依然让每个模块之间保存依赖关系。
二、CRNN应用讲解
1、网络结构
CRNN网络结构即为CNN+RNN+CTC,如下
损失函数CTC
参考
https://zhuanlan.zhihu.com/p/43534801
https://blog.csdn.net/liuxiaoheng1992/article/details/88826043
字符识别--CRNN+CTC相关推荐
- 一文读懂CRNN+CTC文字识别
转自:https://zhuanlan.zhihu.com/p/43534801 文字识别也是图像领域一个常见问题.然而,对于自然场景图像,首先要定位图像中的文字位置,然后才能进行识别. 所以一般来说 ...
- 文本识别之CRNN+CTC
CRNN+CTC CRNN CTC Loss ctc的做法 CTC的训练目标以及函数定义 模型预测 主要参考的文章: 1.https://zhuanlan.zhihu.com/p/43534801 2 ...
- 阿里读光OCR原理介绍ppt之 crnn ctc + centerloss 提升形近字识别
此篇文章为阿里云栖大会的介绍自己读光OCR系统的pdf 已经通过crnn ctc + centerloss 实现对形近字的提升 github:https://github.com/tommyMessi ...
- 基于CRNN+CTC的改进图像文本识别算法
上一次介绍了基于改进EAST(An Efficient and Accurate Scene Text Detector)算法的文本定位算法这次我来介绍基于卷积循环神经网络CRNN (Convolut ...
- 一文读懂CRNN+CTC(Connectionist Temporal Classification)文字识别
先总结一把CTC,下面文档太长: CTC是一种Loss计算方法,用CTC代替Softmax Loss,TF和pytorch都有对CTC的实现,从而解决OCR或者语音识别中序列对齐的问题.CTC特点: ...
- 【OCR入门】二、文本识别(CRNN+CTC)
目录 前言 一.文本识别背景 二.CRNN+CTC算法概述 三.CRNN+CTC整体算法 3.1.backbone:CNN 3.2.neck:LSTM 3.3.head:CTC测试时解码 3.4.CT ...
- python判断文本内容_文本检测、文本识别(cnn+ctc、crnn+ctc)
代码目录 |---- config.py # 工程参数配置 |---- ocr_lib # 模型.数据生成 | |---- crnn.py # 选用不同模型 | |---- vgg16.py | |- ...
- 【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 OCR--简介 文字识别也是图像领域一 ...
- CRNN+CTC (基于CTPN 的end-to-end OCR)
1. https://zhuanlan.zhihu.com/p/43534801 (详细原理) 2. https://blog.csdn.net/forest_world/article/detai ...
最新文章
- 水波纹效果,附工程源码
- 1 操作系统第一章 操作系统概念、功能、四大特征、操作系统发展与分类
- 【Alpha 冲刺】 1/12
- 【LeetCode】剑指 Offer 46. 把数字翻译成字符串
- Winform里面的缓存,MemoryCache使用
- yum install / yum localinstall
- Android 四大组件学习之ContentProvider二
- eviews安装教程
- mysql 全文索引 (N-gram parser)
- 再添荣誉!青软集团获评「山东省科技小巨人企业」称号
- Windows系统下在Git Bash中把文件内容复制到剪贴板的命令
- VGG model 涉及到的paper
- Rust程序设计语言-使用包、Crate和模块管理不断增长的项目
- 电脑自带热点,去打不开热点(解决方案)
- python的文本编辑器atom_python的各种编辑器-PyScripter、pycharm 、atom、vscode、Sublime Text等等...
- 雷电三接口有什么用_三坐标为什么用汽浮轴承?
- i3 7100黑苹果_黑苹果系统是否好用?
- 1.VB_求解圆的体积
- 计算机内部应用什么计算,计算机内部使用什么来计数
- egg开发笔记(五)egg使用egg-sequelize需要注意的事项