基于Adaboost和SVM的人头实时检测*
2010-08-08牛胜石毛晓晖侯建华熊承义
牛胜石,毛晓晖,侯建华,熊承义
(中南民族大学 电子信息工程学院,湖北 武汉 430074)
视频图像中的人头检测,就是在视频序列中及时地发现并提取人头位置和尺度信息,为下一步的跟踪、计数及运动分析等算法提供目标数据。
目前视频监控中常用的人脸、人头检测算法主要有:Boost[1-5]、支持向量机 SVM(Support Vector Machine)[6]和神经网络[7]。基于Boost的方法主要采用基于灰度差的类Haar特征,该方法对相对简单的面部特征提取简单有效、检测精度较高,但人头检测因同时包含了人脸、头发和部分背景信息,单纯的邻近区域灰度差特征并不十分精确;SVM方法,由于需要计算完所有特征后才能进行判决,当检测窗口及特征维数较多时,耗时较大,难以达到实时性要求;基于神经网络的方法,由于算法复杂度高,耗时同样较大,多用于PC机,对于嵌入式平台,很难达到实时性的要求。基于以上三种方法存在的问题,参考文献[2]提出了一种基于梯度的特征,但该方法中的特征计算复杂度较高,同时存在较多的误检。
本文在参考文献[2]算法的基础上,对梯度特征进行了改进,并加入自生长梯度特征,使特征在较低复杂度下具备了较高的分类能力和稳定性。同时,针对Adaboost检测存在的误检现象,引入级联SVM分类器对Adaboost检测结果进行筛选,去除其中的误检,从而实现人头的精确检测。这种方法解决了因特征的高复杂度而导致的非实时性问题,同时对Adaboost存在的误检进行了有效去除,具备良好的实时性和较高的检测精度,且对图像的信噪比要求不高,对低对比度、强光照、阴影等复杂场景具有较好的鲁棒性。
1 人头检测总体结构
本文特征训练及检测均在梯度空间进行。首先对人头样本进行Adaboost训练,利用Adaboost算法从特征库中挑选具备较强区分能力的特征,并级联成强分类器,得到人头模型。同时,对负样本进行聚类,并对每个聚类与人头正样本单独进行SVM训练,得到SVM级联分类器。检测时,首先将输入的视频图像转换到梯度空间,用训练好的Adaboost检测器进行多尺度检测,检测所得到的结果进入SVM级联检测器进行二次检测,去除其中的绝大多数误检,而后根据重叠面积进行尺度合并,并输出检测结果。系统结构及流程如图1所示。
图1 人头检测系统总体结构图
2 Adaboost与SVM组合分类器
2.1 样本准备
机器学习及训练需要大量的样本。为了减少工作量,本文对手工截取的样本进行了左右镜像和小角度旋转,以增加样本的多样性。负样本由不包含人头的图片随机截取。
2.2 梯度计算
本文特征提取在梯度图像上进行,梯度取4个方向,模板如式(1)所示。梯度模板与图像卷积,将灰度图像映射为不同方向的梯度图;之后利用积分图原理将梯度图映射为梯度积分图,以快速计算梯度特征。由于篇幅限制,积分图原理此处不再赘述。
2.3 Adaboost特征库定义
本文选用参考文献[2]所提出的部分特征窗,并对特征计算方法进行改进,同时引入自生长梯度特征链。具体如下:
非链式特征窗由1个或2个不相邻子窗随机组合构成,如图2所示。
图2 非链式特征窗类型
式中,ε为一较小的值,以避免分母为0。
多窗情况下,若各子窗仍采用随机方式组合,随着子窗数目的增加,组合结果将呈指数增长,而所得到的组合中只有极少数为有用特征,这就需要在后续Adaboost训练时从这些海量组合中挑选,其间每种组合都需要不断地进行反复运算和比较,大大增加了训练的复杂度和存储空间及所消耗的时间。考虑到人头边缘具有一定程度的连续性,因此,对多窗特征组合方式进行限制,引入特征窗自生长机制,根据正样本的梯度分布,沿边缘延伸方向将相邻单窗依次连接成链,以使特征子窗特征尽可能落在人头边缘上。自生长链式特征构造方法如下:
(1)首先确定正样本数目ns、梯度方向数nd(本文取nd=4)及如图3所示的单窗数目nw、每个单窗的位置和尺度。
(2)设定种子判决阈值θ,对所有单窗W进行如下操作:
图3 链式特征窗自生长过程
(4)通过步骤(3)共获得若干个梯度特征链 FeaC,假设某个链 FeaC的长度为 l,Winm表示FeaC的第 m个子窗,fm表示窗Winm在其有效梯度方向上的梯度累加和,fm⊥表示窗Winm在其有效梯度垂直方向上的梯度累加和,则链式特征的表达形式为:
2.4 Adaboost特征选取及训练[2-7]
本文采用参考文献[4]所述的Real Adaboost方法[5]。Real Adaboost分类器由若干个强分类器组成,每个强分类器又包含若干个弱分类器(特征),这种级联形式的分类器能够快速排除图像中大部分非人头区域。训练步骤如下:
(1)对于训练集合(x1,y1),…,(xN,yN),x1∈X 为样本向量,类别标签yi∈(+1,-1)分别表示正、反例样本。
(3)寻找 T 个弱分类器 ht(t=1,…,T):
①根据所有样本的相同特征的数值式(2)~(5)对样本空间 X进行划分,得到 X1,X2,…,XM区间。
②使用训练样本的Dt(xi)统计各个区间的权重和:
③计算选择特征的准则函数值:
④选择使得Z最小化的特征来生成当前的弱分类器:
式中,弱分类器h根据各样本的特征所在区间而定:
式中,ε为一个较小的正常数,i=1,…,N。
⑤对所有样本的权重进行归一化:
(4)最终的强分类器为:
式中,b为手动设定的阈值,默认为0。
2.5 SVM级联器
采用上述Adaboost方法所产生的误检与参考文献[3]中的误检情况类似,如图4所示,在人体的躯干、腿部以及箱包等区域易产生误检。该类误检由Adaboost算法本身难以去除,原因在于训练时,Adaboost只对局部特征进行组合,只要局部特定位置上的梯度特征满足判决条件则整个样本被判断为真,在整体上并无考量。
图4 Adaboost存在的误检
本文引入支持向量机(SVM),利用SVM分类器的全局性把每个样本作为一个整体进行分类。考虑到负样本多样性对SVM的分类性能存在影响,在SVM训练前先对负样本进行聚类,对每类负样本与所有正样本进行训练,并进行级联,得到SVM级联器。本文聚类采用KMean(K-均值)聚类算法(由于篇幅限制,SVM和 KMean算法此处不再赘述)。主要过程如下:
(1)对正、负样本提取梯度直方图(HOG)特征;
(2)根据HOG特征对负样本进行聚类,聚类数为N;
(3)负样本的每个聚类分别与所有正样本进行SVM训练,得到N个Sub-SVM分类器;
(4)级联各Sub-SVM分类器为SVM级联器。
3 实验结果及分析
考虑到样本的多样性,本文选取80余个视频场景(包括室内、室外、傍晚、灯光、低对比度、强光照、雨雾等不同情况),其中60余个作为样本采集视频,剩余的20个留作测试。共挑选不同姿态和背景下的行人2 000位,对每位行人截取3张作为正样本,并在此基础上进行旋转和镜像,得到正样本24 000张。负样本由样本视频中不包含人头的图片获得,其中Adaboost负样本自举荐产生,SVM负样本从图片中多尺度随机截取,并进行聚类,共八类。
表1是加入自生长梯度特征链前后,Adaboost对相同正负样本在相同训练参数下的训练结果。从表1可以看出,加入梯度链特征后分类器所用特征数目明显减少。
表1 加入自生长特征前后的Adaboost训练结果
表2是SVM级联器中,各Sub-SVM分类器对所有正样本和各自对应聚类内负样本的分类能力。
表2 SVM训练结果
为了验证所提出的算法对多视角人头的检测效果,从测试视频中截取200张图片作为测试集进行了人头检测实验,测试集包含805个不同视角的人头。表3是加入自生长链式特征前后的2个Adaboost检测器以及加入自生长链式特征后的Adaboost+SVM组合检测器对测试集上的实验结果。可以看出,加入自生长链式特征后,检测性能有所提高,Adaboost+SVM组合检测器虽然在检测率上略有下降,但在去除误检方面却有着非常优越的性能。图5为Adaboost检测器对复杂场景的检测结果,图6为Adaboost+SVM组合检测器对同一幅图片的检测结果。
表3 三种检测器在测试集上的实验结果
实验中测试视频及测试图片集的图像大小为352、288像素,在双核、2 GB内存PC机上运行速度为10~15 ms/帧,因此完全可以达到实时检测的要求。
图5 Adaboost检测结果
图6 Adaboost+SVM检测结果
本文通过对Adaboost梯度特征的改进,在一定程度上提高了检测率,同时有效减少了特征的计算复杂度。同时,通过加入SVM级联器,对Adaboost检测结果进行逐级筛选,极大地减少了误检。本人头实时检测系统对雨雾、低对比度以及复杂场景有较好的鲁棒性,在检测效果和运行速度上为后续的人头计数及人流量统计奠定了坚实的基础。进一步结合帧间信息,如运动和跟踪等策略,效果将会有进一步的提升,这也是下一步主要的研究工作。
[1]VIOLA P,JONES M.Rapid object detection using a boosted cascade of simple features[C].//Proc.of the 2001 IEEE Computer Society Conference,Computer Vision and Pattern Recognition,2001:I-511-518.
[2]CHEN Mao Lin, MA Geng Yu, KEE S.Multi-view human head detection in static images[C].//MVA2005 IAPR Conference on Machine Vision Application,Tsukuba Science City, Japan, May 16-18, 2005:100-103.
[3]林鹏.基于Adaboost算法的人脸检测研究及实现[D].西安:西安理工大学计算机学院,2007.
[4]郭志波.人脸快速检测和特征抽取方法的研究[D].南京:南京理工大学计算机科学与技术学院,2007.
[5]SCHAPIRE R E,SINGER Y.Improved boosting algorithms using confidence-rated predictions[J].Machine Learning,1999,37(3):297-336.
[6]童舜海.改进的SVM在入侵检测中的应用[J].计算机工程与应用,2008,44(34):113-115.
[7]ROWLEY H.Neuralnetwork-based face detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence, 1998,20(1):23-38.