Tracking without bells and whistles(Tracktor) 论文简单解读
主要工作:
    提出一个基于检测器的多目标跟踪框架。
        主要贡献:
- 开发一种新型多目标跟踪系统(通过将检测器生成的目标边界框与下一帧的目标边界框进行临时配准 )。
 - 引入基于行人重识别孪生网络的方法(通过将行人重识别失效匹配失效重新激活匹配上的失效追踪,并以被匹配的目标定位作为当前帧的位置 )以及结合相机运动补偿的技术构建动态模型(借助强化的相关系数最大化实现图像配准功能,并解决因相机运动不稳定导致帧间目标位移过大的问题 )。
 - 深入分析了多目标跟踪系统在常见故障状态下的表现(包括光照不足、物体尺寸小及帧率低等典型应用场景 ),发现现有专门的追踪算法均无法超越本研究提出的基于检测器回归的方法。
 - 构建了一个创新性的多目标跟踪框架(引入真实数据辅助的方式优化追踪算法流程 ),并进行了一个具有前沿意义的研究拓展(例如采用真实数据替代追踪过程中的关键步骤如定位校准、边界框回归及运动建模等环节 )。
 
逐帧跟踪方式

如图所示,对于给定帧:
通过将每个跟踪在前一帧t-1中的边界框输入至检测器,从而获得当前帧t的目标边界框b^t及其分类置信度s^t. 利用各跟踪对应的分类置信度s_k^Tt来抑制可能被遮挡的对象. 借助目标检测器,在t^{th}帧上获取了完整的候选区域集合\mathcal{D}^{T}. 从候选区域集合\mathcal{D}^{T}中筛选出与当前目标边界框b^{T}交叠度较低的对象,并将其作为新的追踪候选.
整体跟踪流程
伪代码表示
基于公共测试集的整体跟踪流程可以通过以下伪代码实现(不包括行人重识别与运动模型)
单个视频序列由有序排列的图像组成,
I = \{i_0, i_1, \dots, i_{T-1}\},
其中i_t代表第t帧的图像。
公共检测集合为:
D = \{D_0, D_1, \dots, D_{T-1}\}
其中每个t_i \in D_t
为目标时刻t_i
生成的一个检测结果列表。
目标追踪轨迹集合定义为:
T = \{T_1, T_2, \dots,T_k\}
其中每个轨迹元素满足:
T_k = \{b_{t^k}_1,b_{t^k}_2,\dots,b_{t^k}_N | 0\leq t^k_1,t^k_2,\dots,t^k_N\leq T-1\}
每个b_t^k = (x,y,w,h)代表目标在时刻t
的位置坐标。
T, T_{active} \leftarrow 0;
for i_t D_t \in zip(I,D) do
B , S \leftarrow 0;
for T_k \in T_{active} do
//获取跟踪上一帧的边界框
b_{t-1}^k \leftarrow T_k[-1];
//预测跟踪在当前帧的边界框和分类得分
b_t^k, s_t^k \leftarrow dectector.reg and class(b_{t-1}^k);
//利用分类得分kill掉可能被遮挡的目标
if s_t^k < \sigma_{active} then
T_{active} \leftarrow T_{active} - {T_k};
T \leftarrow T + {T_k};
//添加当前帧跟踪边界框以及跟踪分类得分
else
B \leftarrow B + {b_t^k};
S \leftarrow + {s_t^k};
//利用NMS kill掉被遮挡跟踪
B \leftarrow NMS (B, S, \lambda_{active});
//将kill掉的跟踪从激活跟踪中剔除
for k, T_k \in T_{active} do
if k \notin B then
T_{active} \leftarrow T_{active} - {T_k};
T \leftarrow T + {T_k};
//将未被剔除的边界框添加到对应跟踪轨迹中
for T_k b_t^k \in zip(T_{active}, B) do
T_k \leftarrow T_k + {b_t^k};
S \leftarrow 0;
//利用检测器改善检测集的边界框以及得到分类分数
for d_t \in D_t do
d_t, s_t \leftarrow detector.reg and class(d_t);
//利用分类得分剔除被遮挡检测
if s_t < \sigma_{active} then
D_t \leftarrow D_t - {d_t};
else
S \leftarrow S + {s_t};
//利用NMS kill掉被遮挡的检测
D_t\leftarrow NMS(D_t, S, \lambda_{new});
//利用IoU将检测与跟踪进行匹配
for d_t\inD_t do
forb_t^k \in B do
if IoU(d_t, b_t^k)>\lambda_{new} then
D_t \leftarrow D_t - {d_t};
//匹配剩余的检测初始化为新跟踪(如果有reid模块,则在初始化新跟踪之前会进行reid)
for d_t \in D_t do
T_k \leftarrow 0;
T_k \leftarrow T_k + {d_t};
T_{active} \leftarrow T_{active} + {T_k};
T \leftarrow T_{active};
行人重拾别流程
- 生成未激活追踪与匹配剩余检测间的外观模型距离矩阵。
 - 计算未激活追踪与匹配剩余间的iou矩阵。
 - 通过结合iou矩阵和reid阈值生成mask矩阵。
 - 应用mask将距离矩阵中不可行匹配对应的元素置为极大值。
 - 基于调整后的距离矩阵执行二元分配过程。
 - 将匹配上的未激活追踪的位置更新为对应检测位置,并对长时间未能被重新检测到的追踪进行终止标记;随后将尚未被终止的状态下仍未能被重新检测到的对象初始化为新的追踪对象。
 
个人看法
通过检测器推断跟踪在当前帧内的边界框并获得相应的分类分数从而实现了边界框的高度精确性同时也得出了目标被遮挡的状态。
精确的边界框可以直接作为跟踪在当前帧的位置这可减少false positives(FPPs)无需依赖额外的检测来更新跟踪位置。
基于分类分数来进行tracking termination操作可以一定程度地解决由于遮挡带来的追踪困难。
得益于检测器的高度准确性经过非最大值抑制(NMS)结合tracking termination的方法改进后的追踪预测能够完全替代传统的detection-based tracking流程从而避免了重复应用tracking termination的操作。
在此改进方案中匹配阶段不再采用匈牙利算法而是采用了逐个配对的方式这显著降低了identity switch的概率(IDSW)。具体而言未被配对的目标继续维持原有的追踪状态而未被配对的对象则用于初始化新的追踪实例这种机制大幅提升了整体追踪性能指标MOTA值。
此外该测试套件包含完整的代码实现包括GitHub仓库中的主Tracking_wo_BNw.py文件以及其对应的Google Colab版本这些资源提供了详细的损失函数定义其中一对分类损失项特别针对传统detection-based方法未涉及的部分进行了优化以提高模型泛化能力。
