一、DeepSORT 诞生的逻辑
DeepSORT,是SORT的升级版。对SORT不了解的朋友建议先看我之前写的一篇博客,再来阅读这篇文章。
我们知道,SORT是一种十分简单而实用的跟踪器,能以超过200帧/秒的速度跟踪目标。多目标跟踪问题,说白了就是数据关联(data association)问题,即如何把两组数据的元素一一匹配起来。在基于检测的跟踪算法(Tracking-by-Detection,TBD)的场景里,这里说的两组数据,便是两帧图像中物体的外包盒(bounding box,下面简称bbox)的特征,如长、宽、中心坐标等。SORT利用匈牙利算法来完成数据关联的任务,将两帧的bbox一一匹配;而在匹配前,SORT算法来使用了卡尔曼滤波来减弱检测算法的误差,提高目标观测的精度。其中,匈牙利算法的核心是建立损失矩阵,在SORT算法中,损失矩阵的每个元素由bbox的IOU(交并比)决定,即前一帧的第i个bbox(由卡尔曼滤波预测得到)与当前帧的第j个bbox(由目标检测算法得到)的IOU。IOU越大,两个bbox越接近,SORT跟踪器便认为两者越有可能是同一个物体。
比较敏锐的读者想必已经觉得不对头了,根据外包盒的重叠度来判断是否为一个物体,这样的准则未免太粗糙了!即使SORT使用了一些名字听起来高大上的算法。比方说,现在SORT正在跟踪路上的两个行人,两人相向而行,一开始两人隔得比较远,跟踪没问题;但当两人相遇时,问题便出现了,我们假设在某一帧的时间里,行人A和行人B擦肩而过,位置发生了交换。这是SORT跟踪器按照IOU最大原则,就很有可能把行人A误认为行人B,把B误认成A!(当然,由于卡尔曼滤波的作用,跟踪可能会把这两个人判定为新出现的目标,这种现象称为ID switch)
容易发现,SORT只利用了几何上的信息,或者说物体的运动信息,而没有利用物体的外观信息。虽然目标检测算法可以获得物体的外观信息,但是SORT的跟踪器并没有利用这一信息。因此,SORT的提出者就沿着这一思路对其进行了改进,提出了DeepSORT.
二、DeepSORT 概述
DeepSORT在正确率上相比SORT的提升并不是很明显,其主要的突破在于,将IDswitch的频率降低了45%,而这以突破则是由外观模型的引入引起的。DeepSORT利用预先设计的CNN网络,提取出一个描述bbox内物体外观的128维的向量,并将这一向量融入损失矩阵的构造,从而使得匈牙利算法的匹配结果更加可靠
三、DeepSORT的组件
(1)卡尔曼滤波
卡尔曼滤波的设计与SORT基本相同,使用匀速运动和线性观察模型(constant velocity motion and linear observation model),状态向量为,其中u,v是bbox的中心坐标,
是横纵比,h是高度,头上带点的是各自的变化率。
卡尔曼滤波的原理在上一篇博客中有介绍,这里不再赘述。
(2)损失矩阵
1、几何距离
作者用卡尔曼滤波预测的描述bbox的向量和直接检测到的bbox向量
的马氏距离来定义几何距离
,具体公式如下:
其中,为卡尔曼滤波中观测值的方差-协方差矩阵
2、外观距离
外观距离用改化的余弦距离来定义:
其中为CNN提取的外观向量(128维),并经过归一化处理,
表示第i个跟踪器中储存的第k个外观向量。由于一个追踪器中可能储存了大量同一目标的bbox,因此我们选择其中使得
最小的那一个作为距离,即选择与检测结果做接近的外观模型来衡量。
为了提取外观向量,作者预先设计了一个10层的卷积神经网络:2个卷积层,1个最大池化层,6个残差块和1个全连接层。具体结构见下图
3、损失矩阵定义
定义了几何距离和外观距离后,损失矩阵的定义就十分自然了:
其中,i,j的含义与上文一致,分别表示第i个跟踪结果和第j个检测结果,为参数,需要人工给定。作者发现,
取0是一个很好的选择。等等,取0?!那几何距离
不久对跟踪没有影响了么?不着急,虽然
对损失矩阵没有贡献,但它仍然在跟踪过程了发挥了作用。我们往下看。
(3)置信矩阵
置信矩阵的设计和损失矩阵十分相似,都是从几何和外观两个角度着手,来描述观测值的可信度。由于在编程实现时,和
都需进行归一化处理,因此如果它们的值如果远大于1,我们就有理由认为它们是错误的,应该被舍弃。
1、几何置信度
上式,表示如果,那么
=1,否则
=0。
是一个常数,由概率统计中的假设检验方法得来,作者用置信区间为95%的
分布来建议,得到
=9.4877。
我们看到虽然在损失矩阵中没有贡献,但是可以用来判断某一次检测结果是否可靠。
2、外观置信度
外观置信度和几何置信度的定义相同。
3、总置信度
可看到只有和
都为1,也就是检测结果在几何上和外观上都“可靠”时,
才为1,这时候才能说检测结果是可靠的。
(4)计数器
对于每一个跟踪器k,DeepSORT会记录自上一次匹配成功时起,经过的帧数。如果该跟踪器匹配成果,则会重新置为0。一旦
大于某一给定阈值
,那么就认为目标离开了视场,跟踪器被删除。
如果检测出新的物体,便会定义一个新的“候选”跟踪器,如果这个跟踪器在前三帧中有任意一帧没有成功匹配,则删除这个“候选”跟踪器;只有前三帧全部匹配成果,“候选”跟踪器采用“正式”被启用,这样的设计能够减少异常检测对跟踪的影响。
四、算法流程
原文中给出了算法的流程,如下下图所示:
值得注意的是,遍历跟踪器的顺序是依据计数器的大小排列的,从小到大遍历。之所以这样设计,是因为计数器的值越大,则说明物体被遮挡的时间越长(如果物体没有离开视场的话),当物体再次出现时匹配的误差就越大,因此作者让这些误差较大的跟踪器最后匹配,以给“精度更高“的跟踪器以更高的权重。
五、小结
DeepSORT在SORT的基础上,应用预先训练的CNN来提取外观信息,将其融入匈牙利算法的权重设置。这一改进使得IDswitch的概率降低了45%,并仍能满足实时的要求。
参考资料: