一种基于HOG的行人检测算法
2017-11-02王力刘子龙张帅旗
王力++刘子龙++张帅旗+
摘要:提出一种基于梯度方向直方图与AdaBoost+SVM的行人检测算法。方向梯度直方图用于描述和提取行人的外观及运动特征,并使得外观、运动特征实现相互融合。在分类器的选择上使用SVM作为AdaBoost的弱分类器对行人检测器进行分类训练,最终得到分类效果好的行人检测器,实现更好的检测性能。
关键词:行人检测;HOG算法;AdaBoost算法;支持向量机
DOIDOI:10.11907/rjdk.171991
中图分类号:TP312文献标识码:A文章编号:16727800(2017)010006804
0引言
行人检测是指对所需检测的图像采用一定的方法从而确定行人存在与否,若存在,则返回样本并给予精确定位(包括行人的位置、大小、形态等)。近年来,随着科学技术蓬勃发展,电子商务在人们生活中的应用逐渐深入,行人检测在人脸识别、智能交通、身份确认、内容检索等方面具有重要价值。虽然行人检测技术已经相当成熟,并且应用也十分广泛,但该技术依然面临着巨大挑战。这些挑战来自于多个方面:一是图像的复杂程度,比如一张图像里每个行人的行为动作各不相同,有的跳,有的蹲,动作各异,在特征提取时难度和工作量就会增加,动作差异所带来的影响较大;二是图像里行人穿戴的衣服和头饰,穿的衣服是宽松还是紧身、有没有戴帽子等因素都会对特征的提取产生较大影响;三是图像背景的不同对检测结果造成差异,不同背景可能会造成误检,比如,行人和雕像或者人形树(或者外观类似人的一些物体)一起拍摄,则很有可能造成误检。还有一些其它外在因素,比如摄像头拍摄角度、光照强弱等。但随着科学技术的不断发展,行业专家学者对行人检测核心算法也在逐渐完善和改进,并取得了一系列突破,使得行人检测技术的应用领域更加宽广。
2005年,Dalal和Triggs[1]提出了一种基于梯度方向直方图(Histograms ofOriented Gradients, HOG)的方法,对特征提取有很好效果。HOG算法主要思想是:先将一张待检测的图像分成64个像素块,每个像素块都被简称为一个单元,每个单元形成9个方向(bin)上的直方图,每4个单元构成一个block,在处理过程中使每个block间存在重叠部分,最终在滑动检测窗口(由几个block构成)会得到空间上的特征向量。这就是特征提取基本原理,如图1、图2所示。
本方案采用的方法是:在特征提取部分采用基于自适
应的滑动窗口HOG。梯度直方图特征提取基本思想是:即使没有确切的相关梯度或者边缘位置信息,物体局部外观和形状也往往深受局部强度梯度或者边缘方向的影响。在实际应用中,其通过将图片窗口划分成小的空间区域(细胞元)实现,对于每一个胞元,都要对其中像素的一维梯度方向直方图或是边缘方向进行累积统计,合并后的直方图就构成了被检测物的特征。为了使其对光照、阴影等条件更加不敏感,在使用它们之前进行对比度归一化尤为必要。此归一化是指通过对更大的空间区域(块)中某一特征的局部直方图的“能量”进行累积统计,进而对块上的每一个胞元进行归一化实现,将归一化之后的描述子块作为方向梯度直方图(HOG)描述子。在分类器选择上,本文对AdaBoost级联分类器算法[2]加以改进创新,将SVM[3]作为AdaBoost的弱分类器,将SVM和AdaBoost各自优点进行融合,然后选择适宜的核函数参数(该核函数和参数下文会给出),从而提高特征分类的精准度,直接去除一部分非人形区域,进而减少了实验训练时间。实验结果表明,这种行人检测方法性能好,且准确性、误检率和漏检率等均优于传统行人检测方法。
1方向梯度直方图
HOG算法是基于表面局部信息统计的特征描述子,在特征提取部分采用滑动窗口机制,如图1所示。HOG算法的核心思想是将一幅图中局部目标的形状及表象通过梯度或边缘的方向密度分布描述出来。首先将一幅图片均匀划分为多个互不重叠的单元cell(细胞),每一个cell的大小为n×n,然后分别计算出每一个像素的梯度,并且使用直方图统计每个cell的梯度,最后将多个cell进行合并,组成一个block(块),将每个细胞的直方图组合起来就可以构成特征描述器。该算法原理如图3所示。
HOG算法包含5个步骤[4]:
(1)图像标准化。前人经过大量的实验得出结论,图像颜色所提供的信息作用不大,可先转化为灰度图,一方面便于处理,减少工作量,再者可以减少光照因素的影响,提高检测器对光照的鲁棒性。将图像进行压缩处理转化为灰度图可以使原本某些局域光线亮度和阴影部分的反差不那么明显,因此处理图片信息的第一步是将图像转化为灰度图,如圖4所示。
(2)计算梯度。图像中像素点(x,y)的梯度为:
Gx(x,y)=H(x+1,y)-H(x-1,y)
Gy(x,y)=H(x,y+1)-H(x,y-1)
梯度幅值和方向分别为:
G(x,y)=Gx(x,y)2+Gy(x,y)2
α(x,y)=tan-1Gy(x,y)2Gx(x,y)2
上式中,Gx(x,y)、Gy(x,y)、H(x,y)表示输入图像中像素点(x,y)处的水平方向梯度、垂直方向梯度和像素值。
(3)单元格梯度投影。计算每个像素对基于以自身为中心的方向梯度元素边缘方向直方图的加权投影,并且将这些投影累积到cell的局部空间区域中的方向区间,细胞元可以是长方形或者环形,方向区间在0~180°(无符号梯度)或是0~360°(有符号梯度)之间均匀分布。本文将cell的梯度方向360°分成9个方向块进行,从而为每个细胞单元构建梯度方向直方图。
(4)块内归一化梯度直方图。由于图像局部阴影使得各部分光照强弱不同,还存在前景背景对比差异,梯度幅值将会分布在一个很宽的范围之内,因此有效的局部对比度归一化对性能检测效果尤为重要。本文将归一化之后的块描述符称之为HOG描述符。endprint
(5)收集HOG特征。在得到归一化的梯度直方图之后,还需要对滑动检测窗口中所有重叠的block收集其HOG特征,形成特征向量,然后才能送入AdaBoost+SVM组成的分类器中进行分类训练,得到最终结果。
例如,对于一个40*40的训练图片,单元格=8*8像素,块=2*2单元格,块每次滑动一个单元格,则特征维数=4*4*(2*2*9)=576维。
2算法实现
2.1Adaboost算法
Boosting是一种用于提高学习算法准确度,将弱学习方法提升为强学习方法的算法。Boosting算法的核心思想是把若干个分类器整合为一个分类器,它是AdaBoost算法的前身,继承了Boosting算法的思想[5]。
AdaBoost算法描述如下:
首先输入样本集(x1,y1),…,(xN,yN),其中yi∈{1,-1},迭代次数为T;然后进行初始化,样本集上样本的初始分布D1(i)=1N,也即样本的权重为1N;For t=1 to T。
(1)训练弱分类器h1:X→{-1,1},该弱分类器分布在Di上的误差为:
ε1=PD1htxi≠yi
(2)计算该弱分类器的权重:
α1=12In1-εtεt
(3)更新训练样本的分布:
Dt+1(i)=Dt(i)exp(-αtyiht(xi))Zt
其中,Zt为归一化常数。zt=∑Ni=1Dt(i)exp(-αtyihi(xi))
最后输出强分类器:
Hfinal(x)=sign∑Tt=1αtht(x)
2.2支持向量机(SVM)
支持向量机算法于1995年由Vapnik提出,该算法在解决小样本、非线性及高维的模式识别上有许多独特优势。SVM是建立在统计学习理论的VC维理论(所谓VC维是对函数类的一种度量,可以简单理解为问题的复杂程度,VC维越高,一个问题就越复杂。)和结构风险最小原理基础上,根据有限的样本信息在模型的复杂性和学习能力之间寻找一个最佳折衷,从而得到最优的泛化能力[5]。
支持向量机其实也是基于最优分类面的思想训练出的一种分类算法,简言之,它是一个两类分类模型,依赖预处理后的数据,最终可转化为一个凸二次规划问题的求解,在n维空间中找到一个分类超平面,将空间上的点进行分类。图5是线性分类的一个例子。
图5线性可分情况下的最优分类线
2.3AdaBoost+SVM算法
上文分别介绍了AdaBoost和SVM算法。本文研究的重点在分类器的选择上,对AdaBoost级联分类器的算法加以改进,使用SVM作为AdaBoost的弱分类器,通过选择并确定合适的核函数参数,从而提高分类精度,减少训练时间,达到比较快速的检测目的。本文SVM的核函数选取的是径向基函数,其函数表达式为[7]:
k(x,xi)=exp-‖x-xi‖22σ2
算法步骤可简化为:
(1)SVM核函数的参数σ={σ1,σ2…},C={C1,C2…}。训练样本S={(x1,y1),…,(xn,yn)},循环次数为T。
(2)样本的权重设定为:
ω1i=1/N,i=1,…,N
(3)訓练一个基于径向基核函数的SVM弱分类器。
(4)对错误率进行计算。错误率εt为:
εt=∑Ni-1ωti,yi≠ht(xi)
如果错误率大于50%,则返回上一步重新训练,否则进行下一步。
(5)重置分类器的权重:
αt=12ln1-εtεt
(6)对训练样本集的权重进行重置:
ωt+1i=ωtiexp-αtyihtxi Ct
说明:i=1,K、N、Ct均为归一化参数。
(7)T次循环或者达到预期精确度后,输出经过训练后的分类器:
fx=sign∑Tt-1αthtx
3实验结果与分析
3.1实验数据库
实验数据库样本之一来自于自拍的行人图片数据库,该数据库包含了多种场所,背景各异。为了体现该算法的优越性,本文采用的实验数据库也包括比较专业的INRIA行人库[8](http://pascal. inri一alpes. fr/data/human)。训练集有正样本614张,其中包含2 416个行人,负样本1 218张;测试集有正样本288张,其中包含1 126个行人,负样本453张。图片中人体大部分为站立姿势且高度大于100个像素。图片主要来源于个人照片、谷歌等。照片清晰度较高,可用OpenCV正常读取和显示。具体实验样本组成如表1所示。
3.2实验过程
本文算法验算是在OpenCV和Visual C++开发环境中实现。为了充分说明该算法在行人检测上确实有较大优势,将得到的实验结果与文献[1]和文献[2]中的传统算法分别基于HOG+AdaBoost、基于HOG+SVM进行比较。为了更好对比实验结果,提出两种衡量标准下的漏检率和误检率。漏检率(MR)是指未检测出来的行人样本数与行人样本总数的比值,误检率(FPR)是指不是行人样本却被检测为行人的数量与非行人样本总数的比值。图6为在被检测样本数据库中随机选取的一张检测成功图片。
3.3实验结果
在样本库中随机选取1 000个样本作为测试样本集,总共进行6次试验,每次测试所得到的漏检率和误检率分别如图7、图8所示。
取6次试验的平均值作为结果,算法的漏检率、误检率、运行时间与传统方法对比如表2所示。endprint
4结语
行人检测是机器视觉和人工智能领域的研究热点,随着该领域技术的日渐成熟,其重要性及应用价值正为人们所了解,它在智能交通、楼宇智能监控系统、高级人机接口、机动车辅助系统等领域都具有重要应用。本文将两种传统的分类器重新组合在一起,设计出一种新的算法分类器,该算法分别继承了AdaBsoot和SVM算法的优点,在检测的正确率上得到了很大提升,在训练时间上也有明显缩短。实验结果表明,该算法具有检测精度高、实时性好等优点,应用前景极其广泛。但是行人检测领域还有很多困难仍需克服,比如,如何正确快速地检测被遮挡的行人等。相信随着科学技术的进步及算法的改进,目前存在的问题会得到解决,行人检测技术也会在更多领域得到应用和推广。
参考文献参考文献:
[1]DALAL NTRIGGS B.Histograms of oriented gradients for human detection[C].Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition,2005:886893.
[2]DAMIEN SIMONNET,SERGIO A VELASTIN. Pedestrian detection based on Adaboost algorithm with a pseudo calibrated camera[C].2010 International Conference on Image Processing Theory,Tolls and Application,2010:5459.
[3]B WU,R NEVATIA.Cluster boosted tree classifier for multiview.multipose object detection[C].IEEE 11th International Conference on computer Vision,2007:18.
[4]張旭东.行人检测技术研究[D].成都:电子科技大学,2011.
[5]钱惟贤,杨力,胡楷,等.一种基于AdaBoost的弱分类器内部结构调整方法[Z].CN,CN 103246897 A,2013.
[6]VAPNIK V.统计学习理论的本质[M].张学工,译.北京:清华大学出版社,2000.
[7]张莉.基于SVMAdaboost算法的行人检测方法[J].工业仪表与自动化装置,2016(4):117120.
[8]张春风,宋加涛,王万良.行人检测技术综述[J].电视技术,2014,38(3):157162.
责任编辑(责任编辑:孙娟)endprint