王雪冰,姜道义,张海洋
(中国石油大学胜利学院 基础科学学院,山东 东营 257061)
从1958年感知器提出后,人们对于神经网络的探索进入一个新的时代。但是感知器只能进行线性分类,不能应用于复杂的模式识别领域。1985年BP(back propagation)神经网络的提出,系统解决了多层神经网络隐含层连接权中的学习问题。但是在文字识别方面都没有取得突破性的进展,直到第一个二维卷积神经网络SIANN的出现才真正打开神经网络在图像识别领域的大门。文字识别的基本原理为将输入文字与经神经网络训练的模型进行模式匹配,计算类似度,将具有最大类似度的文字作为识别结果[1]。计算机视觉在手写数字识别中第一个取得巨大成就的是Yann LC等(1998)提出的LeNet-1卷积神经网络系统,包含了两个卷基层、两个全连接层、六万个学习参数。
人工神经网络的发明起源于生物神经网络,是一种模仿生物神经网络结构及功能的数学模型和计算模型,可以根据外界的输入信息改变内部神经节点的参数,具备学习功能。
人工神经网络中由大量神经元相连接,能够模仿人脑的信息处理功能对高复杂性信息进行处理,同时可以抽象出同类信息的模型,对新接收的信息进行分类。
第一个卷积神经网络是由Alexander W等(1987)提出的时间延迟网络(time delay meural network, TDNN),主要应用于语音识别。Yann LC等(1998)提出的LeNet-5,实现手写字体识别的功能,并且定义了现代卷积神经网络的基本结构。CNN结构包括采样层与卷积层,两者交替而成[2]。
卷积神经网络属于前馈型神经网络,具有平移旋转不变性,所以非常适合图片识别,能够将不同方向的文字图像准确地识别出来。使用卷积神经网络进行识别的处理过程包括输入、预处理、识别和后处理几个过程[3]。
卷积神经网络主要包含输入层、卷积层层、Inception模块、全连接层、输出层。输入层可以输入多维数据,卷积层中包含卷积层和池化层,是进行计算的主要部分,全连接层竞争对输出的响应机会,输出层由逻辑函数输出分类标签。
将需要识别的单字图像输入神经网络,大小为64×64像素的灰度文字图片,文字颜色为白色,文字背景为黑色。
64×64对应着神经网络初始计算时图像矩阵的大小;使用灰度图是因为文字的表示不需要过多的参数,过多的颜色便会增加过多的影响因素,而灰度图只有一个0~255的色阶,大大降低了颜色给文字识别带来的困难;本试验只做文字的识别,所以在前期处理图像时只将图片中的文字凸显出来,而其他的因素归为噪声全部被过滤。
隐藏层由3个卷积层和3个池化层交替组成,负责对图片进行网络计算分析。
第一层卷积层使用64个5×5的卷积核对输入的64×64像素的图像进行卷积运算,设输入的图片矩阵为A,并使用ai,j(i=0,1,…,63;j=0,1,…,63)表示A中的对应元素;设由第一层卷积层输出的矩阵为B,并使用bi,j(i=0,1,…,59;j=0,1,…,59)表示经历本次卷积输出B的元素,由卷积的运算公式将A经运算转换为B,输入层和输出层的各参数如表1所示,
(1)
表1 第一层卷积尺寸计算
第一层池化层使用64个2×2的池化器对第一层卷积层输出的60×60像素的图像进行最大池化运算,输入的是由第一层卷积后的矩阵B,设由第一层池化层输出的矩阵为C,并使用Ci,j(i=0,1,…,29;j=0,1,…,29)表示经历本次卷积输出的元素。使用最大池化运算公式将计算第一次池化结果,
ci,j=max(bi+m,j+n),m=0,1;n=0,1.
(2)
池化运算各参数如表2所示。第二层卷积层使用128个5×5的卷积核对第一层池化层输出的30×30像素的图像进行卷积运算,第二层池化层使用128个2×2的池化器对第二层卷积层输出的26×26像素的图像进行最大池化运算,第三层卷积层使用256个4×4的卷积核对输入的13×13像素的图像进行卷积运算,第三层池化层使用256个2×2的池化器对第三层卷积层输出的10×10像素的图像进行最大池化运算。
表2 第二层池化尺寸计算
接收由隐藏层输出的参数,并且通过ReLU函数计算神经元的兴奋度。
激活函数公式为
(3)
激活函数图像[4]如图1所示。
图1 激活函数
由图1可以看出ReLU函数是分段函数,把小于零的部分映射成为零,大于零的部分保持不变,这样为单向抑制函数。
输出层一共有3 755个结点,分别对应3 755个汉字,通过分析全连接层输入的兴奋度,输出识别出的相应汉字。
3.1.1 数据集的分类
数据集包含3 755个常用汉字,每个汉字有60张不同方向并且汉字大小不一的灰度图,每张图片大小为64×64像素。数据集又分为训练集和测试集,训练集由48张图片组成,测试集由12张图片组成。每张图片以.jpg形式存储,图片像素点为汉字笔画则其像素为0像素值,背景图部分为255像素值。
3.1.2 数据集的生成
数据集由自定义生成模块生成,在生成模块中可自动读取不同字体的TTF文件来确定生成的字体类型,还可自定义生成数据集图片的宽度、高度。并且默认每种字体下,每个字的数据图片共生成不同的30张,这个生成数量限制为每个字最多45张。
每个汉字数据集图片的数量可通过增加TTF字体文件个数来解决,本试验默认使用方正宋体和黑体来建立数据集。
图像去噪是文字识别必不可少的环节,在此环节中需要将待识别图像(图2)转化为计算机易于处理形式,并消除与识别内容无关的噪点(水印)。
文字识别的图像不需要保留RGB颜色特征,灰度图像即可以完整显示文字特征,又能降低计算难度。在对图片进行灰化处理的过程中,还需对颜色进行反转,目的是使文字的颜色为浅色,背景为深色(图3)。
图2 待识别的文字图像
图3 二值化后的文字图像
将图片转化为灰度图以后,需要对图像进行去燥处理。因为截取的图片是文档,所以不存在光线对文字色泽的影响,而图片中以文字的浅色为主。灰化完成后,需要对图片进行二值化处理,二值化的目的就是去除灰度处理后图像残存的模糊背景[5]。可以先对小于125以下的色阶进行计数,然后取数量对多的色阶为峰值,并向右取大于峰值百分之十的数值k为整个图片进行分化的界限。以灰度像素值k为分界线,大于k的像素值转化为255,小于k像素值转化为0,此处理目的是增强图像的对比度并且去除图像噪声对识别的影响(图4)。
图4 去燥后的文字图像
(4)
M′=MG(gi∈G,gi=1).
(5)
借用光伏识别理论将图片进行二值化,因为二值化后的图像每个像素只包含一个灰度值,可以将图片按照公式(4)转化为二维矩阵M。
对矩阵依照求和公式(5)进行按行求和,因为含有汉字笔画的每一行求和后的数值均不为零,只需确定映射后不为零的行便可以将图片中每一行的汉字提取出来(图5)。
同理每一行中也可以按照以上方法提取出单个文字(图6)。但是有些汉字是左右结构,可能将一个字分成左右两个汉字,需进一步判断文字是否被分割成两个。
如图7所示,已经识别出需要分割的文字,但是可看出“别”字、“门”字被分割为两个汉字,识别完后需要对分割出的字符进一步确认。取识别后行高的中位数为ptModeY,取识别后字宽的中位数为ptModeX。如果分割出图片的宽度值比ptModeX大于20%,则将分割的结果舍弃;如果分割出图片的宽度值不小于ptModeX的75%,则判断此次分割正确,存储分割后文字;如果分割出的图片以及它之后图片的宽度值的和小于ptModeX,则判断这两个分割图片为一个字,并进行储存。
图5 提取行的文字图像
图6 识别出的文字
切割完的文字大小与输入层需要的大小不一,需要经过归一化处理。归一化处理分为位置归一化处理和大小归一化,位置归一化处理需要将文字的位置定位于图片的中间,大小归一化处理需要将图像大小存储为64×64像素[6]。
特征提取是文字识别中最根本的一步,利用建立的卷积神经网络对分割后的单字图片做特征值提取,对已有的模型进行比对,识别出文字的结果(图7)。
图7 文字识别结果
(1)基于卷积神经网络的汉字识别在常规理论条件下,准确率较高。但是本试验针对数据集中每种文字图片取样数据偏少,图片质量偏差的特殊情况,通过增加不同字体以增加数据集的方法研究,进一步优化识别的准确率和系统能力。
(2)文字的分割也是影响文字识别的重要因素,使用映射函数可以将排序整齐的文字切割,但对于多种复杂的情况却束手无策。将识别-分割进行结合,针对识别相识度低,通过再将此部分文字进行组合识别模型构建研究,从而优化文字识别的等级。