深度学习之OCR(一)——多数字识别_Multi-digit Number Recognition

Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks.
Ian J. Goodfellow, Yaroslav Bulatov, Julian Ibarz, Sacha Arnoud, Vinay Shet.
ICLR 2014.

模型介绍

本文利用CNN进行门牌号识别,并且规定序列最大长度为N(实验设N=5)。最后一层包含6个softmax,第一个softmax预测是的序列长度L,L可取7个值:{0, 1, 2, 3, 4, 5, 大于5}。后面5个softmax分别表示对应位置上的数字,每个位置上的数字可取10个值:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。在训练时,对于digit不存在的位置,不反向传播任何误差信息。对于存在的digit和L,其误差为常见的负log似然。本文所用网络结构如下所示:

深度学习之OCR(一)——多数字识别_Multi-digit Number Recognition_第1张图片

文中第一个卷积层使用maxout激活函数,其他层用ReLU激活函数。这里修改成所有层都使用ReLU激活函数。

数据集:
SVHN数据集中,对每个图片标记了每个数字的box:首先得到包含所有数字的box,然后将这个box的宽和高都扩展30%,根据扩展box截图,将截图resize到64*64大小,然后在这个64*64的图片上的任意位置截54*54的图片。会对数据进行减均值的预处理操作。

作者反映训练的模型可以达到96%的精度。

PyTorch实现

自己在PyTorch框架下实现了本文模型,可以移步Multi-digits-Goodfellow2014阅读。

这里没有统计图像均值,而是直接对图像除以255并且减去0.5,使得像素值归一化为[-0.5, 0.5]之间。

梯度检查

如果采用tanh函数作为非线性函数,那么需要对图像进行中心化并且归一化。否则,在梯度检查的时候,可能出现梯度值非常小,以至于数值梯度为0的情况。

训练

tanh激活函数

初始化 学习率 是否earlly stopping 是否Dropout 是否BN 是否灰度图 是否归一化[-0.5,0.5] 测试准确率
卷积层kaiming_uniform初始化,全连接层xavier初始化 0.0005 68.9%
卷积层kaiming_uniform初始化,全连接层xavier初始化 0.0005 62.9%
kaiming_uniform初始化 0.0001 65.96%
kaiming_uniform初始化 0.0001 25.1%(没有进行数据扩增)
kaiming_uniform初始化 0.0001 26.5%(没有进行数据扩增)

都是训练集上准确率为1,测试集上准确率比较低,远小于论文中所说的96%。猜测是在训练数据上过拟合了。

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