结构性约束事件聚合下的在线多目标跟踪方法
读‘J.H. Yoon, C.R. LEE, et.al., Online Multi-Object Tracking via Structural Constraint Event Aggregation [C], CVPR2016’笔记。
对我而言,这篇文章的主要贡献点在于提出一种结构性约束事件聚合的方法用于data association和mis-detection 的recovery。
Structural Constraint
object的状态表示:分别表示t帧中第i个目标的location,velocity,size。这里表示速度的符号和我们常用的不大一样,为了更好的理解全文,我们沿用文中的符号。 那么t帧中所有的目标状态集为
,
,
是目标的个数。
任意两个目标之间的结构信息使用相对位置和相对速度来表示
损失函数
关联矩阵,
分别表示目标和检测的个数,t时刻检测量的状态表示为
,
表示所有的检测量,那么数据关联问题可形式化如下:
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104136537-1689009248.png)
显然约束的第一项保证每一个观测量最多只对应一个object,第二项保证任一个目标要么对应唯一一个观测量,要么mis-detected,最后一项显然最差情况下目标都被漏检。
为了适应相机发生较大移动的情形,文中认为在连续帧图像中目标之间的相互结构关系不会发生太大变化,于是就将结构信息加入到了数据关联的损失函数中了,希望assignment能够保持结构信息。在assignment过程中,先匹配一对目标与观测量,称为锚点,锚点对齐之后利用结构信息匹配剩余的目标和观测量,这样最终计算出损失。使损失最小的assignment就是得到的关联矩阵了。
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104136927-1577466658.png)
这个式子我觉得理解的有问题,我认为应该是一个集合,是所有可能的assignment的loss的集合,然后寻找最小loss对应的assignment。所以不应该有前面的求和符号吧,而应该补充
式子中第一项表示对应的锚点
,其相异性
分别表示size和appearance上的相异性
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104138927-83677261.png)
计算size相异性,分别对应目标和observation的高和宽,计算表观的非相似性时使用的是巴氏距离,根号里面表示直方图分布。
表示锚点
匹配后,
之间的相异性。
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104140615-1677060283.png)
上面下的第三项就是添加结构约束下位置的相异性
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104141490-1287996928.png)
上面是将
和
间的相对关系转移到以
对齐
的空间上,然后计算
和待匹配的
之间的非相似性,相似性使用的是overlap ratio。
是指box bounding。
Event Aggregation
使用上面的loss function能够找到最终的assignment,但是需要注意的是对于同一个assignment,如果选择不同的锚点对,那么得到的损失值也是不相同的。比如目标(a,b,c)和观测(1,2,3),对于同一个匹配(a,1),(b,2),(c,3),我们在对齐(a,1)时不能保证后两对对齐,同样的对其其他对时也不能保证剩余的对对齐。为了更加客观公正的评价assignment,文中将属于同一个assignment的不同锚点对条件下的损失聚合起来,然后使用均值后的损失评价该assignment的损失
对于某个Assignment,
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104144537-237500501.png)
注意这个式子和(2)是不一样,前面求和下有的约束表示该assignment对齐
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104145349-332623508.png)
这里使用匹配的点对数计算均值,以方便进行对比。
上面两个过程可以通过下图来理解
![1480427585856.jpg enter description here](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104146396-827061397.png)
看到前面的时候我就疑惑,遍历所有的assignments应该是NP-hard问题吧,不可能实现啊?!所以文章中给出了一种简单有效的event initialization and reduction方法。
首先采用门限策略,限制能够匹配的点对
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104147849-1351259929.png)
不符合条件的点对保持,这样就会剔除好多assignments。
进一步对点进行划分成较小区域,使得区域之间不可能存在关联,那么只需要遍历小区域内的assignments,找到最优的assignments之后在组合起来形成大的assignment,当然在partition的过程中,structural constraint也被划分。文中将每一个划分中目标的个数限制在5以内,那么最多的assignments应该是5!(不考虑mis-detected),划分的方法可以采用基于距离的Kmeans方法。
initialization and reduction过程如下图所示
![1480428292502.jpg enter description here](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104148881-2061137989.png)
Event Aggregate算法如下
![1480428341815.jpg enter description here](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104149709-581396047.png)
Two-Step Online MOT
假设: Since the structural constraints of objects tracked in the previous frame have been also updated with their corresponding detections, their constraints are more robust robust than mis-detected objects. 所以使用structural constraints 能够在一定程度上缓解mis-detected的误差。
所以文中方法将MOT分为两个步骤:数据关联和恢复mis-detected objects。其过程见算法2
![1480469315393.jpg enter description here](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104150427-1251311418.png)
数据关联使用的是前面提到的event aggregate的方法,现在来说说漏检的目标怎么恢复的。
什么叫做漏检目标恢复?如果有一个目标在t-1时刻检测到了,t时刻没有检测到,而t+1时刻又检测到了,我们称该目标t时刻漏检,t+1时刻恢复。这么看来,对于之前检测到的目标,而当前没有检测到的目标都应该保存其状态,以备下次恢复,这就会导致大量内存的占用,所以文中限定了漏检帧的帧数,超过一定阈值就认为对应轨迹终止,后面会讲到。这里先来看如何恢复漏检目标。
在前一帧中检测到的目标记为,没有找到对应匹配的目标集
,
中对应的structural constraint表示为
,匹配的目标集和未匹配样本的structural constraint记为
,当前的检测集为
.
首先可以使用前面提到的structural constraint event aggregate(SCEA)对和
进行关联,记录下关联的点,更新目标状态
,(我觉得size同样应该保存)。那些没有关联的观测量以及虚点
的集合记为
.mis-detected objects的恢复就是指通过结构约束和已经匹配的点
找到
和
中的匹配关系。
理一理时序关系:是t-1时刻的量,
是t时刻的量,
是t+1时刻的量。所以
在t-1时刻漏检了。
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104159662-975884170.png)
其中分别对应
的基数
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104200396-576330324.png)
发现(12)式和(3)式的不同点在于(12)式没有指定锚点,这是因为匹配misdetected objects是在已经获得一定量的关联点条件下进行的,所以所谓的锚点存在于和
中。
前两项分别是size和appearance的相异性,不赘述了。看看structural constraint怎么嵌入进去的
![](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104201177-859734376.png)
这个式子我们能够看到其实是和
相对变化最小的以匹配成功的目标,以
为锚点的情形下计算
的相异性。
对C的可以使用匈牙利算法求解
其中
分别对应匹配点的相异性和漏检的相异性。
综上,当前时刻的关联关系为. 得到匹配后的点之后,为了轨迹的光滑,可以使用kalman filter对每一个轨迹进行滤波操作。
同样的此时可以使用kalman 滤波对当前objects 的structural constraint进行滤波,以备下一帧使用。
轨迹的起始和终止,任何一个MOT方法都应该能够处理新轨迹的诞生和轨迹的终止。在本文方法中:
轨迹诞生:如果当前未匹配的detections和过去几帧中的所有未匹配点的距离(size和appearance)都大于一个阈值,就认为这个detection是新出现的点,为其分配存储位置以及对应的structural constraint
轨迹终止:如果一个目标连续两帧没有关联到detections,就认为其代表的轨迹终止
Experiments
![1480472630478.jpg enter description here](https://images2015.cnblogs.com/blog/1027162/201611/1027162-20161130104203709-1283995022.png)
AR: average rank
TC_ODAL: Robust online multi-object tracking based on tracklet confidence and online discriminative appearance learning, CVPR2014
RMOT: Bayesian multi-object tracking using motion context from multiple objects, WACV2015
NOMT-HM: Near-online multi-target tracking with aggregated local flow descriptor, ICCV2015
ODAMOT: Online Domain Adaptation for multi-object tracking, BMVC2015.
MDP: Learning to track: Online multi-object tracking by decision making, ICCV2015
代码正在获取中。。。