ECCV 2022 Multiple People Tracking in Group Dance Challenge(DanceTrack)优秀方案总结
ECCV 2022 Multiple People Tracking in Group Dance Challenge(DanceTrack)优秀方案总结
1st,MOTR+YOLOX
🐋技术报告:https://motcomplex.github.io/report/dancetrack_MOTRv2.pdf
整合了YOLOX强的检测能力与MOTR强的时序跟踪能力,存储YOLOX的检测结果(应该也是用了NMS之后的检测结果吧),并用于形成MOTR的detection query(MOTR中detection query被替换成了带有初始anchor位置编码的detection query,同时输出的bbox框是基于anchor的偏置($\Delta x, \Delta y, \Delta h , \Delta w$)而不是直接预测坐标位置,因此模型更易收敛,作者称这样的MOTR为:anchor-based MOTR),最后将detection query和track query(以上一帧的检测bbox作为输入)送入MOTR的Decoder分别预测新出现目标和之前目标的位置。除了更改原始MOTR的detection query为anchor-based query之外,作者还做了以下更改:
- 数据增强后的GT框将根据图像边界进行裁剪;
- 在训练anchor-based MOTR时,使用了YOLOX训练使用的HSV色彩空间增强;
- 取消了原始MOTR中手动增加假目标,删除真目标的数据增强操作(MOTR主要为提升模型对目标消失和新目标进入的鲁棒性,但是Dancetrack中目标数基本不发生变化)。
- 在训练anchor-based MOTR时,用上一帧扰动后的GT框作为带噪声的query去指导MOTR正确回归该GT框目前所在的位置,消除由于匈牙利匹配带来的随机性,去除训练噪声加快收敛。
然后就是其他一些比较常用的训练、跟踪后处理策略:
- 混合多个数据集训练,融合了CrowdHuman与Dancetrack训练anchor-based MOTR;
- 将YOLOX每次的检测结果作为anchor-based MOTR的初始anchor输入(推理不需要规定query的个数);
- 缝合较短的轨迹;
最后附上作者所有这些策略的消融实验:
official—原始MOTR;baseline—融合第一处更改的前3点;yolox—将YOLOX的检测结果作为MOTR的初始化detection query;crowdHuman—融合多个数据集训练MOTR;query denoise—训练时使用增强后的前一帧GT框去指导MOTR正确预测该GT框,消除匈牙利分配GT框时的随机性;剩下的轨迹缝合,合并两段相距间隔不超过不超过100帧,且在此期间其余轨迹段都稳定的(没有新增轨迹也没有轨迹终止)轨迹(真的一点儿不用外观相似度吗?)
2nd, Cascaded Buffer-IoU (C-BIoU) Tracker
🐋技术报告:https://motcomplex.github.io/report/dancetrack_cbiou_report.pdf
🍂总结:
针对DanceTrack这类快速运动大姿态变化的待跟踪目标,提出了一种带缓冲区域的IoU计算方式,B-IoU的计算方式如上图所示,基本思想就是将目标框以恒定宽高比例进行放大,再计算边界框之间的IoU,这样的一种方式可以缓和由于相邻帧目标运动过快导致IoU过小的无法正确关联的问题(之前也有弥补IoU过小的问题,是通过对目标的运动建模——卡尔曼滤波来实现的,但是针对DanceTrack这个数据集来说KF之后的结果不是特别好),除此之外作者还用了ReMOTs里面的轨迹层次聚类方法,去合并真实身份ID相同的轨迹段,具体做法可以参考下方ReMOTs的阅读笔记和原文。
ReMOTs:
下面这个图是作者的关联流程,大致就是SORT的策略,作者用了两种不同的尺度执行两级关联,同时对于过长时间仍未更新的轨迹将会被终止。需要注意的是作者没有使用卡尔曼滤波进行目标位置的更新,而是通过轨迹之前几帧的位置计算平均速度然后以此估算目标在之后几帧的位置,下方是估算目标在$t+\Delta$帧时刻位置的计算公式:
$$
s^{t+\Delta}=o^{t}+\frac{\Delta}{n} \sum_{i=t-n+1}^{t}\left(o^{i}-o^{i-1}\right) ,\boldsymbol{o}=(x, y, w, h)
$$
最后附上作者的跟踪实验结果,可以看到作者在单使用CB-IoU在线策略时就可以达到了60.6的HOTA,相比之下ByteTrack只有47左右,OC-SORT只有55.1。然后使用了融合多个尺度检测结果和轨迹合并(ReMOTs里面的层级聚类)后处理后可以达到66.6。
🐋技术报告:https://motcomplex.github.io/report/dancetrack_mt_iot.pdf
🍂总结:
在检测器和轨迹关联方面做了一些改进,检测器方面使用Crowdhuman和MOT20作为预训练集,再在DanceTrack上面训练,增强了检测被遮挡目标的能力,侧面提升了轨迹的连续性;轨迹关联方面有四个不同,一是与OC-SORT类似未匹配的轨迹的最后的一次观测结果与低分检测框进行匹配;二是对于低分框仍未匹配的轨迹,暂时用KF滤波的结果作为其当前帧的观察更新轨迹;三是对于存在的轨迹,如果其置信度分数低于某个阈值则认为轨迹被遮挡,该轨迹不与任何检测框配对(减少错分配IDs, 存在疑惑如果某个轨迹是低分,然后一直无法匹配,其置信度也无法更新变高,轨迹不就断了吗?);最后一点改动(也是最关键的改动)就是==将关联时基于面积的IoU度量更改为了基于bbox高度是否相同的度量==,作者提出使用的原因是在DanceTrack场景中目标的在垂直方向的变化很小,且变化了一般对应着目标前后的移动,因此使用高度度量能很好地区分目标之间的相对运动,避免错分配。此外作者还时测试了一下现阶段基于面积的不同IoU策略的影响。整体的消融结果如下图所示。
最后作者还尝试了两种在MOT17-20上有效,但是在DanceTrack上无效的策略:相机运动补偿(BoT-SORT里面的)和模型集成。
3rd,OC-SORT+ReID
🐋技术报告:https://motcomplex.github.io/report/dancetrack_DLUT_IIAU.pdf
总体上来说方法就属于OC-SORT+ReID,匹配总共分为三个阶段,第一阶段使用高分检测与轨迹用KF滤波之后的结果、目标速度和方向以及单独ReID网络提取的目标外观特征三种线索进行匹配;第二阶段使用低分检测框与未匹配的轨迹用KF滤波之后轨迹框的IoU结果作为线索(匹配度量矩阵)进行匹配;第三阶段使用未匹配轨迹最近一次的关联框与未匹配的高分轨迹用IoU作为线索进行匹配以恢复轨迹,轨迹恢复后会对消失期间的轨迹进行插值,并用插值后的轨迹结果调整卡尔曼滤波器的参数,以减少在轨迹消失期间没有观测更新导致的卡尔曼滤波器的过大预测噪声。作者还将YOLOX中所用的bbox标签指定策略SimOTA换成了TAL(Task Alignment Learning),结合bbox预测的分类分数和IoU分数确定该bbox是否是正样本。具体计算公式如下:
$$
t=c l s^{\alpha} \times i o u^{\beta}
$$
但是作者并未对这两个加权参数和TAL损失相较于SimOTA损失的性能作分析对比,无法确定TAL策略的单独性能。
最后作者还提出了联合检测和目标特征建模的一体化网络,大致结构如上图所示,利用检测bbox和ROI Align提取目标区域的特征,避免了重新使用一个单独的网络带来的模型参数量和运算量的增加。还有还有一个轻量化的网络具体做法是将检测器由YOLOX-X换为YOLOX-S,同时将YOLOX head中标准卷积换为了$5\times5$的深度可分离卷积。不同模型的实验结果如下:
感觉作者的方法也不是很难想到,我也想到并且尝试了使用ReID特征进行关联,但是实验效果却相差甚远完全没有达到文章中所说的结果,也不知道是否有其他的调整,期待一波作者开源代码。