【OCR技术之一】 CRNN算法

1. CRNN 算法的背景

传统的OCR在识别过程中分为两步:单字切割与分类任务。我们一般都会讲一连串文字的文本文件先利用投影法切割出单个字体,再送入CNN里进行文字分类。但是此法已经有点过时了,现在更流行的是基于深度学习的端到端的文字识别,即我们不需要显式加入文字切割这个环节,而是将文字识别转化为序列学习问题,虽然输入的图像尺度不同,文本长度不同,但是经过CNN和RNN后,在输出阶段经过一定的翻译后,就可以对整个文本图像进行识别,也就是说,文字的切割也被融入到深度学习中去了。

现今基于深度学习的端到端OCR技术有两大主流技术:CRNN OCR和attention OCR。其实这两大方法主要区别在于最后的输出层(翻译层),即怎么将网络学习到的序列特征信息转化为最终的识别结果。这两大主流技术在其特征学习阶段都采用了CNN+RNN的网络结构,CRNN OCR在对齐时采取的方式是CTC算法,而attention OCR采取的方式则是attention机制。本文将介绍应用更为广泛的CRNN算法。

2. CRNN网络结构

【OCR技术之一】 CRNN算法_第1张图片
网络主要由三部分组成,从下到上依次为:

卷积层,使用CNN,作用是从输入图像中提取特征序列;
循环层,使用RNN,作用是预测从卷积层获取的特征序列的标签(真实值)分布;
转录层,使用CTC,作用是把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果;

【OCR技术之一】 CRNN算法_第2张图片

2.1. 卷积层

卷积层使用了VGG16进行特征提取,其中输入图像为单通道灰度图像,且图像高度统一为32个像素, 。区别于传统的VGG16,CRNN的卷积层在第3个和第4个maxpooling层采取了1×2的矩形池化窗口(h×w),这个改动是因为文本图像多数都是高较小而宽较长,所以其feature map也是这种高小宽长的矩形形状。CNN输出的图像尺寸大小为512x1x16(c×h×w)。输出的向量格式为[b, c, h, w]。

2.2 循环层

RNN部分使用了双向LSTM,隐藏层单元数为256,CRNN采用了两层BiLSTM来组成这个RNN层。
RNN层的输入为[seq_len, batch, input_size]
seq_len: 序列长度
batch: 即batch_size
input_size:输入特征数目
将CNN的输出结果[b, c, h, w]经过转化变为[w, b, c]作为RNN的输入,即[w, b, c] = [seq_len, batch, input_size]

你可能感兴趣的:(深度学习)