多目标跟踪 (MOT) 入门介绍

📅 2026/7/11 10:37:03
多目标跟踪 (MOT) 入门介绍
1. 相关方向这些是我所了解的多目标跟踪(MOT) 的一些相关方向。其中单目标跟踪(VOT/SOT)、目标检测(detection)、行人重识别(Re-ID) 都是非常热门的方向。而偏视频的相关方向就比较冷门。而且今年五月DukeMTMC因为隐私问题不再提供MTMCT的数据了MTMCT的研究也是举步维艰。2. 核心步骤MOT算法的通常工作流程给定视频的原始帧运行对象检测器以获得对象的边界框对于每个检测到的物体计算出不同的特征通常是视觉和运动特征之后相似度计算步骤计算两个对象属于同一目标的概率最后关联步骤为每个对象分配数字ID。因此绝大多数MOT算法无外乎就这四个步骤检测特征提取、运动预测相似度计算数据关联其中影响最大的部分在于检测检测结果的好坏对于最后指标的影响是最大的。但是多目标追踪的研究重点又在相似度计算和数据关联这一块。所以就有一个很大的问题你设计出更好的关联算法可能就提升了0.1个点但别人用一些针对数据集的trick消除了一些漏检可能就能涨好几个点。所以研究更好的数据关联的回报收益很低。因此多目标追踪这一领域虽然工业界很有用但学术界里因为指标数据集的一些原因入坑前一定要三思。3. 评价指标关于评价指标第一个是传统的标准现在已经没人用了就不介绍了。第二个是06年提出的CLEAR MOT。现在用的最多的就是MOTA。但是这个指标FN、FP的权重占比很大更多衡量的是检测的质量而不是跟踪的效果。第三个是16年提出的ID scores。因为都是基于匹配的指标所以能更好的衡量数据关联的好坏。3.1. one-pass evaluation (OPE)主要有精度和成功率两个指标3.1.1. 精度中心位置的平均误差即目标的估计中心与目标的真值中心作差在整个跟踪过程中对其求平均值。3.1.2. 成功率即交并比其中是跟踪框是真值框。3.2. MOTA其中FN指假阴性 (False Negative)FP指假阳性 (False Positive)IDSW指ID错换 (ID switches)。4. 数据集数据集用的最多的是MOTChallenge专注于行人追踪的。第二个KITTI的是针对自动驾驶的数据集有汽车也有行人在MOT的论文里用的很少。还有一些其他比较老的数据集现在都不用了。15年的都是采集的老的数据集的视频做的修正。16年的是全新的数据集相比于15年的行人密度更高、难度更大。特别注意这个DPM检测器效果非常的差全是漏检和误检。17年的视频和16年一模一样只是提供了三个检测器相对来说更公平。也是现在论文的主流数据集。19年的是针对特别拥挤情形的数据集只有CVPR19比赛时才能提交。这个是MOT16公开检测器上的结果。可以看到从17年开始MOTA就涨的很慢了。关注一下这个帧率有20Hz的算法MOTDT也是我后面要讲的一个。这个是MOT16私有检测器上的结果。可以看到检测器性能的好坏对于结果的影响非常重要。SOTA算法换了私有检测器后性能直接涨了快20个点。这个是MOT17公开检测器上这几年比较突出的算法。注意因为这个数据集用了三个检测器所以FP、FN这些指标也都几乎是16数据集的三倍。5. SORT和DeepSORT关键算法从这两个工业界关注度最高的算法说起。SORT作为一个粗略的框架核心就是两个算法卡尔曼滤波和匈牙利匹配。卡尔曼滤波分为两个过程预测和更新。预测过程当一个小车经过移动后且其初始定位和移动过程都是高斯分布时则最终估计位置分布会更分散即更不准确更新过程当一个小车经过传感器观测定位且其初始定位和观测都是高斯分布时则观测后的位置分布会更集中即更准确。匈牙利算法解决的是一个分配问题。SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样但给的输出格式不同。具体算法步骤也很简单是一个复杂度的算法。DeepSORT的优化主要就是基于匈牙利算法里的这个代价矩阵。它在IOU Match之前做了一次额外的级联匹配利用了外观特征和马氏距离。外观特征就是通过一个Re-ID的网络提取的而提取这个特征的过程和NLP里词向量的嵌入过程 (embedding) 很像所以后面有的论文也把这个步骤叫做嵌入起源应该不是NLP但我第一次接触embedding是从NLP里。然后是因为欧氏距离忽略空间域分布的计算结果所以增加里马氏距离作为运动信息的约束。5.1. SORT这个SORT的流程图非常重要可以看到整体可以拆分为两个部分分别是匹配过程和卡尔曼预测加更新过程都用灰色框标出来了。一定要把整个流程弄明白。后面的多目标追踪的大框架基本都由此而来。关键步骤轨迹卡尔曼滤波预测→使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配IOU匹配→卡尔曼滤波更新对于没有匹配上的轨迹也不是马上就删掉了有个T_lost的保存时间但SORT里把这个时间阈值设置的是1也就是说对于没匹配上的轨迹相当于直接删了。关于这点论文里的原话是首先恒定速度模型不能很好地预测真实的动力学其次我们主要关注的是帧到帧的跟踪其中对象的重新识别超出了本文的范围。5.2. DeepSORT这是DeepSORT算法的流程图和SORT基本一样就多了级联匹配Matching Cascade和新轨迹的确认confirmed。关键步骤轨迹卡尔曼滤波预测→使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配级联匹配和IOU匹配→卡尔曼滤波更新级联匹配是核心就是红色部分DeepSORT的绝大多数创新点都在这里面具体过程看下一张图。关于为什么新轨迹要连续三帧命中才确认个人认为有这样严格的条件和测试集有关系。因为测试集给的检测输入非常的差误检有很多因此轨迹的产生必须要更严格的条件。级联匹配流程图里上半部分就是特征提取和相似度估计也就是算这个分配问题的代价函数。主要由两部分组成代表运动模型的马氏距离和代表外观模型的Re-ID特征。级联匹配流程图里下半部分数据关联作为流程的主体。为什么叫级联匹配主要是它的匹配过程是一个循环。从missing age0的轨迹即每一帧都匹配上没有丢失过的到missing age30的轨迹即丢失轨迹的最大时间30帧挨个的和检测结果进行匹配。也就是说对于没有丢失过的轨迹赋予优先匹配的权利而丢失的最久的轨迹最后匹配。论文关于参数λ运动模型的代价占比的取值是这么说的在我们的实验中我们发现当相机运动明显时将λ 0设置是一个合理的选择。因为相机抖动明显卡尔曼预测所基于的匀速运动模型并不work所以马氏距离其实并没有什么作用。但注意也不是完全没用了主要是通过阈值矩阵 (Gate Matrix) 对代价矩阵 (Cost Matrix) 做了一次阈值限制。关于DeepSORT算法的详细代码解读我比较推荐目标跟踪初探 (DeepSORT)https://zhuanlan.zhihu.com/p/90835266但关于卡尔曼滤波的公式讲的不是很详细具体推导可以看看 Kalman Filter 卡尔曼滤波http://www.harlek.cn/2019/12/02/qia-er-man-lu-bo/5.3. 改进策略看到这个DeepSORT的流程图不知道大家可以想到什么优化的地方其实有几个点是很容易想到的。第一点把Re-ID网络和检测网络融合做一个精度和速度的trade off第二点对于轨迹段来说时间越长的轨迹是不是更应该得到更多的信任不仅仅只是级联匹配的优先级由此可以引入轨迹评分的机制第三点从直觉上来说检测和追踪是两个相辅相成的问题良好的追踪可以弥补检测的漏检良好的检测可以防止追踪的轨道飘逸用预测来弥补漏检这个问题在DeepSORT里也并没有考虑第四点DeepSORT里给马氏距离也就是运动模型设置的系数为0也就是说在相机运动的情况下线性速度模型并不work所以是不是可以找到更好的运动模型。6. 最新进展这是最近比较新的一些方法。工业界青睐的算法在学术界其实并不重视一方面是因为开源的原因另一方面可以看到顶会的算法都不是注重速度的通常用了很复杂的模块和trick来提升精度。而且这些trick不是一般意义的trick了是针对这个数据集的或者说针对糟糕检测器的一些trick对于实际应用几乎没有帮助。第一篇论文是基于DeepSORT改进的它的创新点在于引入了轨迹评分机制时间越久的轨迹可信度就越高基于这个评分就可以把轨迹产生的预测框和检测框放一起做一个NMS相当于是用预测弥补了漏检。第二篇论文是今年9月份发在arxiv上的一篇论文它的工作是把检测网络和嵌入网络结合起来追求的是速度和精度的trade off。6.1. MOTDT这是MOTDT的流程图大概和DeepSORT差不多。这个图画的比较简单其实在NMS之前有个基于SqueezeNet的区域选择网络R-FCN和轨迹评分的机制。这两个东西的目的就是为了产生一个统一检测框和预测框的标准置信度作为NMS的输入。6.2. JDE这是JDE的结构图。这个方法是基于YOLOv3和MOTDT做的。它网络前面都和YOLOv3一样的主要就是在特征图里多提取了一个嵌入embedding向量采取的是类似于交叉熵的triplet loss。因为是多任务学习这篇论文还用了一篇18年的论文提出来的自动学习损失权重方案通过学习一组辅助参数自动地对非均匀损失进行加权。最后的结果是精度上差不太多FPS高了很多。7. 未来展望最后用多目标追踪未来的一些思考作为结尾这句话是最近的一篇关于多目标追踪的综述里的。它在最后提出对未来的方向里有这样一句话用深度学习来指导关联问题。其实现在基于检测的多目标追踪都是检测模块用深度学习Re-ID模块用深度学习而最核心的数据关联模块要用深度学习来解决是很困难的。现在有一些尝试是用RNN但速度慢、效果不好需要走的路都还很长。我个人觉得短期内要解决实际问题还是从Re-ID的方面下手思考怎样提取更有效的特征会更靠谱用深度学习的方法来处理数据关联不是短时间能解决的。参考文献最好的多目标跟踪MOT入门介绍Multi-object tracking in traffic environments: A systematic literature reviewOnline Object Tracking: A Benchmark