前言:

在上一篇文章中,我们简单讲解了文本识别分类器之卷积神经网络(CNN)分类器,在这篇文章中,将从 文本识别分类器的结构,文本识别分类器的输入,以及 文本识别模块的设计 三个方面讲述。

1.文本识别分类器的结构

cnn图片二分类项目简单 cnn分类器_文本识别分类器

如上图所示,文本识别分类器由一个十层的卷积神经网络组成,其中包括一个输入层和一个输出层,中间八层分为四组,每一组由一个卷积层和一个Maxout激活函数层组成。Maxout激活函数有着如下的表达式:

cnn图片二分类项目简单 cnn分类器_文本识别_02


其中Gk表示从输入集合G中顺序选取的k个元素,激活函数简单地取这k个元素函数值中的最大值。中间层的部分采用部分连接的方式,第一组卷积-激活层接收大小为32×32的图像,并采用大小为9的窗口卷积96个过滤器,激活函数的k值为2,因此其体积为24×24×48;第二组卷积-激活层采用大小为9的窗口卷积128个过滤器,激活函数的k值为2,因此其体积为16×16×64;第三组卷积-激活层采用大小为8的窗口卷积512个过滤器,激活函数的k值为4,因此其体积为9×9×128;最后一组的卷积-激活层采用大小为9的窗口卷积8个过滤器,激活函数的k值为4,因此其体积为1×1×62。第九层(激活函数层)和第十层(输出层)之间采用全连接的方式进行连接,其模型可以用一个改进的支持向量机(SVM)来描述。支持向量机为一统计学习模型,其目的是通过最优化计算和调整最终求得一个将n维空间一分为二的超平面,且超平面两侧均有且仅有一种特征点,且超平面到两侧样本点的最短距离之和最大。支持向量机可以用以下最优化问题来描述:

cnn图片二分类项目简单 cnn分类器_文本识别分类器_03


其中第二行的式子描述的是各个样本点到超平面的距离,最优化问题需要求损失函数的最小值。在实际训练的过程中,论文还采取了Dropout策略来防止模型出现过拟合,即使得每一层以一定概率使得部分神经元不参与一次迭代中的权重更新。实际训练时,这个概率值被设置成了50%。

2.文本识别分类器的输入

文本识别分类器接受32×32的灰度图像输入。论文中使用的数据集样本数量约为70000个,其中包含30000个正样本和40000个负样本。正样本是指训练样本中包含完整字符,且字符居中的情况;负样本是指图像中不存在字符或字符不完整的情况,包括一些非文本图像和噪声图像等等。我们将每张输入图像用一个1024维的向量表示,并对图像进行归一化处理:

cnn图片二分类项目简单 cnn分类器_文本识别分类器_04


即对图像的每一个像素作标准归一化处理,其目的是为了消除像素间的强关联。70000张正负样本经归一化处理之后,即得到CNN网络的输入数据集。

3.文本识别模块的设计

cnn图片二分类项目简单 cnn分类器_文本识别_05


在文本检测模块已经将文本置信区域给出的情况下,论文利用上一篇文章中描述的分类器横向扫描置信区域。与单词检测类似,论文使用训练好的字符识别分类器以滑动窗口的形式扫描图像,滑动窗口的大小为32×32,窗口的移近步长为一个像素。在每一个水平位置上,文本识别分类器输出一个62维的向量r,向量r的元素之和为1,每一个对应位置的元素表示该滑动窗中的文本为某一字符的概率。输入单词块经过扫描之后得出的结果为一62×W维的矩阵,其中W为单词块的横向像素宽度。若对应的置信度(数值)越大,则表示第j个窗口中的字符为i的可能性越大。

对于字符置信矩阵M中的每一列,计算其中最高置信度和第二高置信度之间的差值dj,称为置信差。置信差越大,表明对应列j上的字符为最高置信度字符的可能性越大。我们将置信差利用NMS算法(这里未作介绍)进行处理,转换为d’j,如果d’j为零,则将M中对应的第j列删去。由此我们可以得到一个新的矩阵,记为M’。

对于一个单词ωi,定义S为该单词在矩阵M’中的分值,i为单词长度。令L为字典,则分值可以用以下公式表示:

cnn图片二分类项目简单 cnn分类器_卷积_06


其含义为该单词在矩阵中的置信度与词典中的出现频率乘积之和的最大值(即取字母出现频率最高的移动窗的置信度)。对于每一个分割点b,我们利用以下公式计算该分割点的分值:

cnn图片二分类项目简单 cnn分类器_谷歌街景_07


等式右侧为分割点左右两侧单词的分值。最后,我们取所有分割点中分值最大的作为我们的单词分割点(如在s eeyou、se eyou和see you中选取see you),将每个分割点连接起来后,最终得到我们的文本识别结果。