CRNN网络结构详解

[TOC]

一. CRNN概论

重点:原论文一定要得看!!!英语好的直接看原论文,不懂的地方查资料。英语不好的(比如笔者),先看中文资料,然后再看原论文

简介

CRNN全称是:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition说自己是端到端的的网络,其实严格意义根本不是的,而是一种识别网络而已。

严格意义端到端的网络:Fast Oriented Text Spotting with a Unified Network

请看下图为CRNN网络的输入,得检测到文字之后才能去识别文字。

图1-1

不严格的端到端是啥意思呢?

下图1-2所示为传统的文字识别,还得把每个文字分割再去识别(这方面的东西不进行说明,很简单的传统方法)

图1-2

而CRNN直接输入上图得到结果。

网络

CRNN网络结构入下图1-3所示:

图1-3
  • 特征提取

正常的图像提取,提取到的特征以序列方式输出,这里不懂的读者可以去看<u>RNN训练手写数字识别</u>

  • BLSTM

特征输入到BLSTM,输出每个序列代表的值(这个值是一个序列,代表可能出现的值),对输出进行softmax操作,等于每个可能出现值的概率。

  • CTC

相当于一个LOSS,一个计算概率到实际输出的概率,具体后面章节介绍。

  • 创新点
  1. 使用双向BLSTM来提取图像特征,对序列特征识别效果明显
  2. 将语音识别领域的CTC—LOSS引入图像,这是质的飞越
  • 不足点
  1. 网络复杂,尤其是BLSTM和CTC很难理解,且很难计算。
  2. 由于使用序列特征,对于角度很大的值很难识别。

二. CRNN局部之特征提取

图2-1

假设上图2-1为提取到的特征(特征是一块一块的,这肯定不是特征图,为了看着舒服)

图像经过VGG的特征提取之后就是普通的feature map,然后进行上述的划分,形成特征序列!

如果你的文字很斜或者是纵向的,那就得把特征竖向划分序列了!

三. CRNN局部之BLSTM

基本原理不懂读者可以看看这个教程

懂了原理这部分还是比较简单的(理解简单,实现太难了),笔者这里只介绍几个使用过程难理解的点

图3-1
  • RNN输入序列数量

从上图可以得到的是X1---X6,总共6个序列

  • RNN的层数
图3-2

从上图3-2可以看出,是由五层网络构成

  • RNN神经元数量
图3-3

这里引用知乎大神的一个图,上图中序列为4,层数为3层(当然不加输入和输出也可以说是1层,这里按正常CNN去说就是3层了)

从图中可以看出每个序列包含一个CNN,图中的隐藏层神经元数量为24个,由于RNN使用权值共享,那么不同的神经元个数就为6个。

  • 单个序列长度

以上图知乎大神的图为例子,每个输入序列长度8

假设这个网络是一个RNN识别手写数字识别的图,那么图像的宽为4,高为8

<u>注意</u>:输入序列的数量和输入序列的长度和神经元个数无关!!!这里想象RNN即可理解

  • BLSTM
图3-4

笔者只是推导了单向的LSTM网络,而没有推导BLSTM网络。

其实无论RNN如何变种,像现在最好的GRU等,无非都是在单元(unite)里面的trick而已。

具体公式推导,就是链式求导法则!建议先推RNN、然后LSTM、最后不用推导BLSTM都明白了

四. CRNN局部之CTC

关于CTC的描述网上很多,也讲解的比较清楚了,这里主要是说一下我笔者看原理时候的几个难点(弄了好久才想明白)

关于CTC是什么东西?

  • 让我们来看一下正常分类CNN网络:
    图4-1

这是鸢尾花分类网络,其中输入一张图像,输出是经过softmax的种类概率。

那么这个网络标签是什么???

图4-2

标签的制作都是需要经过Incode(分类的种类经过数字化编码),测试过程需要Encode(把输出的数字解码成分类的种类)

这很简单,读者应该都理解,代码为了计算机能看懂,编码就是神经网络能看懂。

  • 那么RCNN如何编码呢?
图4-3

假设有26个英文字母要识别,那么种类数=27(还有一个空白blank字符)

假设CNN输出以50个序列为基准(读者这里看不懂就去看RNN识别手写数字识别),序列太大训练不准,识别结果会漏字母。序列太小训练不准,识别会多字母。

  • 打个小比喻
图4-4

假设CTC是一个黑盒子,它能把输出那么多序列变化为一个序列,这样就能和CNN分类一样计算Loss了。当然不会那么简单,CTC还是比较复杂的,后面具体看这个黑盒子如何工作的。。。。

CTC理论基础

注释:这里笔者就不进行详细的描述了,感觉别人比我写的更好:非常详细的CTC力理论

在这一章,主要针对笔者遇到的重难点进行介绍:

  • 训练--前向后相传播

本来还去看了马尔科夫的前后向传播的理论,没怎么看懂(数学基础太差)

针对本文的CTC前后向传播还是比较简单理解的

图4-5

其实这里可以理解为动态规划的方式进行的,因为其使用递归的方式,以一个点为中心,向前和向后进行递推,以动态规划的方式理解就很简单了。。。。不懂的读者可以刷leetcode,做几题就有感觉了

  • 测试--CTC Prefix Search Decoding和CTC Beam Search Decoding

最简单的搜索追溯算法

每个都列举最后计算,可以看出来是指数级搜索,效率肯定不行的

图5-6

贪婪算法+动态规划---CTC Prefix Search Decoding:

第一步是进行合并操作:

图5-7

第二步输出最大概率:

图5-8

扩充CTC Prefix Search Decoding算法---CTC Beam Search Decoding

图5-9
  • CTC Prefix Search Decoding属于贪心算法,为什么可以得到最优解?

仔细看我上面的标题,CTC Prefix Search Decoding特意加了一个动态规划,动态规划是属于最优解的算法。

因为CTC算法的前提是序列相互独立,所以当前的序列最大,那么整体的序列最大。

注意:得合并之后的序列最大,而不是单个序列的最大!!!,如果是单个序列最大,那这就是单独的贪心算法了。

  • 为什么CTC序列之间相互独立还可以计算有序列的文字,文字之间肯定有序列的啊?

这都得重新看网络了,网络用到了BLSTM,序列这个东西已经使用过了,到达CTC已经是使用序列之后的输出了。

不得不佩服设计网络的人RNN+CTC,语音是使用最早的。

其实回头想一下,如果CTC是有序列的,那么前向和后项概率根本不能使用马尔科夫模型(前提相互独立)了,也不能使用CTC Prefix Search Decoding,只能使用最简单的追溯算法,那效率那么低,怎么广泛使用呢?

五. 参考文献

CRNN原论文

CTC论文

深度学习笔记

RNN形象图

RCNN的pytorch实现-冠军的试炼

一文读懂CRNN+CTC文字识别

[透视矫正网络](Attentional Scene Text Recognizer with Flexible Rectification)

简化CTC讲解

知乎beam search讲解

非常详细的CTC讲解

一个CTC的小笔记

外国大神的讲解,大部分人都是直接翻译这个的

大神讲解马尔科夫的前后向计算

CTC详细代码实现+步骤讲解

快速阅读论文之扭曲矫正

2019CVPR论文汇总

ROI Align实现细节

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 简介 CTC:Connectionist Temporal Classification论文:Connectioni...
    HRain阅读 4,653评论 0 7
  • 和其它文章初衷一样,网上解释很多,但是讲的不是很明白,在看完几篇参考博客后特此记录 简介 先拿语音识别任务来说,如...
    ce0b74704937阅读 28,731评论 3 26
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 翻译论文汇总:https://gith...
    SnailTyan阅读 35,995评论 3 12
  • 前面的文章主要从理论的角度介绍了自然语言人机对话系统所可能涉及到的多个领域的经典模型和基础知识。这篇文章,甚至之后...
    我偏笑_NSNirvana阅读 13,842评论 2 64
  • 17年interspeech论文地址 论文1(语音识别cnn+lstm) 摘要: 语言识别(LID)系统用...
    灿烂的GL阅读 15,242评论 1 8