1引言
近年来随着智能交通行业的发展,对于基于视频的行人检测有越来越多的迫切需求。比如,在轨道交通的视频监控系统中,利用视频行人检测可以实现客流分析、旅客异常行为分析等功能以方便运营和安保;在汽车辅助驾驶中,基于行人检测可以实时提醒驾驶员行进前方出现的行人,避免因为驾驶员视线被遮挡或者注意力分散导致的危险等;在基于视频的电子警察系统中,利用行人检测可以有效的避免因为行人的干扰导致的误抓拍,大大减少垃圾照片的数量。
视频行人检测的方法只要分为两类:一类是首先基于背景建模或者帧差的方法提取出运动的前景区域,然后利用轮廓的几何参数对前景进行分类[7][8];另一类是基于统计学习的方法,首先提前人体的外观特征,然后利用分类器进行建模学习[9][10]。第一类方法的缺陷在于对人体的描述过于简单,而且要求摄像机固定不动。这样会导致当行人与其他运动物体发生遮挡时会导致漏报,当场景内的其他运动目标容易导致误报,以及当摄像机运动(辅助驾驶)或场景内关照干扰较多时(夜间车灯)系统完全失效。第二类方法相对于第一类方法的优势在于对人体的描述更加详细,并且基于数据驱动的方式进行统计学习得到的行人检测器具有更好的区分性,可以减少第一类方法所无法解决的误报和失效等问题。
在视频行人检测方面国内外虽然已有很多的研究成果,但目前尚未有一个通用的,健壮的,精确的,高性能的和实时的多目标人体检测算法。人体检测的研究目前的难点主要在于:
1、人体是非刚体,人体的形状不确定,尤其是在运动时等会有各种姿态,观察的视角不同时,看到的人体形状也会不同,这些原因造成人体类内模式的不固定。
2、人身上的衣服的多样性,尤其在复杂的环境下,前景和背景的区分性不是很清晰。
3、遮挡情况,人体检测要处理的数据很多是有遮挡的,尤其是在人比较密集的环境下,遮挡的情况比较严重,这种遮挡会影响检测的性能。
4、光照变化,和其他视觉目标检测任务一样,不同环境下光照不一样,这种差异对人体的检测会起到很大影响。
在本章中将针对行类内变化大的特点,采用分类器MPL-Boost(MultiplePoseLearningBoosting),并且引进分段线性函数(Piece-wisefunction)作为MPL-Boost的弱分类器,提高分类器算法的分类性能。
2基于多姿态学习的分类器
2.1多姿态学习问题
在人体检测任务当中,由于人是非刚性物体,人体的形状不确定,尤其是在运动时等会有各种姿态,而且人在镜头的不同位置时,看到的人体形状也会不同,等等这些原因造成人体类内模式的不固定,类内的模式比较大,在基线系统中,人体检测部分并没有关注这个问题,而是直接采用一个AdaBoost分类器统一建模,将变化很大的人体看成是同一类,进行分离器的训练,这样会使得分类性能不高。对于这种类内的变化,一种解决方式是通过人工将训练样本分子类,姿态相近的分为一个类,针对每个类别去训练出一个相应的分类器,但是这种方式需要人工划分样本,费时费力。
在本章中采用改进的AdaBoost分类器MPL-Boost,能够在训练的时候同时训练出多个强分类器,用这种多个分类器同时建模的方式来刻画类内的变化,而且在训练之前不需要对样本分子类别。
2.2梯度下降Boosting算法
在这里介绍基于梯度下降的Boosting算法,该算法是由Friedman[1]提出,能够引入更多形式的损失函数来推广Boosting算法。主要思想是在训练的时候利用梯度下降来优化定义的损失函数,从而在每一轮训练时能够挑选出最优的弱分类器,使得在训练集上的损失代价最小。
我们先回顾一下机器学习中二分类监督学习的一般过程,给定n个训练样本和对应的标记,我们的目标是学习一个分类函数:,使得该函数不仅在训练数据上有好的分类准确性,且对训练数据集外的数据具有好的推广性。
Boosting是一种很成功的两分类的机器学习算法,在Boosting中,我们的目标通常是训练如下形式的分类器
(1)
其中H(x)称为强分类器,ht(x)是一个两分类的弱分类器,强分类器由T个弱分类器线性加权组成,为对应的弱分类器权重。
我们可以将ht(x)看成是一个n维的矢量,第i维的向量值为H(xi)。而损失函数ζ是关于H(x)的函数,在训练过程要通过梯度下降来最小化损失函数ζ,而在每一轮对损失函数求偏导得到仍是一个n维的向量,第i维的向量值为,wi为当前样本的权重。算法在这一轮的训练目的就是要从这些样本权重下挑选出一个使得损失代价最小的弱分类器。在理想化条件下我们选择出来的弱分类器需要满足,但实际由于弱分类器的选择是有限的,很难达到这个要求,因此Friedman提出的一种能够挑选弱分类器的准则,使得挑选出的弱分类器和理想的分类器接近,这种选择的方式是
(2)
选择出弱分类器后再通过线性搜索,选择弱分类器的权重,使得损失代价最小。整个算法的流程可以描述成:
算法:梯度下降Boosting训练
输入:训练数据集{x1,x2……,Xn},{y1,y2……,yn},yi={-1,1}
FORt=1TOTDO
计算样本权重
现有样本权重分布的条件下训练最优弱分类器
通过线性搜索获得该弱分类器权重,使得损失代价
更新强分类器
EndFOR
上面描述的是整个梯度Boosting算法,而在实际应用中要定义损失函数,在本文中,我们采用训练样本集上的负Log似然作为损失函数,函数形式为(3)
其中采用文献[1]中的定义方式
(4)
(5)
对损失函数求偏导
利用链式规则
而在实际训练的时候,尤其是在训练正负样本数量不均衡的情况下,需要给样本一个初始化权重,为第i个样本的初始权重,则上述公式改为
2.3多姿态学习Boosting分类器
上面描述的算法是描述的是梯度的Boosting,能够用于两分类的任务。但是对于人体检测任务来说,人有各种姿态,类内的变化很大,本文希望能够将模型建模成具有描述类内变化的能力,也就是说能够在训练的时候对训练数据自动地聚堆并且对每一个堆训练一个分类器,这样自动聚类出来的堆,可以看成是类内的一个子类,将梯度Boosting算法扩展成MPL-Boost[2]。
这里所要描述的多姿态学习算法是这样的,和上述两分类的监督学习一样给定n个训练样本,以及相应的类别标记,我们根据先验知识假设数据可以细分成个子类,于是每一个样本还对应一个隐标记变量。一个样本在至少有一个子类的分类器判别为正样本时,该样本才为正,在所有子类分类器都判别为负样本时该样本才为负,即可以用形式化表示成
(12)
在训练时,目标是要同时将训练数据分裂成K堆并且训练出个分类器H1,H2…Hk,上述公式可写成
(13)
其中
(14)
g(x)是K个变量上的概率最大值拟合函数,本文采用的NOR(Noisy-OR)模
型[3]
(15)
对代价函数求梯度,利用链式规则可得
在NOR模型下
(18)
因此多姿态学习的算法流程可以描述成
算法:MPL-Boost训练
输入:训练数据集{x1,x2,……xn},{y1,y2,……yn},,yi={-1,1}
通过线性搜索获得该弱分类器权重,使得损失代价
ENDFOR
2.4分段线性函数
在boosting中最终的分类器是由弱分类器组成的,弱分类器的学习可以采用多种形式,最经常使用的是决策树,使得最后分类器的输出是一个二值标记。而本文采用的分段线性函数作为MPL-Boost的弱分类器[4]。分段线性函数作为弱分类器具有更好的分类性能和推广性。
如在图2所示,左边是一个决策函数作为分类器的实例图,而右侧是分段线性函数的示例图。在特征具有好区分性的时候,如图1左图所示,这时决策树作为弱分类器具有较好的分类性能,而当特征的分布如图2右图所示的时候,这时候采用决策树作为弱分类器的分类性能是很差的。而分段线性函数,是将特征空间分成几个段,在每个段内去做分类,这样的话能够解决特征区分性不强时分离器性能的下降问题。
为了使弱分类器分类权重错误最小化,一个合理的方式是训练Boosting时最小化上边界。因为e指数损失函数在Boosting中取得成功应用[6],本文在弱分类器训练中也采用e指数,函数定义为
(19)
为了更好地描述正负样本的分布,将特征空间分成M份,表示成,在每一份的特征空间上都有一个输出,在弱分类器学习时,对每个样本
,根据期的特征值都会落到一个特征区间上,如果,则,定义
3实验结果
在这里将对本节人体检测算法中讨论的一些问题进行实验分析。比较采用分
段线性函数作为弱分类器后MPL-Boost的性能。
3.1数据集和实验设置
这里我们采用的数据集来之南加州的行人数据集(ViewpointInvariantPedestrianRecognitionDataset)这个数据里分成两个子数据集,来之不同角度的摄像头,数据中的行人具有各种角度。图3是训练样本的一些示例图。
由于在采用滑动窗口进行人体检测的思路中,对系统性能影响最大的的是对每个子窗口的二分类的性能。因此这部分实验着重考察本文提出的多尺度梯度方向直方图特征结合以分段线性函数作为弱分类器的MPL-Boost分类器的性能。
具体的实验设置,在这实验部分,将进行两个实验,实验一比较在MPLBoost中,本文采用的以分段线性函数作为其弱分类器的性能和以决策树作为弱分类器在人体检测任务中的性能比较。而实验二是AdaBoost和MPL-Boost的性能比较,两者的弱分类器都是采用分段线性函数。
实验采用的数据如下,南加州的行人数据集分为CamA和CamB两个数据,分别来之两个角度不同的镜头,只包含正样本,将一个集合的数据做训练,另一个数据集做测试。其中:训练集中将CamA中的数据做虚拟图像共2528个正样本,自己收集负样本3048个,负样本不包含人体;测试集,采用CamB,共有正样本2528个,负样本自己收集,共2119个。评价方法采用PRC(PrecisionRecallCurve)曲线方法。
3.2实现和结果
实验一比较的是对于MPL-Boost,采用决策树做为弱分类器和本文采用分段线性函数做弱分类器两者的性能的比较。结果如图4所示。
实验二比较的是在行人检测任务中,在采用相同的特征,即多尺度的HOG特征的情况下,采用本文改进的MPL-Boost作为分类器和采用传统的AdaBoost作为分类器两者的性能比较。两者的弱分类器都采用分段线性函数。结果如图5所示。
3.3结果分析
MPL-Boost分类器考虑到人体的类内的变化,训练时同时训练多个强分类器,以此来对类内的各个子类建模。从实验结果来看,本文采用改进的MPLBoost在人体检测任务上性能要高于传统的AdaBoost。本文采用以分段线性函数作为弱分类器的MPL-Boost要比传统采用决策树作为弱分类器的MPL-Boost在人体检测系统上的性能要好。
4结语
在本文中,针对人体的类内变化,采用多分类器同时学习的分类器MPLBoost来刻画类内的变化,并且引进分段线性函数作为弱分类器,改进现有MPL-Boost分类器,提高人体检测的性能。从实验结果可以看出,这种多分类器学习的方式对检测器的性能是有提升的,而且引进分段线性函数之后,提高检测器的性能。