手写识别综述

摘要

关于手写识别已经有很多方法被研究使用,近年来随着深度学习的应用越来越广泛,RNN以及MDLSTM循环神经网络等方法在手写识别中取得了很好的效果,逐渐取代以前的HMM隐马尔可夫或CRF条件随机场的方法,主要得益于RNN在序列标注问题上的几个关键部分得到解决,包括CTC和MDRNN的提出。本文将从手写识别的描述、方法进行介绍,主要介绍深度学习方法在手写识别中的应用。

关键词:手写识别方法 RNN MDLSTM 序列标注

介绍

手写识别即 Handwriting recognition(HWR)[1]是计算机接收来自文章文档、照片以及触摸屏或其它设备的手写输入并识别其中的文字的一种能力。输入的包含文本的图片可以来自于离线的包含手写文本的图片,这些图片可以是来自于OCR光学扫描的图片,OCR是Optical character recognition[2],也就是光学字符识别,是用想扫描仪或数码相机这样的电子设备来检查纸上的字符,然后用字符识别方法将其翻译成计算机文字的过程,OCR是模式识别、人工智能及计算机视觉中的一个研究领域。手写识别另一个方向就是在线手写识别,这里的在线指的是在笔写的过程中进行实时的识别,识别的方法可以考虑笔移动的信息。

在线识别

在线识别主要包括在写入PDA个人数字助手或其它一些触摸设备时的文本的自动转换功能,在写入的过程中传感器会收集笔的上下操作信息以及笔尖的移动信息,这些信息一起作为手写体的信息表示,然后经过识别算法得到文字数据。在线识别主要的设备需要供用户书写的笔或手写笔,一个能感知信息的触摸屏和显示屏,以及一个能描述手写笔在触屏上运动的信息的解释程序和识别文字的程序。

在线识别文字的主要步骤是预处理、特征提取然后进行分类,预处理的目的主要是消除用户输入数据中对结果由负面影响的不相关的信息,这会影响到最终识别的准确率。预处理通常包括二值化、归一化、采样、平滑和去噪组成。特征提取是要从预处理后的两维数据或多维数据提取较高维数据,主要是为了突出识别模型中的重要信息,可能包括笔的压力、速度或书写方向的改变等信息。最后一步分类就是使用各种模型提取的特征映射到不同的类别,从而识别特征所代表的字符或单词。

离线识别

离线手写识别是将图片中的文本自动转换为可在计算机中处理的文字信息,与在线识别不同的是只包含图片信息,因此离线识别相对要困难一点。离线识别中识别字符的多少对于最终的精确率会有影响,所以应该尽可能的减少识别对应的字符数量。离线识别的一般步骤为首先对图像进行切割并提取其中的字符,然后对单个的字符进行识别,识别的方法可以有很多种,可以是神经网络的方法,目前CNN的应用将单个字符的识别能够达到很高的正确率,例如AlexNet和GoogleNet能够对中文单个字符有很高的识别正确率[3]。但是这种分割再单字识别的方法有着很大的局限性,比如分割的正确率对结果会有很大的影响,并且如果两行文字位置之间有些许的偏移就会导致很严重的错误。现在研究更广泛的是将手写识别看做一个序列标注问题,类似于语音识别中对于语音信号序列的标注,加上深度学习以及RNN和MDLSTMD广泛应用,深度学习进行序列标注的方式现在在离线手写识别问题上取得了最好的效果。

深度学习方法

神经网络算法在很早就被提出了,但是最近几年才一直很热门,相关的一些算法包括DNN、CNN和RNN等在图像和NLP领域都广泛应用。卷积神经网络中最重要的操作是卷积和池化以及最后的全连接层,一些常用的开源深度学习框架都对cnn提供了很好的支持。卷积神经网络CNN对于中文字符中单字的识别效果很好,但是考虑到文本识别或者说一行文字的识别就需要用到循环神经网络RNN。RNN最主要的特点就是上一个时间步长的结果作为当前操作的一个输入,也就是说对于时序数据来说,上文的信息对当前的输出会有影响。但是RNN的缺点就是只能对短期信息进行记忆,对于比较长的信息在训练的时候容易产生梯度爆炸或梯度消失的问题,所以后来又引入了LSTM和GRU等网络结构来解决这个问题。

序列标注方法

Sequence labelling[4]即序列标注,在机器学习中用离散的标签来转录序列数据的任务都称为序列标注,比较常见的问题包括语音识别和手写识别、蛋白质结构预测和词性标注。序列标注与普通的分类问题不同的地方在于,输入和标签的对齐经常是未知的,所以需要能够确定位置和输出标签的算法。序列标注中的上下文信息比较重要,而循环神经网络RNN在使用上下文信息方面很灵活,可以选择学习存储和忽略相应的信息。但是RNN有着比较严重的缺陷就是很难长时间的记住信息,在训练的过程中对于时间较长的序列训练时会产生梯度爆炸或是梯度消失的问题,阻碍了RNN的应用。直到长短时记忆网络LSTM的提出才解决了这一问题,LSTM能够在较长的时间跨度进行记忆和处理信息。另一个问题是RNN只能单向的处理上下文信息,而对于序列标注问题的话标签两边的上下文信息都是有用的,所以Graves等人提出来BLSTM[5]也就是双向LSTM来结合比较长跨度的记忆和双向的上下文信息。

另外对于输入序列与标签未对齐的任务,传统的方法使用的是隐马尔可夫模型和RNN的混合方法,其中RNN只被当做辅助角色,也就是用隐马尔可夫模型为RNN生成目标,然后RNN输出观测的概率,这样的混合方法没有考虑到RNN对序列处理的潜力,因此被后来的RNN和CTC的组合所替代。CTC即connectionist temporal classification[6],CTC输出层通过直接训练RNN来标记具有未知对齐的序列,并使用单一的判别性损失函数来消除隐马尔可夫模型的需要。

RNN开始是设计用来处理一维的序列的,因而对于处理图像或者视屏这样的任务,RNN可能丢掉鲁棒性,因此后来出现了多维RNN[7]以及MDLSTM多维LSTM。即使使用LSTM架构,RNN仍然倾向于处理长距离的序列,这样会导致网络需要很高的内存,并且非常耗时,对于输入数量巨大的图像甚至视频等多维数据时更加严重。基于此Graves等人提出来包含一系列时空分辨率递减的多级下采样RNN结构,Hierarchical subsampling RNNs,可以降低网络对内存的要求。MDLSTM、CTC输出层和多级下采样的结构能够结合成一个完全由RNN构建的通用的序列标注系统,适合多种数据和任务,也是目前对于手写识别应用研究很广泛的一种方法。

CTC

CTC也就是connectionist temporal classification[6],可以看做是RNN的一个输出层,专门用于时间分类任务,主要是对于输入和目标标签之间的对齐未知的序列标注问题,CTC不需要将网络与隐马尔可夫模型结合,也不需要预先分段的训练数据或者从外部网络中提取标签序列。如果是单纯的神经网络连接的话需要为输入中的每个段或每一步时间分开训练,这会导致训练目标必须被分段,并且网络只能输出局部的分类信息,必须在外部建模进行后处理才能得到最终的结果。这种前处理和后处理可能会对模型的正确率有很大的影响,因而CTC的主要目的就是让序列的分段和后处理与RNN在一个网络中进行训练。

对于标签来自于字母表A中的一个序列标注任务,若字母表大小为L即类别数,则CTC由L+1个softmax输出单元构成,因为加入了一个分隔标签blank,定义A’为包括分隔标签和A的集合,用π表示多个不同的标签组成的一个序列,称为一个路径,这样一条路径的概率可用其对应的每个标签的概率的乘积表示。然后将可能的路径进行规整化,也就是先将连续出现的相同标签只保留一个,最后将分隔标签也去除,这样得到的一条路径为规整化后的序列。一种规整化的序列可以由多条路径进行规整化而来,所以其规整化后的序列的概率就由所有可以产生该序列的路径的概率取和。

MDRNN

标准的的RNN是一维的,不适合多维数据,在多维数据比如对图像或视频的处理时也是需要单维数据中表现的鲁棒性,所以产生了多维循环神经网络MDRNN[7],对于二维数据比如图像来说,MDRNN其实主要就是要考虑序列的方向,比如从图像的左上角作为开始,以向右和向下两个方向的元素作为自己的后续,这样的话对应2D序列的上下文就清楚了,上文对应这左边的数据和上面的数据。当然扫描的方向可以从任意方向,只是对应的上下文区域会有所不同。多维RNN也很容易扩展到LSTM,LSTM中的遗忘门控制着对输入数据的选取,单维LSMT中只有一个遗忘门控制,扩展到n维之后可以对应增加到n个遗忘门,就对应着多维LSTM,即MDLSTM。

拉丁文及阿拉伯文文字识别

多维循环神经网络和CTC的提出使得RNN用于手写识别变得简单,使用MDLST和CTC组合的多级下采样识别系统可以对几乎任何语言进行处理。最早将其应用到离线手写识别的是Graves提出的多维RNN进行离线手写识别[8],文中提出来一种多级下采样MDLST架构,主要的步骤是,首先将图片分成比较小的像素块(如4x3),每个像素块代表MDLSTM的一个单独的一个输入,4x3的一个像素块被reduce成一个长度为12的向量,如果图像不能刚好被分开成block,就进行补零操作。第一层是4个MDLSTM cell,对应从图像的四个定点作为开始,向内为方向,对应有四个采样方向。MDLSTM的激活输出又收集为block,然后这些block输入一个feedforward层,然后准备输入下一层MDLSTM,如此重复。最后接一个CTC层进行输出可能的序列。

这里使用一个block作为输入的目的是收集本地上下文信息,并减少激活数组的大小。

中文汉字识别发展

相较于拉丁文中文手写识别是一个极具挑战的模式识别以及机器学习问题,主要问题包括中文汉字字符级别的类别繁多,相较于印刷体汉字,手写字符的手写随意性大,缺乏规范性,并且中文汉字中存在很多相似字和容易混淆的字,这些都对中文汉字识别带来的困难。

对于中文汉字的识别,一般方法是进行数据预处理、特征提取和分类识别三个部分,数据预处理包括样本归一化、平滑去噪和整形变换等方法,这种基于传统的预处理、特征提取加分类器的方法近年来并没有取得较好的进展,基于深度学习的方法引入了CNN,此前大部分方法都是将其分割然后利用分类方法进行识别,对于单字的识别使用CNN也能达到很好的效果,但是缺点是需要提前进行分割。对于汉字识别,为了进一步提升深度学习模型的性能,可以增加神经网络结构的深度和宽度,并且还可以将传统领域的知识与深度学习的模型进行结合。并且对于深度学习的样本训练方式也作了改进,传统最简单有效的样本训练方式是使用mini-batch的模式,每个batch的样本是从总样本集合中随机抽取,并且可以采用dropout的方式以一定的概率丢弃样本,可以提高网络的泛化能力,并进一步提高性能。

基于MDLSTM和CTC组合的架构,Ronaldo Messina等人提出了无分割的中文手写识别方法[9],其采用ICDAR2013的中文手写识别的数据,数据来源于中科院自动化所的中文手写数据库,主要的创新点是在MDLSTM和CTC的基础上增加了一个语言模型来优化最终的输出,能对长得很像但是有些不可能出现的词给一个较低的打分,能够优化最终的准确率。另外由于中文汉字的数量太多,相较于拉丁文会导致模型的输出空间和输出层太大,会导致内存消耗高并且计算量大,基于汉字的偏旁部首的分解,Ronaldo Messina等人又提出对汉字利用偏旁部首进行编码来减少RNN输出的大小,最终保证在一定准确率下降的情况下,能够较快的提升之前的训练速度。

另外现在还有将Attention机制引入MDLSTM进行端到端的手写段落识别[10]的研究,对于中文识别目前取得最好效果的是2016年的FCRN网络[11]以及之后2017年的利用空间语义信息优化的MC-FCRN网络[12]。

总结与展望

无论是离线手写识别还是在线手写识别,在包括传统数据预处理、特征提取和分类识别三个部分的步骤的方法已经没有什么进展,而深度学习的发展为手写识别带来了生机。以CNN和RNN为代表的一系列深度学习模型的出现,手写单字识别和手写文本识别问题都得到了较好的解决。无论是联机还是脱机手写中文字符识别,基于CNN以及改进模型的方法均取得了接近甚至超过人眼识别性能的高识别率。对于整个文本的识别RNN和MDLSTM以及CTC等方法与现在的深度学习CNN网络结构相结合能够取得非常好的效果,在2017年的利用空间语义信息的全卷积循环网络已经达到了97%以上的准确率,当然手写识别现在仍然有些方面的问题还没有解决,包括超大类别手写汉字识别的问题,中文汉字的字数虽然本身就多,但目前考虑基本都是常用的大约3000个字符,所以还有更多的中文汉字识别缺乏相关的数据集。另外一个待解决的问题是自然场景中的文字检测与识别,目前互联网爆炸式增长,使得图片以及图片中包含的文字信息的数据越来越多,在这一个方向中,深度学习同样可以产生很好的效果。

总的来说,深度学习为解决手写识别包括拉丁文、阿拉伯文及中文等几乎所有语言都能够提供新的方法和技术,相对于之前的传统方法有了长足的进步,但仍然存在一些问题需要进一步研究。

Reference

  • [1] https://en.wikipedia.org/wiki/Handwriting_recognition
  • [2] https://en.wikipedia.org/wiki/Optical_character_recognition
  • [3] Zhong Z, Jin L, Xie Z. High performance offline handwritten Chinese character recognition using GoogLeNet and directional feature maps[C]// International Conference on Document Analysis and Recognition. IEEE Computer Society, 2015:846-850.
  • [4] Graves A. Supervised Sequence Labelling with Recurrent Neural Networks[J]. Studies in Computational Intelligence, 2008, 385.
  • [5] Graves A, Schmidhuber J. Framewise phoneme classification with bidirectional LSTM networks[C]// IEEE International Joint Conference on Neural Networks, 2005. IJCNN '05. Proceedings. IEEE, 2005:2047-2052 vol. 4.
  • [6] Graves A, Gomez F. Connectionist temporal classification:labelling unsegmented sequence data with recurrent neural networks[C]// International Conference on Machine Learning. ACM, 2006:369-376.
  • [7] Graves A, Fernández S, Schmidhuber J. Multi-dimensional Recurrent Neural Networks[J]. 2007, 4668:549-558.
  • [8] Graves A. Offline Arabic Handwriting Recognition with Multidimensional Recurrent Neural Networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2008:545-552.
  • [9] Messina R, Louradour J. Segmentation-free handwritten Chinese text recognition with LSTM-RNN[C]// International Conference on Document Analysis and Recognition. IEEE, 2015:171-175.
  • [10] Bluche T, Louradour J, Messina R. Scan, Attend and Read: End-to-End Handwritten Paragraph Recognition with MDLSTM Attention[J]. 2016:1050-1055.
  • [11] Xie Z, Sun Z, Jin L, et al. Fully Convolutional Recurrent Network for Handwritten Chinese Text Recognition[J]. 2016:4011-4016.
  • [12] Xie Z, Sun Z, Jin L, et al. Learning Spatial-Semantic Context with Fully Convolutional Recurrent Network for Online Handwritten Chinese Text Recognition[J]. IEEE Trans Pattern Anal Mach Intell, 2016, PP(99):1-1.