李梓毓,赵月爱
(太原师范学院 数学与统计学院,山西 晋中 030619)
在计算机视觉领域中有很多研究方向,人脸检测就是其中很重要的一个研究内容.解析人脸信息的第一步就需要检测人脸,因此人脸检测被应用于身份验证、人机交互、安全监测等应用领域[1].基于卷积神经网络(Convolutional Neural Networks,CNN)[2-3]的人脸检测方法比起传统方法,更能够利用人物特性之间的相互协同作用辅助人脸检测,但计算工作量较大,因此,要想将CNN技术更好地运用于处理实际问题,就需要进一步提升网络的检测速度.其中,对网络结构和参数学习的优化计算,是影响人脸检测网络性能关键的原因[4],为了提升网络性能,使用不同的优化算法对应不同的检测网络,就能够在复杂多样的人脸检测网络结构中得到理想的参数权重.因此,人脸检测网络的参数优化就成为了提高网络性能的一个关键方法,近年来学者们也热衷于研究优化算法[5].
在深度学习[6]技术的迅速发展下,随机梯度下降算法(Stochastic Gradient Descent,SGD)[7]是一个基本的优化方法,常被用于处理大量机器学习中的优化问题,而且成效很显著.该算法在每步迭代更新时选择梯度最速下降的方向进行,这个方向是梯度的相反方向.该算法简单、容易实现,但由于样本的选取具有随机性,导致参数的更新方向不稳定,一直“震荡”,从而收敛速度较慢.针对这一缺陷,Ning Qian[8]等人提出了动量(Momentum)算法.该方法引入动量累积系数,将上一迭代步更新后的参数动量加上当前迭代步梯度作为当前的参数更新量,从而缓减了震荡现象,提高了收敛性.RMSProp[9]优化算法采用动量法的思想,并且不再直接累积二阶动量,而是每次迭代计算累积动量平方的指数衰减移动平均值,从而避免动量平方的过度累积,导致学习率越来越小,从而使得训练过程变慢或者提前终止.Diederik P Kingma[10]等人在RMSProp优化算法的基础上提出了自适应动量估计(Adaptive Moment Estimation,Adam)优化算法,该算法易实现、计算速度快、存储要求低.该优化算法利用动量法选择正确的优化方向,利用RMSProp优化算法选择大小合适的学习率.除此之外,该算法还修正了一阶矩和二阶矩的值来动态调整学习率的大小.目前,Adam算法已广泛应用于人脸检测网络中,但是,实际应用时表明,该算法不能收敛到最优值点或者非凸问题中的稳定点.
AMSgrad[11]算法是由Sashank J等人提出的一种对Adam优化算法改进方法,该算法比较上一次迭代过程中的二阶动量累积值与当前迭代步的二阶动量累积值的大小,选择较大的值参与当前参数的更新过程,从而得到优于Adam的效果.但是,AMSgrad只是考虑了学习率过大带来的问题,却并没有考虑学习率变化过小带来的问题,因此,并未从根本上解决Adam算法无法收敛的问题.Liu Yang[12]等人提出了AdaDB算法,给学习率设置了上界和下界,从而提高了实验精度.林文强[13]在Adam算法中引入了动量概念,积累之前的动量取代真正的梯度,并将其用于比例风险模型中,提高了算法的计算速度.虽然以上改进算法都取得了有效的结果,但是,以上改进方法均未在复杂网络中进行实验.
因此,本文针对Adam算法泛化能力差和存在不收敛的问题,提出了一种改进的Adam优化算法,并将其应用于复杂的卷积神经网络—Retinaface[14]人脸检测网络中,在widerface[15]数据集上进行了实验,证实了本文算法的有效性.
本章主要介绍了Retinaface人脸检测网络和Adam优化算法.
Retinaface[14]网络是Jiankang Deng等人2019年提出的,该网络是一种鲁棒且单阶段的人脸检测网络,运用多任务联合额外监督学习与自监督学习,能够像素级地定位[16]到不同大小的人脸.Retinaface网络的结构如图1所示,该网络使用特征金字塔网络FPN[17]检测不同大小的人脸,使用上下文模块SSH[18]加强感受野,从而改善检测效果,最后通过任务联合完成人脸检测.
图1 Retinaface网络结构图
在实际应用的训练过程中,Retinaface网络使用Mobilenetv1[19]和Resnet作为主干特征提取网络进行基础特征提取.在CPU上实现实时检测可以使用Mobilenetv1,要想实现更高精度则可以使用Resnet.
Retinaface网络的人脸特征提取网络,就选取了特征金字塔的五个层级(P2到P6),在这五个层级中,C2到C6是残差连接网络(Residual Network)[17]的输出特征图,C2到C6分别依次进行了自上而下和横向连接计算,就得出了P2到P5.用大小为3×3的卷积核对C5进行步长为2的卷积采样,就得到了P6.在ImageNet-11数据集中,Resnet-512经过预训练的残差层[20]就是C1到C5,“Xavieer”方法[21]被使用来对P6层进行随机初始化.
P2到P6是五个独立的上下文模块,Retinaface网络中使用它们增加感受野的作用域,同时增强鲁棒的上下文语义分割能力.此外,为更完善非刚性的上下文建模能力,将传统上下文模型中的3×3卷积层用可变形卷积网络(Deformable Convolutional Network,DCN)[22]所取代.
Retinaface网络实现的人脸检测和关键点定位效果如图2所示:
图2 Retinaface的检测结果
假设一个有噪声的目标函数ft(θ),其中,θ为参数,t为第t步迭代.Adam优化算法的目的是最小化该目标函数关于θ的期望值[f(θ)].
用
f1(θ),…,fT(θ)
(1)
表示随机函数在后续时间步1,…,T的实现.
使用随机性描述小批量样本函数噪声来减小该函数的期望大小,计算参数为θ的目标函数梯度:
gt=∇θft(θ)
(2)
即ft的第t步参数θ的偏导数向量.
第t步梯度的一阶矩估计向量mt和二阶矩估计向量vt分别为:
mt=β1·mt-1+(1-β1)·gt
(3)
vt=β2·vt-1+(1-β2)·gt2
(4)
(5)
(6)
令一阶矩估计和二阶矩估计的初始值为零,则二阶矩估计向量在第t步迭代的更新表达式为:
(7)
每次迭代都会更新θ的值,θ的更新表达式为:
(8)
其中,α为学习率,表示学习步长;ε为常数,避免分母为零.
在优化算法中设置学习率需要考虑多方面的因素[24].学习率在不同训练时期需设置不同的值,Adam算法的关键技术是在使用自适应梯度的同时确保学习率不会衰减的太快.为了达到这个目的,Adam对梯度和梯度的平方使用指数加权平均,但实际上是对历史梯度的一种累乘,这样做会使得历史梯度以非常快的速度被遗忘.这种情况在稀疏问题中表现最为明显,因为稀疏情况下梯度大多为零.在迭代的初始阶段,由于梯度的一阶动量加速,Adam算法的收敛速度很快,在最优值附近,Adam算法会有大幅度的震荡,表现出极大的不稳定性.
由公式(7)可以得到:
vt=β2·vt-1+(1-β2)·gt2=vt-1-(1-β2)(vt-1-gt2)
(9)
利用梯度二阶矩估计的短期变化量(vt-1-gt2)引入激活函数softsign:
(10)
softsign激活函数把二阶动量的变化系数压缩在区间[-1,1]内.该激活函数以0为中心,输出范围在(-1,1)之间,这有利于加快收敛,抑制学习率的震荡.
Shuo Yang等人制作了widerface[15]人脸数据集,该数据集为常用的人脸检测的基础检测数据集,涉及尺度、光照、姿态、表情和遮挡方面的人脸,共有32 203张图像,并且标注了393 703个人脸,其中,标注的158 989个人脸用于训练集,39 496个用于测试集.训练集和测试集都有三个等级的检测难度:Hard 、Medium和Easy.
本实验选取widerface人脸数据集中的部分数据集进行实验,共提取了17 000张人脸图片,其中训练数据集为13 000张,测试数据集为4 000张.S-Adam与RMSProp和Adam优化算法对应的模型都通过150个epoch训练,每一次epoch都记录损失值.初始化参数β1=0.99,β2=0.999,epoch=100的学习率为0.1,epoch=50的学习率为0.000 1,ε=1×10-8.
本实验训练网络时将其分为两部分,一部分为冻结主干部分,一部分为解冻主干部分,共训练150个epoch,冻结部分每个batch_size的大小为64,解冻部分每个batch_size的大小为32.
图3 训练集下的损失对比
为了验证本文改进优化算法的有效性,将改进算法S-Adam与RMSProp和Adam算法在Retinaface下进行实验比较,并评价各算法的平均精度.实验操作环境采用Pytorch 1.10.2框架,编程语言为python 3.6,框架平台为Pycharm2020,系统在微软的Win10操作系统下实现所有实验.该实验的评价指标使用平均精度(Average Precision,AP),为所有有人脸图片的精确率的平均值.
在widerface数据集中,改进算法、RMSProp和Adam算法的训练损失数据如图3所示.
从图3可知,在widerface对比实验中,本文提出的S-Adam算法的训练损失的收敛速度要明显快于RMSProp算法与Adam算法.RMSProp算法的收敛效果和收敛速度都明显较差,尤其是收敛效果,在epoch=100的时候,由于手动调整了学习率才使得损失明显下降,趋于最优值,但是在epoch=150的时候依然未达到最小值.Adam算法的收敛过程也表现出了不稳定性,在epoch=100的时候明显出现了大幅动震荡,然而S-Adam算法一直保持稳定趋势,并且在epoch=30左右就已经趋于稳定,达到最小值了.
对应优化算法的人脸检测AP值如表1所示.
表1 测试集下的精确度对比
从表1中可以看出,在widerface数据集中,S-Adam优化算法的AP值在Easy、Medium和Hard三种不同类别下的效果都强于RMSProp算法和Adam算法.与RMSProp算法比较,在Easy的数据集中AP值提高了5.45×10-2,在Medium的数据集中AP值提高了4.99×10-2,在Hard的数据集中AP值提高了10.81×10-2,效果特别明显.但是本文改进算法与Adam算法比较,在Easy数据集中表现不突出,AP值仅提高了1.52×10-2,但是在Medium和Hard的数据集上效果很好,AP值分别提高了2.38×10-2和5.83×10-2.通过实验数据,表明了S-Adam算法的有效性.
针对Retinaface人脸检测网络应用Adam优化算法对人脸进行分类时存在的收敛性较差、迭代曲线震荡剧烈等问题,提出了一种改进的Adam优化方法.该方法利用激活函数softsign的取值范围是(-1,1),从而缓减了震荡,使损失函数尽快达到局部最优值.实验结果表明,改进算法确实提高了Retinaface人脸检测网络在widerface数据集下的平均精确度,与RMSProp算法和Adam算法相比,加快了收敛速度,增加了算法的稳定性.但该改进算法仍然存在不足,并未降低损失函数的损失值,且本文实验只在一个网络中进行,接下来的工作将进一步运用于不同网络中进行实验测试.