岳 杰 赵 祯
(河北建筑工程学院,河北 张家口 075000)
计算机视觉领域中,通常将卷积神经网络(CNN)作为图像的特征提取模型.CNN具有良好的平移不变性,能够结合不同的特征、较好的泛化到不同的空间位置,但与人类的感知方式相比存在很大的差异.CNN对于平移具有一定鲁棒性,但对旋转、缩放一类的视角变换处理效果不佳.为弥补这一缺点,训练数据需要进行一系列的预处理,增强数据集多样性,提高模型视角变换方面的泛化能力.典型的卷积神经网络,由于其池化层的影响,其特征表征的空间信息会丢失.随着计算机视觉的发展,急需一种不丢失空间信息,有效监测感受野中局部特征的神经网络模型来代替CNN.
Hinton及其实验团队首先提出了将胶囊网络[9]作为CNN的替代品.胶囊网络以矢量作为网络的神经元,以矢量的模长表示激活概率,用矢量的方向记录特征的姿势位置信息.由于CNN无法识别图像的姿态、变形或部分图像.CNN中的pooling操作在图像中也失去了一些空间特征.因此,需要大量的训练数据来弥补这一损失.与胶囊网络相比,它们的训练时间更长,部分原因是CNN深度深,而胶囊网络宽度深,同时参数较少[8].CNN更容易受到敌对攻击,如像素扰动,导致错误的分类.由于CNN具有最大池化pooling,所以图像重构比胶囊网络中的重构要求更高.
本文将胶囊网络(Capsule Networks)扩展到成对学习装置,针对传统孪生神经网络中CNN作为子网络所存在的不足,用胶囊神经网络代替CNN,将孪生神经网络与胶囊网络相结合构建孪生胶囊网络,实验表明该模型能够弥补CNN的不足并能够出色完成相似度度量任务.
孪生神经网络(Siamese Network)由一对权值共享的子网络构成,从成对的输入中对比学习样本的特征表征.不同于传统分类模型,孪生神经网络需要成对的输入,从中学习两者的异同特征(正样本共有特征,负样本独有特征),通过对比损失函数调整网络参数,学习相似度的度量尺度.孪生神经网络可广泛用于签名验证[1]、人脸识别等领域.
2010年Hinton在ICML上发表了文章《Rectified Linear Units Improve Restricted Boltzmann Machines》[2],该文章使用孪生神经网络来完成人脸识别任务,且精准度较高.其原理是输入两个人脸图像到网络,进行特征提取,通过特征向量间的欧式距离确定两张人脸是否相似.2015年CVPR的一篇关于图像相似度计算的文章:《Learning to Compare Image Patches via Convolutional Neural Networks》[3],该文章对孪生神经网络的算法进行了改进,改进后的网络模型具有更优的性能.孪生神经网络在人脸识别领域被广泛应用,其对光照变化和遮挡等表现出了很强的鲁棒性.徐先峰等人[4](2020)指出,在实际应用中,识别对象往往客观存在着光照、表情、姿态和遮挡等复杂干扰,导致人脸识别较为困难,为了更好地对外界干扰鲁棒,提高数据集的处理速度并解决由于数据集较少而导致的过拟合等问题[5],他们在深度学习理论基础上,提出了一种引入感知模型[6]的改进孪生卷积神经网络结构,并对整个训练过程辅以循环学习率策略优化算法[7],降低外界噪声干扰、提高网络学习能力地同时使得寻找最优学习率变得容易、提升网络性能,有效的实现了非限定性条件下的人脸识别.
1.1.1 网络结构概述
孪生网络结构示意图如图1所示.该模型同时输入两张图片X1和X2,两张图片经过一对权值共享的神经网络Gw,得到一对映射到高纬度空间的特征向量Gw(X1)和Gw(X2),计算得到两特征向量间的欧氏距离Ew,以Ew的数值大小度量两输入图片间的相似度.
图1 孪生网络结构示意图
1.1.2 对比损失函数
在孪生神经网络中,以比损失函数(Contrastive Loss function)为损失函数,其表达式为:
(1)
公式1中,d为图1-1中Ew,即两输入样本经由胶囊网络输出的特征向量的欧式距离;y为两个输入是正负样本的判断标签,y=1代表两个样本为正样本,y=0则代表为负样本;margin是设定的阈值,表示只考虑欧氏距离在0到margin之间的,超出的将其loss视为0.
胶囊网络是一种以神经元向量为单位的神经网络.不同于以往的以标量为个体神经元的神经网络,胶囊网络将一组标量神经元组合成向量,以向量为神经网络的基本单位.向较于标量,向量记录的信息更加丰富,有效弥补了诸如CNN网络中池化操作所带来的空间信息丢失等问题.
1.2.1 网络结构
胶囊神经网络可划分为五个部分,首先是常见的输入层,用来输入图像;然后是一个卷积层,用来提取图像的底层特征;之后是主胶囊层(PrimaryCaps)和数字胶囊层(DigitCaps),主胶囊层将上一层卷积层提取到的特征图展平成一维,然后对应位置合并,组成一个个的胶囊,数字胶囊层主要通过动态路由来实现胶囊间的连接和参数更新;最后是输出层,输出的是向量,该向量对于输入图片有一定的表征作用,向量的模长表示特征存在的概率,模值越大,属于该类的概率越高.胶囊网络的网络结构如图2所示.
图2 胶囊网络结构示意图
1.2.2 动态路由算法
胶囊网络层级之间通过动态路由算法进行连接,算法流程如图3所示.
图3 动态路由算法示意图
表1 动态路由伪代码
孪生胶囊网络的思想是构造一个结合孪生网络和胶囊网络的新型网络模型,以这样的方式胶囊网络的等变性的性质被合并到孪生胶囊网络上相较于以CNN为子网络的传统孪生网络,孪生胶囊网络继承了胶囊网络参数少,空间信息保留完整的优点[10].
图4 孪生胶囊网络结构示意图
本实验构造了一个包含3个隐藏层的孪生胶囊网络,如图4所示.输入层输入两张256*256*1的人脸图片,经由一对参数共享的胶囊网络,得到一对16*10的特征向量,将特征向量展平,对比两特征向量的欧式距离,作为衡量两输入人脸图片的相似度程度.
本实验所所构造的孪生胶囊网络网络层参数如表2所示:
表2 孪生胶囊网络网络参数
本实验所构造的孪生胶囊网络模型以对比损失(Contrastive Loss)为损失函数,在实验过程中,发现对于使用孪生网络方式反向传播更新的网络模型,原胶囊网络后端的全连接层将胶囊网络的视角变换鲁棒性弱化了,故而本模型将胶囊网络后端的全连接层取消,极大限度的保存了胶囊网络的优点,且网络参数更少.
本文使用公开的人脸数据集ORL进行实验.ORL数据集包含40个类别,每个类别包含同一个人的10张人脸图片,每张图片尺寸为92x112(本实验中转化为256x256).本实验将40个类别中的35个类别作为训练数据,其他5个类别为测试数据,避免测试集与训练集重合实验结果的影响.数据集图片样例如图5所示.
图5 数据集样例
实验以pytorch框架为基本构建,数据预处理方面对训练数据只进行resize操作,训练参数设置方面batchsize设为64,胶囊间的动态路由迭代次数设为3,epoch设为4000,学习率设为0.001.以同一文件夹下图片为正样本,不同文件夹下图片为负样本,训练时选取的正负样本比例为1:1.训练过程中的loss变化如图6所示.
图6 loss变化曲线图
训练完成后,测试样例如下图示.
图7 实验结果
图7中有4组测试结果,每组由两张对比图片和不相似度(Dissimilarty)构成.不相似度越大,两图片相似度越低,反之相似度越高.实验呈现结果与预期一致.
实验表明,孪生胶囊网络在仅使用少量数据进行学习时依旧表现良好,能够较好完成图像相似度度量任务,但其由于胶囊间动态路由的存在,在训练方面,时间成本略高.提高其训练速度会是推进胶囊网络发展的一个主要方向.