与单目标跟踪不同,多目标跟踪是会产生新目标进入与旧目标消失。在单目标跟踪中,我们往往会使用给定的初始框,在后续视频帧中对初始框内的物体进行位置预测。而多目标跟踪算法,大部分都是不考虑初始框的。
在多目标跟踪领域,常用的跟踪策略是TBD(Tracking-by-Detection,主流)和DFT(Detection-Free Tracking)。TBD,也可叫DBT(Detection-Based-Tracking)。即在每一帧进行目标检测,再利用目标检测的结果来进行目标跟踪,这一步我们一般称之为数据关联(Data Assoiation)。
跟踪也可分为Online和offliine。在Online跟踪中,我们只能使用当前帧及之前帧的信息来进行当前帧的跟踪。而在Offline跟踪中则没有了这个限制,我们对每一帧的预测,都可以使用整个视频的信息,这样更容易获得一个全局最优解。
多目标跟踪中常见名词
- Trajectory(轨迹):一条轨迹对应这一个目标在一个时间段内的位置序列
- Tracklet(轨迹段):形成Trajectory过程中的轨迹片段。完整的Trajectory是由属于同一物理目标的Tracklets构成的。
- ID switch(ID切换):又称ID sw.。对于同一个目标,由于跟踪算法误判,导致其ID发生切换的次数称为ID sw.。跟踪算法中理想的ID switch应该为0。
多目标跟踪数据标签格式
<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <x>, <y>, <z>
其中二维情况下,x,y,z设为-1,表示忽略;三维情况下,bbox忽略。
SORT
目标状态.
在进行目标跟踪时仅仅使用了检测框的位置和大小进行目标的运动估计和数据关联,没有使用任何被跟踪目标的外观特征或者任何的重识别的算法,所以当目标跟丢时,就找不回来,只能通过检测去重新更新ID。
为了解决动作预测和数据关联,使用了两个十分高效的算法卡尔曼滤波和匈牙利算法。
- 卡尔曼滤波:将预测值和测量值进行结合,对系统状态进行最优估计的算法。
- 匈牙利算法(KM算法):假设有N个人和N个任务,每个任务可以任意分配给不同的人,已知每个人完成每个任务要花费的代价不尽相同,合理分配使得总的代价最小。代价矩阵用预测和检测的框之间的IOU。
流程:检测器得到detecions,卡尔曼滤波预测→ 计算代价矩阵→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行IOU匹配 → 卡尔曼滤波更新。
轨迹创建:检测的目标与其他轨迹的IOU都低于阈值。
轨迹删除:帧没检测出,则删除。
deepSORT:
目标状态, 即bounding box的位置和大小,以及对应的速度信息。
基于外观信息和马氏距离的代价矩阵
马氏距离,表示第j个detection和第i条轨迹之间的运动匹配度,表示由卡尔曼计算的协方差矩阵。
外观信息,表示特征描述子,.存放了第i个轨迹的100个特征描述子。计算第j个detection和第i条轨迹之间的最小余弦距离。
级联匹配
表示在最近的n帧没有与检测结果匹配上。由小到大对消失时间相同的轨迹进行匹配,保证了对最近出现的轨迹赋予最大的优先权。
最后,使用之前SORT算法中的IOU关联去匹配n=1的unconfirmed(在连续若干帧(论文中是3帧)中是否连续匹配成功,是的话则认为是新轨迹产生,标注为'confirmed')和unmatched的轨迹。
参考论文:
SORT:https://arxiv.org/pdf/1602.00763.pdf
deepSORT:https://arxiv.org/pdf/1703.07402.pdf
参考文章:
https://zhuanlan.zhihu.com/p/97449724?from_voters_page=true
https://zhuanlan.zhihu.com/p/59148865
https://blog.csdn.net/cdknight_happy/article/details/79731981
参考代码:
https://github.com/abewley/sort
https://github.com/nwojke/deep_sort