基金项目:国家自然科学基金(61572409,61402386,61571188); 福建省2011协同创新中心项目(闽教科〔2015〕75号)
通信作者:ssz@xmu.edu.cn
(School of Information Science and Engineering,Xiamen University,Xiamen 361005,China)
face detection; station ticket barriers; re-training; aggregate channel feature model
DOI: 10.6043/j.issn.0438-0479.201611020
卡口场景下的人脸检测是视频智能监控的关键技术.然而,由于不同的人脸数据集的样本分布之间存在差异,在现有公开数据集上训练得到的人脸检测模型在卡口场景下难以取得令人满意的效果.为了解决上述问题,构建了一个卡口场景下的人脸数据集,并提出了一种简单且有效的模型重训练方法.该重训练方法能在模型检测人脸时,自适应地选取新的训练样本进行模型的重训练.在卡口场景测试集上的实验结果表明,该重训练方法能明显降低聚合通道特征模型的平均漏检率.
Face detection,in videos of passengers going through station ticket barriers,is a fundamental step of the intelligent video surveillance.However,since face data from different datasets follow different distributions,models trained on public-face benchmarks fail to obtain satisfying results in the scene of station ticket barriers.To solve this problem,we first construct our own face dataset in this special scene,and then propose a simple and effective re-training strategy.This strategy self-adaptively selects new samples to retrain a new model when a model is detecting faces.Experiments on test set from the scene of ticket barriers show that this strategy significantly reduces the log-average miss rate of aggregate channel feature model,demonstrating the effectiveness of our re-training approach.
人脸检测技术作为许多应用(如人脸识别、视频监控等)的关键技术,在过去20年里得到了广泛关注和长足发展.当前的人脸检测方法在常用公开数据集(如FDDB、AFLW等)上已经达到极高的精度,并在速度上实现了实时检测.但受光照条件、姿态、表情等因素的影响,卡口场景下的人脸呈现出与公开数据集中的人脸样本很不一样的表观.这导致直接将在公开数据集上训练得到的模型应用于卡口场景时,往往不能取得令人满意的效果.
Viola-Jones人脸检测器[1]是首个实时的人脸检测模型,它使得人脸检测技术在实际中得到了广泛应用.该模型是基于Haar特征训练得到的一个级联自适应增强算法(AdaBoost)分类器.然而其在许多场景下的性能并不理想,因此基于该模型衍生出了多种改进方法.其中一类改进方法致力于使用表达能力更强的特征,如局部二值特征[2]、梯度方向直方图[3]、加速鲁棒特征(speed up robust feature,SURF)[4]等.使用这类更具判别力的特征能有效提高模型的检测精度,但却会因为计算复杂度的增加而导致模型检测速度的下降.另一类改进方法着重研究性能更优的分类算法,比如:链式提升算法(boosting)[5]和嵌套boosting[6]利用旧分类器已经学习到的知识训练新分类器; 联合级联(joint cascade)[7]在同一个级联结构中交替进行人脸检测和人脸关键点标定,用人脸对齐来辅助人脸检测; 软级联(soft cascade)[8]只用单个的AdaBoost进行分类,并在每个弱分类器上设置退出条件,以实现训练时的高效率和检测时快速抛弃负窗口.此外,由于近年来基于深度学习的方法的卓越表现,结合传统的AdaBoost和神经网络的方法也获得了一定的关注[9].
在卡口场景下,现有模型中,聚合通道特征(aggregate channel feature,ACF)模型[10]在检测精度和效率上的表现都优于其他大部分模型.ACF特征融合了图像的颜色和梯度信息.基于ACF学到的分类器是一个多决策树级联的Soft Cascade分类器.然而,公开数据集上训练的ACF模型在卡口场景下仍未达到实际所需的精度.因此,本研究提出了一种在卡口场景下重训练该模型的方法,即在应用模型时迭代地自适应挑选正、负样本更新训练集,并重新学习一个分类器,并通过实验充分验证了该方法的有效性.
首先收集车站里行人通过卡口的视频,时间跨度约14 d,拍摄从早晨持续到夜间.再将长视频裁剪成短的片段,并去掉没有人或者很少人出现的片段.由于行人通过卡口需要几秒钟的时间,为避免数据集中出现大量冗余图像,本研究将所有视频每隔5帧抽取1帧保存为原始数据集.
图1所示为卡口场景下的示例图像.因为卡口场景的摄像头固定在卡口前方较高的位置,因此收集到的视频都是俯拍得到的.此外,与在静止状态下拍摄到的人脸不同的是,由于行人通过卡口后可能以不同的头部姿态朝任意方向走动,所以收集到的图像中人脸具有多种多样的姿态和表情,即使是那些接近正面的人脸,其表观也具有一定程度的变化.当通过卡口的行人较多时,大部分人脸还会出现被遮挡的情况.由于摄像机拍摄时间跨度长,所收集图像的光照变化非常大,因此部分人脸由于光照太强烈而显得模糊,部分人脸却由于光线太暗而难以与背景区分开.另外,卡口处行人的走动造成了图像的轻微模糊,这给检测该场景下的人脸增加了难度.由于所检测到的人脸后续还将用于识别,而要对左右旋转角度大的人脸进行识别具有一定难度,所以在本研究中仅检测正面及接近正面的人脸,故只对该类人脸进行标注.
按4:1的比例将原始数据集分为训练集和测试集,并分别进行标注.由于手工标注大量训练样本非常耗时,所以采用Face++[11]人脸检测器对训练集进行自动标注.该检测器不易检测出侧面人脸,但对于正面及接近正面的人脸具有很好的检测效果.标注完的训练集中有155 786个人脸样本.对于测试集,为了使评估尽量公正准确,从测试集中手工挑选出覆盖多种姿态、表情、背景及光照条件的3 000张图像进行手工标注.在标注的过程中,除了正面及接近正面的人脸之外,还将侧面或有遮挡的人脸标注为“ignore”,以防这类人脸被当作“非人脸”而影响分类器性能评估的准确性.这是为了在标注测试集时,直接忽略侧面或有遮挡的人脸.若不对其做任何标记,当其被检测出来,在评估时就会被当成误检结果; 若将其标注为“ignore”,则在评估时可忽略这个检测结果,即不把该检测结果纳入正确检测的范畴,也不认为它是错误的.标注完的测试集中有4 792个正面及接近正面的人脸样本.
需要注意的是,本研究并未专门准备负样本.训练ACF模型时,程序会根据图像的标注信息,自动从训练集中截取非人脸区域作为负样本.
图2为本文中所构建的数据集中有标注的示例图像.
本文中所构建的卡口场景下的人脸数据集具有如下特点:1)数据集中有标注的人脸像素大小至少为70×70,大多是正面或接近正面的人脸,且这些被标注人脸的头部姿态和表情具有一定的变化; 2)被标注的人脸呈现出非常大的光照变化; 3)部分标注的人脸有轻微模糊.由于卡口场景下人脸样本的这些特点,导致直接把在公开数据集上训练得到的模型应用于卡口场景难以取得理想的效果.本研究后续的训练和测试都是建立在该卡口场景的人脸数据集上.
第2行中浅色方框标注的为需要被检测到的人脸,深色方框标注的是被标注为“ignore”的人脸.
图2 Face++人脸检测器标注训练集(第1行)和手工标注测试集(第2行)中有标注的图像
Fig.2 Annotated images from the training set annotated automatically by Face++(first row)and test set annotated manually(second row)
ACF模型是一个基于图像的ACF[12]学习到的分类模型.ACF中最基本的结构是通道,通道对应原始RGB图像的一种线性或非线性映射.通过集合10种通道(3个LUV颜色通道,1个梯度大小通道和6个梯度方向通道),ACF能够融合颜色和梯度信息,因此可以有效地表示人脸样本.从原始的RGB图像到通道的转换如下.
首先,将像素值从RGB颜色空间映射到国际照明委员会(CIE)XYZ颜色空间:
[X
Y
Z]=1/(b21)[b11 b12 b13
b21 b22 b23
b31 b32 b33][R
G
B]=
1/(0.176 97)[0.49 0.31 0.20
0.176 97 0.812 4 0.010 63
0.00 0.01 0.99][R
G
B].(1)
然后,从CIE XYZ颜色空间转换到LUV颜色空间,就得到了ACF模型中的3个颜色通道:
L*=
{((29)/3)3Y/Yn, Y/Yn≤(6/(29))3,
116(Y/Yn)1/3-16, Y/Yn>(6/(29))3,
U*=13L*·(U'-U'n),
V*=13L*·(V'-V'n),(2)
其中,{U'=(4X)/(X+15Y+3Z)
V'=(9Y)/(X+15Y+3Z)是色度坐标,(U'n,V'n)和Yn分别为参照白光的色度坐标和亮度.
在计算每一个像素点的梯度幅值和梯度方向之前,先要计算每一个像素点的水平梯度和垂直梯度:
Gx(x,y)=I(x+1,y)-I(x-1,y),(3)
Gy(x,y)=I(x,y+1)-I(x,y-1),(4)
其中,Gx(x,y)和Gy(x,y)分别表示像素点(x,y)处的水平梯度和垂直梯度,I(x,y)表示对应的灰度值.点(x,y)处的梯度幅值和梯度方向由式(5)~(6)确定:
G(x,y)=(Gx(x,y)2+Gy(x,y)2)1/2,(5)
α(x,y)=tan-1((Gy(x,y))/(Gx(x,y))).(6)
对幅值进行平滑及归一化处理可得到梯度幅值通道.将[0,2π)范围内的梯度方向角均分成6个方向,统计Qθi(x,y)=G(x,y)·1θi[Θ(x,y)=θi],即可得到6个梯度方向通道.其中,θi(i=1,2,…,6)和Θ(x,y)表示量化后的梯度方向,1θi表示指示函数.
给定输入图像,ACF的计算过程为:1)对图像进行平滑,并计算出图像的10个通道; 2)对每一个通道,用一个固定大小的窗口(本文中窗口大小为4×4)在通道图上进行无重叠滑窗,对窗口内的值进行平均池化,得到新的通道图; 3)对新的通道图进行平滑,把所有通道所有位置的值串联成一个向量,即图像的ACF.
ACF模型的分类器是一个由多决策树构成的soft cascade AdaBoost分类器,其结构与Viola-Jones人脸检测器相比有2个不同点:1)该分类器所采用的弱分类器是深度为2的决策树,而不是单层的决策树桩,这样的弱分类器能学到特征的不同维度之间的关系,有利于ACF模型更好地区分人脸和非人脸,提高检测精度; 2)该分类器是软级联的,而不是由多个AdaBoost构成的硬级联分类器,这样的结构有利于检测时快速抛弃负窗口,提高检测速度.
ACF模型的原始训练过程如图3所示.1)S=0时,基于已标注的训练集,截取人脸和非人脸样本,并分别提取ACF构建人脸和非人脸特征集作为训练过程的输入,然后训练一个AdaBoost分类器.2)将训练得到的AdaBoost分类器用于有标注训练集上的图像进行人脸检测.3)利用标注信息得到该分类器难以区分的负样本(hard negatives),然后对这些新的负样本提取ACF; 用所有负样本的特征更新训练时输入的非人脸特征集,更新特征集时,新的非人脸特征随机地取代旧的特征集中等量的旧特征; 接着训练新的AdaBoost分类器.4)迭代若干次“检测—更新非人脸特征集—训练分类器”的过程,得到最终的ACF人脸检测模型.
其中,利用标注信息收集负样本的具体过程为:首先用训练所得分类器对训练图像进行人脸检测,将每幅图像上置信值最高的若干(本文中为4)图像块收集起来,接着把所收集的图像块中与标注的人脸区域的重叠度(IoU)大于0.1的图像块排除掉,剩下的图像块即为训练所得分类器的负样本.
ACF模型的训练过程,本质上是通过多轮的boosting不断地从给定的有标注的训练集中学习人脸知识的过程.为了将ACF模型更好地迁移到新的应用场景,本研究允许对训练集进行扩展,即允许ACF模型自适应地从新场景下未标注的数据中选取新样本,然后重训练.
ACF模型的重训练过程如图4所示.1)如图4左半部分,基于已标注的训练集,训练一个ACF模型(在这里,ACF模型可以是只训练一次的结果,即S=0时训练得到的AdaBoost分类器).2)将训练得到的模型用于未标注图像进行人脸检测; 利用分类器的分类结果从这些图像中收集新的人脸样本和非人脸样本; 然后对这些新的正、负样本分别提取ACF.3)用所有的人脸和非人脸特征分别更新训练时输入的人脸和非人脸特征集; 接着训练新的AdaBoost分类器.4)迭代若干次“检测—更新人脸和非人脸特征集—重训练分类器”的过程,得到最终的ACF人脸检测模型.
其中,利用分类器的分类结果收集新的人脸样本的具体过程为:首先对20 000张未标注图像进行人脸检测,然后对被检测的每张图像收集分类器返回的置信值最高的3个图像块,再把全部60 000个图像块中置信值最高的5 000个作为新的人脸样本.
表1 基于2种负样本采样方式的重训练方法的对数平均漏检率
Tab.1 Log-average miss rate of the re-training methods based on two negatives-sampling approaches%
方式 首次训练 重训练1次 2次 3次 4次 5次 原始方法1 25.40 25.99 18.93 24.69 19.48 18.28 2 25.40 18.14 12.52 12.70 13.84 17.00 22.11
新的非人脸样本在同一过程中(对20 000张未标注图像进行人脸检测)选取.从被检测的每张图像中收集非人脸图像块有2种方式:方式1,直接选取分类器的置信值最低的10个图像块; 方式2,模拟选取分类器的负样本,即先排除掉分类器返回的所有图像块中置信值最高的5个,再去掉与这5个图像块中IoU大于0.1的那部分,接着从剩下的图像块中选出置信值最高的10个.然后从全部的200 000个图像块中选取置信值最高的20 000个作为新的非人脸样本.
重训练与原始训练过程存在两点区别:1)在重训练过程中,训练好的分类器被用于对没有标注信息的图像进行人脸检测,以选取新样本,实现无监督的样本更新; 2)该重训练方法不只更新负样本,同时也更新正样本,以使训练时输入的人脸样本更接近真实环境中的样本分布,提高模型在特定场景下的性能.理论上,如果想使得分类器更加鲁棒,应该选择得分较低的正样本来重新训练分类器,然而由于本研究的样本更新过程是无监督的,为了保障正样本的正确性,故选取分类器打分较高的样本来更新正样本.事实上,每一次使用的新的正样本仅占训练时输入样本总数的四分之一,在训练出一个效果更好的分类器后,再基于新的分类器选择新的正样本,即正样本是逐渐更新的,随着更新次数的增加,本研究所使用的正样本会具备一定的多样性.
本研究通过实验对所提出的ACF模型重训练方法的有效性进行了验证.实验所使用的20 000个训练样本除了选自本研究中所构建的训练集外,还有2 000个取自公开的人脸数据集Large-scale CelebFaces Attributes Dataset[13]; 测试样本为手工标注的3 000张图像.本研究已事先通过实验证实基于这样的训练集学习到的ACF模型具有最好的泛化能力; 并且当模型的滑动窗口的像素大小为72×72,ACF的其他参数设置与文献[10]一致时,ACF模型具有最好的检测效果.
本研究采用对数平均漏检率(M)来评价不同模型的性能[12],即当FPPI(False Positives Per Image)的值为10{-2.00,-1.75,-1.50,-1.25,-1.00,-0.75,-0.50,-0.25,0}时,这9个点对应的漏检率平均值(在FPPI的对数空间中,这9个点在区间[0.01,1]之间均匀分布)如式(7)所示.
M=1/9∑i(1-Ri),i=1,2,…,9.(7)
由于当FPPI取值在区间[0.01,1]之间时,受试者工作特性曲线(ROC)是近似线性的,所以M近似为FPPI等于0.1时的漏检率,然而M的值更稳定、所包含的信息更多.因此,可以用M的值来代表一条ROC.M的值越小,模型在测试集上的召回率R越高,检测效果越好.
首先对基于2种负样本采样方法的重训练过程的有效性进行实验验证.首次训练ACF模型的stage值设置为0,弱分类器的数量设置为2 048.实验对比结果如表1所示.
对比表1第1行中经过不同次数重训练的结果可以看出,除了经过1次重训练的分类器效果有轻微下降外,其他重训练模型的效果都好于首次训练得到的结果.并且,经过2,4,5次重训练的模型,其漏检率都低于用原始的训练方法得到的结果.基于以上实验结果,可见采用该负样本采样方法的重训练能有效提高模型的检测效果.
从表1第2行可以看出,所有经过重训练得到的模型都比首次训练得到的模型效果好,且所有重训练次数下的模型漏检率都比原始方法低.此外,对比2种负样本采样方式的结果发现,基于方式2的重训练模型效果均优于基于方式1的重训练模型.出现这样的结果的原因为:第2种采样方式模拟选取分类器的负样本作为新的负样本,这样的负样本更像人脸并且更新后的训练样本更多样化,由此重训练得到的模型也就具有更强的判别能力.
上述基于迭代的重训练方法能提高模型效果的原因在于:第1次训练分类器前,程序自动从有标注的训练集中截取的负样本位于每张图像的几个固定位置,这样的训练样本并不充分具备真实环境中负样本的多样性,因此难以训练出一个鲁棒的分类器; 而让已训练好的分类器自适应地选取样本更新样本集,在一定程度上增加了训练样本的多样性,由此重训练出来的分类器比前一个能更好地区分人脸与非人脸.理论上,随着迭代次数的增加,训练样本越来越丰富,直至与真实环境中的样本具有相似的分布,基于此训练出来的分类器的性能自然会越来越好.实际上,随着重训练次数的增加,模型的效果会出现波动,而不是单调地变好,其原因为无监督地增加的样本可能具有错误的标签,因此对模型的训练会造成一定的干扰.尽管重训练过程中模型的效果可能有波动,但重训练所得模型的效果仍比用原始方法训练的好,并且在迭代过程中模型效果从整体上有变好的趋势.因此该方法仍然具有实际应用价值.
基于第2种负样本采样方式,进一步探讨了首次训练ACF模型的迭代次数对重训练效果的影响,实验结果如表2所示.从表中可以看出,增加首次训练的迭代次数对于提升重训练模型的检测效果并没有帮助.原因分析为:首次训练的迭代次数越多,得到的分类器就越倾向于拟合给定的有标注的数据集,之后再重训练就难以明显提升模型效果,甚至可能导致一定程度的下降.
表2 基于不同的首次训练迭代次数的重训练的对数平均漏检率
Tab.2 Log-average miss rate of re-training based on different iteration times of the initial training process%
注:迭代1,2,5次分别对应stage值为0,1,4.
为了进一步验证本研究提出的重训练方法的有效性,在测试集上对比了重训练所得模型与Face++[11]、于仕琪[14]的人脸检测函数的性能.实验结果如图5所示.由于用来对比的2个模型都仅提供检测接口,而且不返回分类的置信值,所以在图5中只以一个点表示Face++的检测结果和于仕琪的人脸检测函数的结果.需要注意的是,由于Face++和于仕琪的人脸检测函数都是通用的人脸检测器,并没有使用卡口场景下的人脸数据进行训练或微调,所以它们的检测结果只用作参考,本研究重点关注不同的训练方法所得模型之间的对比.
从图5可以看出,使用第2种负样本采样方式时,本研究提出的重训练方法得到的模型的效果最优.尽管第1种负样本采样方式在提高分类器的性能上不如第2种采样方式,然而从图5可以直观地看到,使用第1种负样本采样方式时,重训练得到的模型性能仍比用原始训练方法得到的ACF模型性能好.Face++和于仕琪的人脸检测函数的FPPI分别为0.001 7和0.002 0虽然在误检数很低时,它们的漏检率也不高于第1种负样本采样方式所得模型.然而在本研究讨论的实际应用中,并不要求达到这么低的FPPI.当FPPI的值在[0.01,1]之间时,用原始的训练方法得到的ACF模型的平均漏检率为0.221 1,而本研究提出的重训练方法得到的2个模型的平均漏检率分别仅为0.125 2和0.182 8,证明本研究提出的重训练方法有助于提升ACF模型在卡口场景下的性能.
图6分别给出了手工标注的人脸样本(图6(a))及不同模型的检测结果(图6(b)~(d)),且图6(b)~(d)中的检测图片均选自本研究手工标注的测试集.从图中可以看出,基于第2种负样本采样方式重训练所得模型的召回率明显高于其他两种模型.该模型能检测到其他模型漏检的人脸,甚至能检测到部分被标注为“ignore”的人脸.
(a)手工标注的人脸样本(浅蓝色框为正面人脸,深蓝色框为“ignore” 人脸);(b)Face++人检测模型;
(c)用原始训练方法得到的模型;(d)基于第2种负样本采样方式的重训练所得模型.
本研究构建了一个卡口场景下的人脸数据集,并提出了一种简单且有效的模型重训练方法,以解决在现有公开数据集上训练得到的人脸检测模型在该场景下效果不理想的问题.实验结果表明,本研究所提出的重训练方法可以有效地提高ACF模型在卡口场景下的性能.此外本研究的重训练方法还具有不需要额外的有标注的训练数据、容易迁移到新的应用环境和可与其他模型相结合等优点.