[论文笔记] CRNN(Convolutional Recurrent Neural Network)_2015 学习笔记
[论文笔记] CRNN(Convolutional Recurrent Neural Network)_2015 学习笔记
本人文字识别初学者,通过学习笔记记录下自己的学习历程,希望坚持下去。基于对CNN和RNN的大体了解,先从经典文章开始学习。论文笔记根据个人理解而记录,不能完全保证理解的正确性,愿意与大家讨论学习。
该文章全称《An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition》,提出的CRNN模型,是目前比较经典的文字识别模型,主要记录以下几方面:
- 概述
- 网络结构
- 实验相关
概述
本文提出CRNN模型,即将CNN与RNN网络结合,共同训练,在一定程度上实现end-to-end文字检测和识别。说一定程度是因为虽然输入图像不需要精确给出每个字符的位置信息,但实际上还是需要对原始的图像进行前期的裁切工作。
网络结构
CRNN的网络结构包括三个组成部分:卷积层、循环层和转录层。如下图所示:
卷积层从输入图像中得到一组feature maps,再以feature sequence的形式输出,来作为循环层的输入。其中所有输入图像归一化至同一高度(本文实验为32 pixels),每个feature map的第i栏串联为feature sequence的第i个vector,即第i帧。
循环层中采用deep双向lstm模型,如下图所示。LSTM可以将误差差别反向传播到卷积层,从而实现在同一网络中对CNN和RNN的共同训练。并且RNN可以在任意长度的序列上进行学习,优于CNN模型的固定维度。Lstm解决了传统RNN梯度消失的问题,文章堆叠了两个双向lstm,效果更好。循环层的输出为预测的序列结果
转录层是将预测结果转换成label序列,即找到最高概率分布的label序列。此处的概率函数采用CTC算法。实际上,有两个模式的转录层,一个是lexicon-free没有词典的,一个是lexicon-based有词典的。没有词典的转录层直接输出概率最高的label sequence;有词典的转录层需要在词典中查找最像的一个候选文本,采用BK-tree(模糊匹配算法)找到编辑距离(Levenshtein距离)A小于一定数值(本文设定
实验相关
训练过程的输入为图像及每个图像对应的label序列,采用随机梯度下降(SGD)法训练目标函数。优化算法采用adadelta而不是传统的momentum。实验过程中,采用VGG-veryDeep框架的卷积层,由于text的形状一般为长方形,在第3和第4个max pooling层,采用1*2的window代替原来的正方形window。在第5和第6个卷积层后加入batch nomalization层,使训练加速。