首页 > 代码库 > 基于人体部件检测子的行人检测

基于人体部件检测子的行人检测

基于人体部件检测子的行人检测

edgelet feature
body parts
human detection
Jointly likelihood function

读“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

使用技术分享技术分享表示小边特征算子边缘点的位置和正交向量的集合,技术分享是小边的长度。假设小边特征算子的区域面积为技术分享,然后对于待提取特征的sub-window,在每一个像素点上计算由该像素点起始地技术分享区域与小边特征算子的相似度,作为该像素点对应于该特征算子的特征,也称为图像与小边特征在该像素点的亲和度(affinity)。

假设图像的边缘图像为技术分享,技术分享表示边缘点对应的正交向量集合。那么图像在点技术分享处和小边特征算子的亲和度为:

$$ S(p)=\frac{1}{l}\sum_{j=1}^lM(p+u_j)||. $$

这样大小为技术分享的sub-window对应每一个小边特征算子都能提取到技术分享个特征,图像的边缘图像可以使用技术分享的Sobel算子得到。

由于这里的小边特征在文中使用时是用来构建弱分类器,因此为了速度,没必要计算的太准确,所以上式中正交向量的内积就可以近似得到。

将方向向量在技术分享量化为6个区间,计算两个方向向量所在区间间隔,按如下近似方向向量内积:

技术分享

技术分享分别表示边缘图像和小边点对应的量化后的值,那么亲和度可如下计算:

技术分享

文中使用的小边特征算子包括4-12个像素点,有线段,1/2圆周,1/4圆周,1/8圆周,以及这些小边与其对称小边组成的对称对。在技术分享的窗口中提取了技术分享维特征,虽然没有具体说选择的小边特征算子是什么。个人认为在使用小边特征时应该先构造一定量的小边特征算子,然后再提取小边特征。


部件检测子
文中将人体分成3个部件:Head-shoulder,Torso,Legs,然后加上整体Full-body构造了四个检测器。每个检测器都是使用nested cascade detector(参见嵌入级联检测器)。

人体部件的定义图示:

技术分享

bodyparts.png


多人联合似然函数

首先定义状态变量技术分享,技术分享是真实的行人个数,技术分享表示第技术分享个行人的状态,而每个行人的状态使用位置和大小来刻画,即技术分享。这样所谓的状态变量记录的就是真实行人的位置和大小信息。

然后定义观测变量技术分享技术分享是检测到的行人个数,技术分享表示第技术分享个人检测到的状态,同样使用位置和大小刻画。

现在检测到观测变量技术分享,我们希望推导出真实的状态变量技术分享,可以使用最大化后验概率(MAP)计算。

技术分享

技术分享 是一个集合,我们希望技术分享的计算可以使用概率的乘法公式,可是技术分享技术分享中的个体并不能保证是相互独立的,所以不能直接对个体进行运算。

现在通过部件检测子,将行人个体拆分成部件,那么状态变量技术分享可以表示为技术分享,其中技术分享分别表示部件的类型技术分享,类似的观测变量可以直接定义为:技术分享,其中技术分享分别对应不同部件检测到的个数。

将人体拆分成部件之后可以去掉遮挡的部件,使剩下的部件尽可能的相互独立,然后就可以使用概率的乘法公式了。

假设

  1. 所有的行人行走在一个平面上

  2. 相机拍摄角度是俯视

根据假设,我们可以认为如果一个行人中心点的y坐标越小,其深度值越高,即离摄像头越远(这里图像的坐标是从左上角开始的)。

技术分享

3Dassumption.png

于是通过目标区域的重叠程度可以判断是否发生重叠,发生重叠之后可以通过深度信息判定哪个部件被遮挡,进而将被遮挡的部件去除。去除了遮挡部件的状态变量可以表示为技术分享,其中技术分享表示技术分享部件中的第技术分享个部件,技术分享表示没被遮挡的技术分享部件的个数。

这样,公式(1)可以写成

技术分享

那么每个部件下的条件概率该如何计算呢?以技术分享部件为例,技术分享表示真实的技术分享部件集合有技术分享现在检测到集合技术分享的概率。这相当于一个检测问题,包括正确检测和错误检测。错误检测包括误检和漏检,而正确检测又需要考虑和对应真实部件的匹配的概率问题。

技术分享

其中技术分享分别表示正确检测(success detected)、误检(false alarm)、漏检(false negative),技术分享分别表示对应的部件集合。技术分享分别表示误检率和漏检率,技术分享则表示检测正确率,而技术分享表示技术分享技术分享匹配的概率,技术分享就是技术分享匹配的状态,假设技术分享服从高斯分布,而技术分享定义如下:

技术分享

技术分享分别表示在验证集中误检样本个数,正确检测样本个数以及真实正样本的个数。技术分享是归一化因子,使技术分享,技术分享反映的是正确检测和错误检测的相对重要性。

现在还有一个问题,如何确定匹配对技术分享?
文中使用的是最小距离匹配,计算检测部件技术分享和真实部件技术分享的距离举着技术分享,然后寻找最小的距离,将对应的技术分享配对,此时应该有个距离最大阈值,超过这个距离被认为没找到匹配,于是在技术分享中找到所有的匹配点,也就确定了技术分享和对应的技术分享


行人检测方法主要过程

  1. 分别对各个部件训练检测子

    • 对训练集提取小边特征

    • 使用Real AdaBoost训练强分类器

    • 使用强分类器训练nested cascade detector

  2. 使用各个部件的验证集初始化参数

    • 匹配检测部件和真实部件技术分享

    • 统计正确检测集,误检集合漏检集技术分享

    • 由匹配对间的距离学习高斯分布技术分享

  3. 使用4种检测子扫描待检测图像,检测到四种部件的集合

  4. 技术分享技术分享检测的结果初始化为真实行人的状态技术分享,然后对这些行人拆分成部件(按部件的定义),根据技术分享坐标去除遮挡部件,获得技术分享

  5. 将部件检测子检测到的结果与初始化的状态进行匹配

  6. 循环 i=1 to m (m是检测到的行人个数)

    • 计算联合似然函数值技术分享 以及技术分享

    • 如果技术分享,则令技术分享

  7. 输出技术分享作为最终的检测结果


补充与分析

  • 目标遮挡: 如果检测到的一个部件的重合区域占了该部件的技术分享,则认为该部件被遮挡

  • 由于摄像头的视角是俯视的,所以如果一个行人被捕捉到,最起码其Head-Shoulder部件一定能被检测到,所以在搜索过程的初始化阶段,选择技术分享技术分享作为初始状态

  • 该算法可以认为是使用技术分享技术分享检测行人目标,然后通过使四个部件检测子的结果得到联合似然函数值最大去剔除其中错误检测的部分


基于人体部件检测子的行人检测