基于人体部件小边特征的多行人检测和跟踪算法
基于人体部件小边特征的多行人检测和跟踪算法
读"B. Wu, R. Nevatia. Detection and tracking of multiple, partially occluded humans by Bayesian combination of edgelet based part detectors[J],IJCV,75(2),247-266" 笔记
文章主要贡献点
-基于小边特征(edgelet feature) boosting的人体部件检测子
-使用贝叶斯方法combine人体部件检测结果实现部分遮挡人体的检测
-自主的多行人跟踪方法,该方法可以处理时序队列中人体部分遮挡和相互遮挡问题
行人检测
对于小边特征 和人体部件检测子以及Joint likelihood function for combined detector可以参见另一篇文章
B.Wu, R. Nevatia. Detection of Multiple,Partially Occluded Humans in a Single Image by Bayesian Combination of Edgelet Part Detectors[C], ICCV,2005.
对应的阅读笔记:
这里仅记录一些不同之处。
Multi-View Part Detector
为了解决人体平面内左右旋转的检测问题,类似于嵌入级联分类器中人脸检测使用的multi-view人脸检测,这里首先寻找不同的视角下的行人部件,然后将不同视角下的相同部件的样本集合以来以训练该部件在不同视角下共同的特征。
该过程的结构如下:
在检测过程中,首先将sub-window输入上图的root节点然后将判断该图像是哪一类“left profile”?"Frontal/real"?"right profile"?如果都不是则直接将该图像判定为非human区域,由于单帧图像中非行人区域较多,所以该步骤能够过滤掉很多非目标区域,加快检测速度,对于行人区域则按视角分到不同的类中。
将不同类中的相同部件在一起训练部件检测子。
The main advantage of this algorithm is that the features selected are shared among different view point categories of the same object type. This is much more efficient than learning detectors for individual view points separately.
Bayesian Combination of Part Detectors
和Joint likelihood function那节内容不同的是那里用二元组刻画部件状态,而这里使用四元组刻画,分别表示该部件的类型标签、中心位置坐标、大小、和可见度(没有被遮挡部分占整个部件的比率)。
同样的行人分成部件,观测和初始化状态匹配后最大化后验概率(MAP),这种方法还是偏重于相信FB和HS两个部件检测子的结果,T和L检测子用来验证检测结果。
该检测系统有三种输出
original responses: 各个部件检测子检测的结果,对于同一个目标,同一个部件检测子可能获得好多检测输出,因为sub-window是2pixel滑动的
merged responses: 对检测子的original response使用clustering方法聚合,使最终每个目标只对应于该部件检测子的一个响应,clustering可以随机选定一个响应,然后把和它重叠度很大的响应合并起来。怎么合并文中没具体说,个人认为可以计算这些响应的状态均值。
combined response: 有merged responses使用上述模型最终得到的响应就是combined responses。'One combined response has several matched part responses.'(combined response是行人假设,当然包含部件的响应)
行人跟踪
在每一帧图像上使用上一节的行人检测方法得到了许多检测响应,那跟踪就可以看作是不同帧间响应的匹配问题(data association)。
响应间的亲和度
文中使用original responses、merged responses和combined responses一起用于跟踪。
跟踪过程中对部件的刻画扩展为,其中添加个两个变量分别表示该响应的置信度(由real adaboost给出)和该响应的表观模型。
combined response 表示为.
于是连续两帧间相同部件响应的亲和度可以如下定义:
其中
分别是位置、大小和表观的相似度,是巴氏距离。分别是归一化因子,文中没有指明将哪些量归一化,但从后续寻找匹配过程中寻找的是矩阵最小值而不是行或列最小值,随意推测这里应该是对同意不见检测子所有pair之间进行归一化,假设t帧有m个响应,t+1帧有n个响应,那么归一化因子应该是指对个配对的归一化
combined responses的亲和度如下计算:
表示combined response的第个部件,示性函数是指两个部件的可见度都要超过一定的阈值。
有了affinity之后可以关联前后帧的部件。
Suppose at time t of an input video, we have n human hypothese ,whose predictions[1] at time are ,and at time we have we have responses . First we compute the affinity matrix A of all pairs. Then in each step, the pair, denoted by , with the largest affinity is taken as a match and the corresponding column and row of A are deleted.
轨迹初始化
假设检测子的正确率为,那么对于一个T帧的序列而言,T个检测响应全部错误的概率为,但是现实情况下,如果前一帧响应出错,往往随后一帧出错的概率也很大,因此不能如此计算。文中定义连续T帧错误响应的概率为,定义T帧轨迹的初始化的置信度为:
检测子精度越高,这里的越大。
如果初始化置信度大于某一个阈值,则认为生成一个可信轨迹(confident trajectory)
这里在定义置信度是使用的T帧没有全部检测错误的概率,可以理解为存在正确检测的概率,个人觉得并不合理,而使用T帧全部检测正确的概率应该会更容易解释。
同样适用元祖表示行人轨迹,分别表示combined response、动态模型、和部件检测响应的表观模型向量。这里D用来记录Kalman滤波所需要的模型参数,使用Kalman滤波能够预测各部件在下一帧的位置,以计算Affinity matrix。
轨迹延展
该部分包括数据关联和均值漂移两种情况。
首先对combined responses进行关联匹配,对于没有找到匹配的前一帧图像中的combined responses和该帧中不属于combined responses的部件进行匹配。
其次对于前一帧出现的响应在该帧没能找到匹配或者亲和度很低的使用meanshift 方法估计在该帧中出现的位置。
meanshift使用的概率图有三部分组成:动态模型产生的概率图、检测概率图和表观概率图.
-可以有动态模型获得
-如下计算
表示如果该像素点在被部件检测子检测到,则加上该检测子的置信度,文中指出这里算分部件检测子是original responses。 是所有检测子的平均漏检率。
==个人觉得这个式子是存在问题的,因为original responses非常多,即使每个response的执行都都很小,那么也可能会使,所以我觉的这里应该计算均值。
-表示的是图像在人体像素值分布下对应的概率图。首先肯定要计算人体区域像素的直方图,然后将图像映射到该直方图概率图上。
首先收集标定一定数量的行人区域,然后计算其子空间(PCA),然后使用迭代的方法获取大量的行人区域,最后统计这些区域内的像素值的概率直方图。
最终的概率图为:
只能说这个meanshift的设计是相当粗糙的,但好在检测子的效率较高,使用meanshift的次数较少。
轨迹终止
轨迹终止的策略和轨迹初始化的策略类似,终止置信度
第一项计算的是非亲和度的平均值,奇怪的是第二项依然使用的是存在检测正确的概率,觉得应该使用的是全部检测错误的概率
Combined Tracker
轨迹的初始化、轨迹延展和轨迹的终止能够很好的实现轨迹的逐步检测,具体过程如图:
但这个过程在初始化阶段会存在部分帧中的响应延迟,所以称为这个过程为前向检测,对于初始化后的轨迹可以使用相同的方法逆时序检测若干帧以降低轨迹遗漏的响应。
总结
除了贡献点外,论文存在的不足:
没有使用到运动信息,比如tracklet
检测和跟踪是级联的关系,并没有交叉,而现实情况是检测可以基于跟踪的位置进行检测。
追踪的时候使用所有的检测响应,必将导致追踪速度太慢。
其他如文中绿色标注的问题
Kalman Filter ↩