基于人体部件检测子的行人检测
基于人体部件检测子的行人检测
读“B.Wu, R. Nevatia. Detection of Multiple,Partially Occluded Humans in a Single Image by Bayesian Combination of Edgelet Part Detectors[C], ICCV,2005.” 笔记
论文主要贡献点
提出一种能够很好刻画非刚体目标轮廓的特征算子,小边特征。
该论文中方法将人体分为若干部件分别检测,能够处理人体的部分遮挡问题。
在之前的人体部件检测方法中,对于部件检测的结果的combine方式往往都是针对于单个个体的,而没有考虑到整体的分布。因此该论文中对人体部件检测到的结果构建Joint Likelihood function,能够更好的降低误检率和虚警率。
小边特征
小边特征算子是由较短的线段或者曲线构成的,比如以下几种小边特征
![edgelet.png enter description here](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220153039-381712816.png)
使用和
表示小边特征算子边缘点的位置和正交向量的集合,
是小边的长度。假设小边特征算子的区域面积为
,然后对于待提取特征的sub-window,在每一个像素点上计算由该像素点起始地
区域与小边特征算子的相似度,作为该像素点对应于该特征算子的特征,也称为图像与小边特征在该像素点的亲和度(affinity)。
假设图像的边缘图像为,
表示边缘点对应的正交向量集合。那么图像在点
处和小边特征算子的亲和度为:
这样大小为的sub-window对应每一个小边特征算子都能提取到
个特征,图像的边缘图像可以使用
的Sobel算子得到。
由于这里的小边特征在文中使用时是用来构建弱分类器,因此为了速度,没必要计算的太准确,所以上式中正交向量的内积就可以近似得到。
将方向向量在量化为6个区间,计算两个方向向量所在区间间隔,按如下近似方向向量内积:
![](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220158977-80786742.png)
设分别表示边缘图像和小边点对应的量化后的值,那么亲和度可如下计算:
![](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220159867-2059779869.png)
文中使用的小边特征算子包括4-12个像素点,有线段,1/2圆周,1/4圆周,1/8圆周,以及这些小边与其对称小边组成的对称对。在的窗口中提取了
维特征,虽然没有具体说选择的小边特征算子是什么。个人认为在使用小边特征时应该先构造一定量的小边特征算子,然后再提取小边特征。
部件检测子
文中将人体分成3个部件:Head-shoulder,Torso,Legs,然后加上整体Full-body构造了四个检测器。每个检测器都是使用nested cascade detector(参见嵌入级联检测器)。
人体部件的定义图示:
![bodyparts.png enter description here](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220201055-1388937666.png)
多人联合似然函数
首先定义状态变量,
是真实的行人个数,
表示第
个行人的状态,而每个行人的状态使用位置和大小来刻画,即
。这样所谓的状态变量记录的就是真实行人的位置和大小信息。
然后定义观测变量,
是检测到的行人个数,
表示第
个人检测到的状态,同样使用位置和大小刻画。
现在检测到观测变量,我们希望推导出真实的状态变量
,可以使用最大化后验概率(MAP)计算。
![](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220205414-442319683.png)
是一个集合,我们希望
的计算可以使用概率的乘法公式,可是
和
中的个体并不能保证是相互独立的,所以不能直接对个体进行运算。
现在通过部件检测子,将行人个体拆分成部件,那么状态变量可以表示为
,其中
分别表示部件的类型
,类似的观测变量可以直接定义为:
,其中
分别对应不同部件检测到的个数。
将人体拆分成部件之后可以去掉遮挡的部件,使剩下的部件尽可能的相互独立,然后就可以使用概率的乘法公式了。
假设:
所有的行人行走在一个平面上
相机拍摄角度是俯视
根据假设,我们可以认为如果一个行人中心点的y坐标越小,其深度值越高,即离摄像头越远(这里图像的坐标是从左上角开始的)。
![3Dassumption.png enter description here](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220210383-428403196.png)
于是通过目标区域的重叠程度可以判断是否发生重叠,发生重叠之后可以通过深度信息判定哪个部件被遮挡,进而将被遮挡的部件去除。去除了遮挡部件的状态变量可以表示为,其中
表示
部件中的第
个部件,
表示没被遮挡的
部件的个数。
这样,公式(1)可以写成
![](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220213023-1046539470.png)
那么每个部件下的条件概率该如何计算呢?以部件为例,
表示真实的
部件集合有
现在检测到集合
的概率。这相当于一个检测问题,包括正确检测和错误检测。错误检测包括误检和漏检,而正确检测又需要考虑和对应真实部件的匹配的概率问题。
![](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220216648-1066220722.png)
其中分别表示正确检测(success detected)、误检(false alarm)、漏检(false negative),
分别表示对应的部件集合。
分别表示误检率和漏检率,
则表示检测正确率,而
表示
与
匹配的概率,
就是
匹配的状态,假设
服从高斯分布,而
定义如下:
![](https://images2015.cnblogs.com/blog/1027162/201609/1027162-20160915220222695-433638578.png)
分别表示在验证集中误检样本个数,正确检测样本个数以及真实正样本的个数。
是归一化因子,使
,
反映的是正确检测和错误检测的相对重要性。
现在还有一个问题,如何确定匹配对?
文中使用的是最小距离匹配,计算检测部件和真实部件
的距离举着
,然后寻找最小的距离,将对应的
配对,此时应该有个距离最大阈值,超过这个距离被认为没找到匹配,于是在
中找到所有的匹配点,也就确定了
和对应的
。
行人检测方法主要过程
分别对各个部件训练检测子
对训练集提取小边特征
使用Real AdaBoost训练强分类器
使用强分类器训练nested cascade detector
使用各个部件的验证集初始化参数
匹配检测部件和真实部件
统计正确检测集,误检集合漏检集
由匹配对间的距离学习高斯分布
使用4种检测子扫描待检测图像,检测到四种部件的集合
将
和
检测的结果初始化为真实行人的状态
,然后对这些行人拆分成部件(按部件的定义),根据
坐标去除遮挡部件,获得
将部件检测子检测到的结果与初始化的状态进行匹配
循环 i=1 to m (m是检测到的行人个数)
计算联合似然函数值
以及
如果
,则令
输出
作为最终的检测结果
补充与分析
目标遮挡: 如果检测到的一个部件的重合区域占了该部件的
,则认为该部件被遮挡
由于摄像头的视角是俯视的,所以如果一个行人被捕捉到,最起码其Head-Shoulder部件一定能被检测到,所以在搜索过程的初始化阶段,选择
和
作为初始状态
该算法可以认为是使用
和
检测行人目标,然后通过使四个部件检测子的结果得到联合似然函数值最大去剔除其中错误检测的部分