现在从目标检测和单目标跟踪方向转来做多目标跟踪的小伙伴应该有不少,但由于多目标跟踪任务本身的复杂性,导致其入门会比目标检测与单目标跟踪困难不少。再加上论文分布在各个会议,开源代码较少,都造成了多目标跟踪的研究门槛较高。本文旨在带领大家入门多目标跟踪,了解多目标跟踪领域的发展概况,让大家更方便直观地理解这个问题。
多目标跟踪,即MOT(Multi-Object Tracking),顾名思义,就是在一段视频中同时跟踪多个目标。MOT主要应用场景是安防监控和自动驾驶等,这些场景中我们往往需要对众多目标同时进行追踪。这是仅用目标检测算法或单目标跟踪算法都无法做到的,人们就自然就开始了对多目标跟踪算法的。
DuKeMTMCT数据集,是一个典型的多目标跟踪场景
而由于是多目标,自然就会产生新目标进入与旧目标消失的问题,这就是与单目标跟踪算法区别最大的一点。而由于这一点区别,也就导致跟踪策略的不同。在单目标跟踪中,我们往往会使用给定的初始框,在后续视频帧中对初始框内的物体进行位置预测。而多目标跟踪算法,大部分都是不考虑初始框的,原因就是上面的目标消失与产生问题。取而代之,在多目标跟踪领域常用的跟踪策略是TBD(Tracking-by-Detecton),又或者也可叫DBT(Detection-Based-Tracking)。即在每一帧进行目标检测,再利用目标检测的结果来进行目标跟踪,这一步我们一般称之为数据关联(Data Assoiation)。
这里自然引出了多目标跟踪算法的一种分类:TBD(Tracking-by-Detecton)与DFT(Detection-Free Tracking),也即基于检测的多目标跟踪与基于初始框无需检测器的多目标跟踪。TBD则是目前学界业界研究的主流。下图比较形象地说明了两类算法的区别。
TBD与DFT
不得不提的是另一种多目标跟踪算法的分类方式:在线跟踪(Online)与离线跟踪(Offline)。上文提到,大家往往会使用数据关联来进行多目标跟踪。而数据关联的效果,与你能使用的数据是有着直接的关系的。在Online跟踪中,我们只能使用当前帧及之前帧的信息来进行当前帧的跟踪。而在Offline跟踪中则没有了这个限制,我们对每一帧的预测,都可以使用整个视频的信息,这样更容易获得一个全局最优解。两种方式各有优劣,一般视应用场合而定,Offline算法的效果一般会优于Online算法。而介于这两者之间,还有一种称之为Near-Online的跟踪方式,即可以部分利用未来帧的信息。笔者认为,在实际应用中Near-Online的方式会是最合适的,其相关方法十分值得研究。下图形象解释了Online与Offline跟踪的区别。
上图为Online,下图为Offline
关于Online,还有一点需要补充,Online跟踪是不允许修改以往的跟踪结果的,这一点也不难理解,因为一旦修改,算法自然就不再符合Online跟踪不能利用未来帧的要求了,变成了NearOnline或者Offline。
看论文时经常会碰到一些术语,初入门的小伙伴可能会云里雾里似懂非懂。有必要在这里列出来。
Trajectory(轨迹):一条轨迹对应这一个目标在一个时间段内的位置序列
Tracklet(轨迹段):形成Trajectory过程中的轨迹片段。完整的Trajectory是由属于同一物理目标的Tracklets构成的。
ID switch(ID切换):又称ID sw.。对于同一个目标,由于跟踪算法误判,导致其ID发生切换的次数称为ID sw.。跟踪算法中理想的ID switch应该为0。
对于多目标跟踪,最主要的评价指标就是MOTA。这个指标综合了三点因素:FP、FN、IDsw.。FP即False Postive,为误检测的目标数量;FN即False Negetive,为未检出的真实目标数量;IDsw.即同一目标发生ID切换的次数。
MOTA越高,代表一个Tracker综合性能越好,上限为100,下限负无穷。
除此之外,多目标跟踪还有很多的评价指标,比如MOTP、IDF1、MT、ML、Frag等。作为入门,读者最需要关注的就是MOTA,其他指标可以等对MOT有了进一步了解后再关注。
下表为MOTchallenge官网的Evaluation Measures,有兴趣的读者可以一看。
MOTchallenge: https://motchallenge.net/results/MOT17/
本系列的第一篇文章希望能带大家对MOT有一个直观的了解。暂未涉及任何具体算法,只是介绍了多目标跟踪的任务,一些术语和评价指标。希望大家有什么问题可以在下面评论,欢迎交流讨论。码字仓促,文中若有错误还请大家不吝指教,多多包涵。
上一篇文章大概给大家介绍了一下多目标跟踪MOT的一些基础知识。初次了解还是从经典的算法开始,SORT和DeepSORT是多目标跟踪中两个知名度比较高的算法。DeepSORT是原团队对SORT的改进版本。这个算法也是开源的,github上有一个DeepSORT+Yolov3的项目,初入多目标坑的小伙伴应该在搜代码的时候都看到过。
本文将带大家解析一下SORT和DeepSORT的基本思路,废话不多说,开始正题。
首先要说明一点,现在多目标跟踪算法的效果,与目标检测的结果息息相关,因为主流的多目标跟踪算法都是TBD(Tracking-by-Detecton)策略,这里不再赘述,有不懂的小伙伴可以去看本系列的第一篇领域综述。
在SORT论文的一开始,作者也强调了这一点。作者原话是说通过更换检测器可以将跟踪效果提高18.9个百分点。说这点是为了给做工程的朋友们一个启示,用再花哨的跟踪算法,有时也不如用针对性训练的检测器来的效果好。在实际工程中,为了提高多目标跟踪的效果,可以从检测器处多做文章(比如多收集一些对应任务的数据来训练检测器),跟踪的效果也会水涨船高。
抛开检测不谈,我们来看SORT的跟踪思路。SORT采用的是在线跟踪的方式,不使用未来帧的信息。在保持100fps以上的帧率的同时,也获得了较高的MOTA(在当时16年的结果中)。
SORT与当时State-of-the-art跟踪器效果对比
SORT的贡献主要有三:
现在看可能不觉得有什么,思路并不新奇也并不复杂,但在当时还是作出很大的贡献的,有力推动了MOT的发展。
其中卡尔曼滤波(Kalman filter)与匈牙利算法(Hungarian algorithm)对于大家来说可能是两个新名词。先简单解释一下,匈牙利算法是一种寻找二分图的最大匹配的算法,在多目标跟踪问题中可以简单理解为寻找前后两帧的若干目标的匹配最优解的一种算法。而卡尔曼滤波可以看作是一种运动模型,用来对目标的轨迹进行预测,并且使用确信度较高的跟踪结果进行预测结果的修正,是控制领域常用的一种算法。有熟悉无人机飞控算法的小伙伴应该会对这个感到很亲切。
可能初次接触的小伙伴还不是非常理解,不用担心,我们存疑,后文还会更详细地讲到。
至于具体的跟踪过程,SORT在以往二阶段匹配算法的基础上进行了创新。
以往二阶段匹配算法是先使用匈牙利算法对相邻帧之间的目标进行匹配生成很多tracklets,之后使用这些tracklets进行二次匹配,以解决遮挡等问题引起的轨迹中断。但这种二阶段匹配方式弊端也很明显,因为这种方式先天地要求必须以Offline的方法进行跟踪,而无法做到Online。
SORT将这种二阶段匹配算法改进为了一阶段方法,并且可以在线跟踪。
具体而言,SORT引入了线性速度模型与卡尔曼滤波来进行位置预测,先进行位置预测然后再进行匹配。在无合适匹配检测框的情况下,运动模型的结果可以用来预测物体的位置。
在数据关联的阶段,SORT使用的依旧是匈牙利算法逐帧关联,不过作者还引入了IOU(Intersection-Over-Union)距离。不过SORT用的是带权重的匈牙利算法,其实就是KM算法,用IOU距离作为权重(也叫cost矩阵)。作者代码里是直接用sklearn的linear_assignment实现,有兴趣的话也可以去看看这个函数的实现细节,我下一篇文章会稍微讲讲匈牙利算法和KM算法的原理,这里不懂可以先存疑。并且当IOU小于一定数值时,不认为是同一个目标,理论基础是视频中两帧之间物体移动不会过多。作者在代码中选取的阈值是0.3,
不过我个人在实验中对这一点不是完全认同,虽然两帧之间物体的运动量可能不大,但由于检测器自身检测结果不准,目标框偏移可能较大,还是会造成IOU过小,这时再用论文中这种方法,会导致误判引起的轨迹中断。具体案例在MOT的DPM检测结果中很容易找到。说起DPM,真可谓是MOT研究者的梦魇了……衷心希望MOT19能抛弃DPM。
一年之后,原团队发布了SORT的续作DeepSORT,到现在都有很多人在用这个跟踪器。
MOT数据集中的典型遮挡情形
整体框架没有大改,还是延续了卡尔曼滤波加匈牙利算法的思路,在这个基础上增加了Deep Association Metric。Deep Association Metric其实就是在大型行人重识别网络上学习的一个行人鉴别网络。目的是区分出不同的行人。个人感觉很类似于典型的行人重识别网络。输出行人图片,输出一组向量,通过比对两个向量之间的距离,来判断两副输入图片是否是同一个行人。
此外还加入了外观信息(Appearance Information)以实现较长时间遮挡的目标跟踪。
跟踪流程延续上作,在卡尔曼滤波的预测结果的基础上,继续使用了匈牙利算法进行目标分配,但在这个过程中加入了运动信息和外观信息。这个说起来简单,实现起来比较复杂,感兴趣的读者可以细看论文和代码。在这里就不赘述了。
其他方面没有太多变化,还是使用了标准的卡尔曼滤波和固定速度模型等来进行预测。
最终实现了较好的跟踪效果(MOTA61.4@MOT16),并且能够实时运行(40FPS)。
代码和论文可以在以下链接获得。感谢SpyderXu的整理。
DeepSort : Wojke, Nicolai and Bewley, Alex and Paulus, Dietrich "Simple Online and Realtime Tracking with a Deep Association Metric" [ paper] [ code] In ICIP 2017
Sort : Bewley, Alex and Ge, Zongyuan and Ott, Lionel and Ramos, Fabio and Upcroft, Ben "Simple Online and Realtime Tracking"[ paper] [ code] In ICIP 2016.
https://github.com/SpyderXu/multi-object-tracking-paper-list
这一篇和大家一起过了一遍SORT这个经典的算法,虽然思路并不复杂,但还是值得细细品味的。当然其中还有几点概念没有说清,下一篇将带大家继续深入。
下一篇将着重讲解MOT中常用的一些算法,比如匈牙利算法和KM算法等。打下一个良好的基础,才能走的更远,朋友们下篇见!
希望大家有什么问题可以在下面评论,欢迎交流讨论。码字仓促,文中若有错误还请大家不吝指教,多多包涵。转载请联系作者并注明出处,侵权必究。
转载自:
带你入门多目标跟踪(一)领域概述 - 知乎
带你入门多目标跟踪(二)SORT&DeepSORT - 知乎
带你入门多目标跟踪(三)匈牙利算法&KM算法 - 知乎
带你入门多目标跟踪(四)外观模型 Appearance Model - 知乎