余骁禹,周宇婷
(1.西南民族大学计算机科学与工程学院,四川 成都 610041;2.西南交通大学计算机与人工智能学院,四川 成都 611756)
当今时代,互联网的广泛使用让个人信息泄露问题变得日益严重,传统的身份证号码、密码等身份认证[1]方式的安全性能逐渐不能满足社会需求,许多情况下需要安全性能更高的身份认证方式.研究者们早已开始探索将生物识别技术[2]用作身份认证,凭借生物特征[1]的稳定性、唯一性,这种方式的安全性能比传统身份认证方式的安全性能高.在众多的生物特征中,签名的采集方式不仅简单,而且不具侵犯性、容易被大众接受,所以签名鉴别这种验证方式是值得发展和研究的.人工签名鉴别从很早之前就开始发展了,但是人工签名鉴别对鉴别者的资历要求较高,存在耗费人力物力、鉴别效率低、缺乏鉴别专家等缺点,利用计算机技术实现签名鉴别为解决这些问题提供了新的思路.
与计算机技术相结合的签名鉴别可分为在线签名鉴别和离线签名鉴别.其中在线签名鉴别需要使用特殊设备(例如手写板、签字笔等)采集签名时的动态数据(例如握笔角度、笔画书写顺序、书写压力、书写加速度等).而离线签名鉴别只通过静态的签名图片进行判断,静态签名图片相比动态数据更容易被模仿,所以离线签名鉴别的难度较大,虽然已经取得一些成果了,但尚未达到投入实际应用的水平,准确率还需进一步提高.M.Ammar[3]通过计算从签名图像中提取出的灰度[4]特征、倾斜特征等特征之间的最小距离来判断签名的真伪,这种方法能成功鉴别出一些高水平的伪造签名.武汉科技大学的张立[5]根据从灰度签名图像中提取的SIFT特征的匹配点数来判断签名真伪,这种鉴别方式的准确率达到88.5%.华中科技大学的周凯[6]将从签名轮廓中提取出的骨架分段轨迹特征作为签名图像的特征,放入BP神经网络中进行分类,该方法达到了较高的准确率.Bhattacharya和Ghosh使用像素匹配技术[7]对比签名图像之间的异同,该技术对于伪签名的错误识别率在12%.
这些方法大多数需要依靠研究者从自身经验出发根据签名的特点人为地提取和选择合适的特征,然后再进行特征匹配或分类,这就可能会出现人为提取和选择的特征不是最具有代表性特征的问题,这也是离线签名系统需要突破和解决的问题.为了避免特征选择不合适的问题,本文选择使用人工神经网络自行学习并提取合适的签名特征.
One-shot学习[8]是指机器通过一次演示后无需事先掌握新的环境,便能在不同环境中重复工作的能力.One-shot学习通常被用于处理计算机视觉领域中的分类问题,旨在能够根据一个或几个样例图像来判断某个对象所属的类别.一般的人工神经网络通常是从大量的高维数据中学习挖掘数据的信息特征的方法,然后利用习得的这种方法去分析处理其他类似的数据,这都是建立在需要提供大量带有标记的训练样本的基础上.但很多时候无法获得满足实验需求的足量训练样本,所以需要使机器也能具有根据少量样本进行高效学习的能力,即实现One-shot学习.
本文的离线签名鉴别预期达到的效果是只需要通过一张样例真迹签名图片就能识别某张签名图片是否是伪造的.如果将其看作图片的二分类(分为真迹和伪造两个种类)问题,使用传统的卷积神经网络结合softmax逻辑回归分类器的结构去实现,则得到的模型无法达到预期效果,它只能对训练数据中的那些模仿者模仿的签名进行较准确的分类,对于没有训练过的模仿者所模仿的签名的分类准确率就很不稳定,即会出现严重的过拟合现象,并且由于不可能采集到所有人针对某个人的模仿签名,所以无法通过获得足够多的数据来降低过拟合.为了解决上述问题,使模型能够做到One-shot学习,本文的主要思路是构建一个“相似性”函数,即最终训练出的模型相当于函数:d(img1,img2)=两张图片的特征距离值,只要输入两张图片就可以得到这两张图片的特征距离值,并且如果两张图片是出自同一个书写者,则函数值d要尽可能小;如果不是出自同一个书写者,则函数值d要尽可能大.最终根据表达式(1)来判定某个签名是否是伪造的,其中τ表示区分签名真伪的特征距离阈值.当模型需要鉴别一个没有经过训练的书写者的签名时,只需将待测签名和书写者的一张亲笔签名同时输入模型,就可以得到两张签名图片之间的特征距离,通过特征距离来判断待测签名是否是亲笔签名.
人工神经网络[9]是根据心理学、脑神经等领域对人类的认知机理和脑结构方面的研究成果使用计算机的简单运算单元人工搭建起的能模拟大脑神经系统的计算模型,这种模型在功能和结构方面仿造了生物学的神经系统.人工神经网络对类脑计算研究领域的发展与进步起着非常重要的作用.从科学家们开始研究神经网络到现在已经诞生了许多经典的网络模型,其中包括M-P神经元模型、感知机等[9],这些模型在很多计算机技术领域中得到实际应用.人工神经网络的基本处理单元是神经元.一个神经元可以有一个或多个输入、输出,一个神经元可以看作是一个最简单的神经网络,复杂的神经网络就是由多个神经元堆叠起来形成的.
目前,应用较为广泛的一种人工神经网络是卷积神经网络(CNN),它也是首个真正被成功训练的人工神经网络[9].卷积神经网络的雏形是科学家Fukushima根据Hubel和Wiesel对猫脑视觉皮层的研究发现提出的神经认知机[11].卷积神经网络由输入层、卷积层、池化层、全连接层、输出层组成[10].卷积层与池化层的核心操作分别是卷积运算和池化运算.通常会有若干个卷积层和池化层交替出现,用于提取出抽象性较高、较为稳定的图像特征.全连接层是卷积神经网络中特征提取的最后一层,出现在输出层的前面、卷积层和池化层的后面,它的输出值会传递给输出层.全连接层每个神经元与前一层的每个神经元连接,会对前面已经提取出的特定范围的特征进行整合.输出层需要根据最终提取出的特征采用合适的方法完成分类等任务.
为了实现One-shot学习,本文选择使用共享权值的Siamese神经网络的结构来构建模型.Siamese神经网络是一种相似性度量法,它的原理是使用指定规则(相当于一个函数)将两个输入分别转换成表示各自特点的特征向量,然后再使用距离公式计算这两个特征向量的距离,即进行相似度对比,结构如图1所示.从图中可以看出Siamese神经网络的输入不是单个样本,而是一对样本.图中X1和X2代表两个不同的输入,两个输入会分别经过分支网络1和分支网络2进行特征提取,本文的两个分支网络是两个结构、参数完全一致的卷积神经网络,它们共享权值W,这两个分支网络即为前文提到的将输入映射到目标空间的函数Gw(X),X1和X2可看作是映射函数Gw(X)的两个输入变量,那么Gw(X1)和Gw(X2)则分别表示通过函数Gw(X)映射出来的特征向量,‖Gw(X1)-Gw(X2)‖表示两个特征向量之间的距离,距离的大小即为两者相似性的度量.整个训练Siamese神经网络的过程就是去寻找并不断优化一组权重值W,最终达到以下效果:当X1和X2来自相同类别时,Ew(X1,X2)=‖Gw(X1)-Gw(X2)‖的值尽可能地小,当X1和X2来自不相同的类别时,Ew(X1,X2)=‖Gw(X1)-Gw(X2)‖的值尽可能地大.
图1 Siamese网络结构示意图Fig.1 Schematic diagram of Siamese network structure
本文针对Siamese神经网络所采用的损失函数是对比损失函数[9,13](Contrastive Loss),对比损失函数可以有效地处理Siamese神经网络中一对输入样本的关系,如表达式(2)所示.其中,W为神经网络的权重参数;Y为两个样本是否匹配的标签(Y=1表示匹配,Y=0表示不匹配);m为设定的阈值.
对比损失函数既能恰当地表示两个样本的匹配程度,又能在训练模型的过程中对模型的性能做出较为直观的评价:根据表达式(2)可知,当Y=1(即样本对匹配)时,只有当匹配样本对之间的距离变小,损失函数L的值才会变小;而当Y=0(即样本对不匹配)时,只有当不匹配样本对之间的距离变大,损失函数L的值才会变小.损失函数L是对模型性能的评估,L的值在变小说明模型性能在变好.由此可见,该损失函数起到了评估Siamese神经网络模型性能的作用.
将整理好的签名图片按照以下方式组合成数据:对于每位书写者,将其24张真迹签名图片两两配对组合,则有276条标签值为1的样本数据;再将24张真迹签名图片和12张伪造签名图片两两配对组合,则有24×12=288条标签值为0的样本数据.为了避免不同标签值的训练数据数量分布不均对实验结果造成影响,整个样本数据集就由每位书写者的276条标签值为1和276条标签值为0的数据组成.实验将整个样本集划分成三部分:训练数据集、验证数据集、测试数据集,三个数据集包含的数据互不重复.训练数据集包含40位书写者,验证数据集包含5位书写者,测试数据集包含5位书写者,具体情况见表1.
表1 数据划分情况Table 1 The division of data sets
本文使用的数据是从SigComp2011[14]的Dutch离线签名数据集中整理出来的.原始数据集中存在个别数据缺失的情况,经过整理筛选后可用于实验的数据组成如下:共有50位书写者,每位书写者有24张亲笔签名图片、12张模仿水平较高的伪造签名图片.
因为Siamese神经网络需要成对的输入数据,所以需要将这些签名图片数据进行两两组合制造出符合要求的正负样本数据,数据格式为“签名图片1路径 签名图片2路径 标签值”(以空格间隔),其中标签值为1或者0,1表示两张图片都是真迹签名,0表示一张图片是真迹签名,另一张是伪造签名.
为了使神经网络能够更精确地提取签名图片的特征,尽量避免噪声或像素冗余问题对实验造成干扰,本文需要对所有输入神经网络模型的签名图片进行预处理,其主要处理方法包括:图片灰度化、去除背景、裁剪边界.
图片灰度化是将原本有RGB三色通道的彩色图片转化成只有一个通道的灰度图片,它的每个像素点用0~255的灰度值表示,如图2所示.
图2 签名灰度化预处理图Fig.2 Preprocessing picture of graying signatures
去除背景所要达到的效果是将已经灰度化的签名图片中除了笔画轨迹之外的像素点的灰度值全部置为255,即将背景变为白色,而笔画轨迹的像素点的灰度值保持不变,避免背景的噪声让实验结果产生过拟合的情况,如图3所示.其原理如计算公式(3)所示,其中src(i,j)表示签名图片坐标系中位置(i,j)处的去除背景之前像素点的灰度值,dst(i,j)表示去除背景之后的像素点的灰度值.
图3 签名去除背景预处理图Fig.3 Preprocessing picture of removing background of signatures
灰度阈值t的选取可以根据情况使用固定值,但前提是所有签名图片的背景和字迹的灰度值相似,所以为了使去除背景的操作更具普遍性,本文使用了最大类间方差法[15](OSTU)寻找每张图片的最优灰度阈值t.最大类间方差法又称为大津阈值分割法,是一种自适应地确定图像全局阈值的最佳方法,使用此方法可以快速找到不同签名图片的最优灰度阈值.
裁剪边界是指将图片的多余的空白边界去除掉,如图4所示.裁剪边界的目的是尽量最大化签名图片中笔迹特征的占比.多余的边界会降低笔画轨迹占整张图片的比值,在模型提取特征时不但没有用反而会影响训练和验证的时间,去除空白冗余的信息可以提高实验效率,并且提取的特征也会更加精确.
图4 签名裁剪边界预处理图Fig.4 Preprocessing picture of trimming margin of signatures
本文根据需求搭建的实验模型如图5所示.此模型先对签名图片进行预处理,然后将预处理后的图片作为Siamese神经网络的两个输入,经过卷积神经网络部分后得到各自的特征向量,然后用欧式距离计算两张签名图片特征向量之间的距离,最后用对比损失函数(Contrastive Loss)对模型的性能进行反馈和评估.
图5 模型流程图Fig.5 Flow-process diagram of model
本课题模型分支部分的结构是基于AlexNet卷积神经网络进行改进的,具体参数如表2所示,它由4个卷积层(Convolution)、3个最大池化层(Max Pooling)、2个Batch Normalization层、2个全连接层(Fully Connected)组成.其中,卷积层和最大池化层的规格是指卷积核和池化核的大小,用N×H×W的形式表示,其中N表示卷积核和池化核的个数,H表示卷积核和池化核的高度,W表示卷积核和池化核的宽度,stride表示卷积和池化的步长,pad表示对图片进行边缘填充的行列数.Batch Normalization层可以将隐藏层的所有节点的激活输入分布归一化到标准正态分布,它的参数ε表示一个极小的正常量值,避免在标准化过程中除数变为0.此模型所使用的激活函数是线性纠正函数(ReLU).为了降低模型的过拟合情况,还使用了随机失活(Dropout)正则化和L2(权重衰减)正则化方法,p表示Dropout将隐藏节点置为0的概率,λ表示L2(权重衰减)正则化系数.两个全连接层包含的神经元个数分别为1 024个和128个.
表2 卷积神经网络的结构Table 2 The structure of Convolutional neural network
本实验使用学习率lr=10-4、动量momentum=0.9的RMSprop梯度下降的方法训练20次(epoch),每次(epoch)训练以128为一个批次(mini batch),模型权重初始化方法采用的是Glorot均匀分布初始化方法.最终,使用基于Tensorflow的Keras深度学习框架花费了十几个小时对22 080条训练数据进行训练,模型训练过程中loss曲线变化如图6所示.图中,红线表示训练集的损失值,蓝线表示验证集的损失值.损失值随着训练次数的增加不断下降,最终训练集损失值非常接近于0,验证集损失值稳定在0.1左右,得到了一个性能较好的模型.
图6 模型训练过程中的loss曲线图Fig.6 Line chart of loss during training model
正确率曲线变化如图7所示.图中,红线表示训练集的正确率,蓝线表示验证集的正确率.正确率随着训练次数地增加不断上升,最终训练集的正确率非常接近100%,验证集地正确率稳定在90%以上,此时是以0.5为最优距离阈值得出的结果.
图7 模型训练过程中的正确率曲线图Fig.7 Line chart of accuracy during training model
模型训练好之后,还需要用这个模型对2 760条测试数据进行预测,其正确率的计算方法是:以0.01的步长寻找使签名鉴别结果正确率最大的距离阈值,将这个阈值的正确率作为测试集的预测正确率.本实验测试集以0.58为距离阈值时可得到最高正确率97%.
本次实验通过查阅大量文献资料,尝试不同的神经网络结构,调试神经网络的参数,使用公开数据集的Dutch(荷兰语)离线签名数据集训练出了准确率较为令人满意的模型.
由于离线签名鉴别需要做到One-shot学习,而传统的图片分类的神经网络模型只能鉴别出训练过的书写者的真假签名,每新增加一个书写者就需要重新训练神经网络,因此传统的图片分类模型对于签名鉴别课题没有实用性.本课题最终采用的Siamese神经网络结构充分利用共享权值的特点,可同时对两张图片做卷积特征提取操作并做相似度对比,使模型具有较好的泛化能力,对没有训练过的签名也可达到较高的鉴别准确率.
但是如果想要将此模型投入实际应用,还需继续提高模型的准确率和鲁棒性.一方面可以扩大数据量.由于公共签名数据集较少,而采集和整理大量签名需耗费许多人力、时间,所以此次课题研究训练模型所用的数据量还远远不够,扩大数据量可以提高模型的泛化能力和准确率.或者也可以尝试继续改善模型的结构、优化模型的各层超参数,看是否能找到更加稳健的模型.另一方面可以优化对签名图片的预处理.本课题所使用的数据集都是统一规范采集的,但实际应用中签名的颜色、签字笔的粗细、纸张等因素都可能会对鉴别结果造成影响,所以如何能做到尽量去除图片中不必要的冗余信息又最大限度地保留签名本身的特征是需要继续探索问题.