写在前面

在前面两篇博客中,我们初步介绍了MOT是什么,并且通过KITTI数据集进一步了解了多目标跟踪MOT,在这篇博客中,会介绍下述内容:

  • 解决多目标跟踪MOT的一般pipeline

解决MOT问题的一般pipeline

总起

在前面的博客中,我们提到过多目标跟踪是一个典型的二部图问题,构建轨迹track和检测框bounding box之间的代价矩阵再利用匈牙利等算法求解匹配关系是解决MOT问题的核心之一,但如何构建轨迹和检测框之间的代价矩阵是我们需要解决的问题之一,怎么描述轨迹和检测框的特征也是我们需要讨论的问题之一

MOT分类

多目标跟踪MOT的分类方式有多种,但目前主流的分类方式有如下几种:
MOT分类

  • 按照使用的传感器分类:多传感器和单传感器,目前多传感器是主流,它综合二维和三维单传感器MOT的优点,即具有多模态信息,高准确度,跟踪范围广,对环境信息不敏感的特点,截止到今天,Nuscenes数据集跟踪任务排行榜前9名中多传感器融合方案占了7名
    nuscenes tracking
  • 基于多传感器的MOT可以进一步按照融合方式分类成:前融合和后融合,前融合是将图像和点云等数据进行特征提取和融合,然后进行检测,而后融合是分别进行检测,对结果进行融合。随着transformer模型在检测领域的快速发展,前融合技术路线发展迅猛,但后融合方案仍然简单有效,属于均分天下。
    EagerMOT-pipeline
    上图给出的是多传感器后融合方案的经典算法——EagerMOT的pipeline,论文中提出的二次关联策略简单有效(当时的SOTA,现在在nuscenes排名第八依旧坚挺),二次融合即先三维后二维,至于为什么先三维后二维?
    • 三维检测框信息准
    • 三维检测框可以投影到二维像素平面,含有的信息较图像检测框多
  • 按照检测和跟踪关系可以分为:检测后跟踪TBD(tracking by detection)和协同跟踪与检测JDT(joint detection and tracking)两种范式,随着深度学习技术的发展,JDT相比TBD被证明需要更小的样本,两条网络协同训练带来的高准确性,不需要额外特征提取网络带来的高实时性,被广泛认为是如今MOT算法的主流
    DEFT
    上图是DEFT的pipeline,一个经典的协同检测与跟踪范式的多目标跟踪算法
    deepsort
    上图是DeepSORT的pipeline,一个经典的检测后跟踪的多目标跟踪算法,也算是把深度学习技术引入多目标跟踪的开山之作,算法本身也足够易懂,小伙伴们可以把他当作入手MOT的第一篇精读论文和代码

解决MOT的一般pipeline

笔者所说的pipeline是针对多目标跟踪算法的一般解决方案,而不是说多目标跟踪算法就一定要按照笔者的pipeline进行解决,虽然MOT有多种分类,但其在数据关联与匹配、轨迹管理等算法过程中有高度一致性,算法流程大致可以由下图粗略概括:
一般pipeline

  • 先进检测:一个好的检测器对跟踪的准确度有着至关重要的作用,目前的主流做法是在真正的跟踪算法开始前串联起当前的先进检测器,用于实现最优的检测结果,这里再插一嘴检测与跟踪的关系:

    • 自动驾驶中的环境感知技术在时间维度上可以被更精细的分为三个层次,即检测——跟踪——预测,跟踪技术在环境感知技术中承上启下
    • 首先,一个好的检测器有可能是一个好的跟踪器,例如transfusion,在nuscenes上检测任务中排名第9,跟踪排名第1;
      transfusion
      但是一个好的跟踪器却不一定是一个好的检测器,设计MOT的工程师甚至大多数情况都不自己设计检测器,例如EagerMOT、DeepSORT、AB3DMOT;这里颇有一点SLAM和里程计的意味:一个好的SLAM算法也一般可以降维成一个好的里程计,一个好的里程计却不一定是一个成功的SLAM算法
  • 特征提取:首先需要对检测器送来的检测框进行置信度剔除,对剩下的检测框进行特征提取,在大名鼎鼎的SORT算法中其实都没有这一步,特征提取的技术是随着深度学习发展而发展,一些特征提取的做法例如:DeepSORT在检测之后对每一个检测框又串联了一个CNN特征提取器(检测后跟踪就是这么来的);而有如DEFT等JDT范式的跟踪算法提取特征的手段则更加优雅,大部分检测器本身就是个CNN,直接在检测器的各个卷积阶段stage获取特征值不就好了

  • 对象相关性计算:得到检测框表观特征之后,通过定义好的物体间的距离算法,构造不同帧物体间的亲和矩阵,注意这里的叫法,“亲和矩阵”不等于“代价矩阵”,亲和矩阵是针对物体间(检测框)而言,代价矩阵是针对轨迹和物体间而言,但通过亲和矩阵获取代价矩阵的手段一般都比较简单

    • 何为“物体间的距离算法”?
    • 物体间的距离算法有点像神经网络中的超参数,是人为设计的算法,简单的有如2D IoU(SORT)、3D IoU(AB3DMOT),复杂的有如基于特征的余弦距离、使用深度亲和网络(DAN)获取距离
  • 数据关联:接着构造当前帧的物体和现有轨迹间的代价矩阵轨迹其实就是一个个检测框的组合当前帧物体与构成轨迹这一个个检测框之间的亲和距离之和或平均就是物体与轨迹之间的代价,得到代价矩阵后利用匈牙利等算法进行数据关联操作,即得到当前帧物体和已有轨迹间的匹配关系

    • 在相关性计算的过程中需要将物理上不可能发生匹配关系的误匹配在过程中剔除
  • 轨迹生命期管理,主要包括初始化新轨迹,删除旧轨迹,更新并维护现有轨迹,对当前帧所有物体成功设置后,就等待下一帧检测并重复上述过程

写在最后

本博客的文字量论述较多,需要大家仔细阅读,博客中所提供的pipeline也只是一般解决MOT问题的思路,随着技术的发展可能有更加信息的解决思路,就像YOLO的一步法之于采用anchor的两步法,最后还是感谢做出这些出色开源工作的研究者,向你们致敬