基于深度学习的目标跟踪sort与deep-sort

SORT:

论文地址:http://arxiv.org/pdf/1602.00763.pdf

代码地址:https://github.com/abewley/sort

deep-SORT:

论文地址https://arxiv.org/pdf/1703.07402.pdf

代码链接:https://github.com/nwojke/deep_sort

SORT篇

文章方法

将tracking对象状态传播到未来的帧中(主要使用卡尔曼滤波以及线性速度的假设),将当前的检测与现有的对象相关联,并管理被跟踪对象的age。

1. 目标检测

使用Faster-RCNN进行detection,文章通过对比来说明detection的质量对后续的tracking至关重要。(我们可以使用yolo以及ssd等网络进行目标检测,以提高速度以及精度)

2. 估计模型

当检测与目标相关联时,检测到的边界框用于更新目标状态,其中速度分量通过卡尔曼滤波框架最优地求解;

如果target没有跟detection相连,就用线性速度模型对taeget进行预测;(线性速度模型的预测错误率较高)

3. 数据组合

在将detection分配给现有track时,通过预测其在当前帧中的新位置来估计每个目标

使用每个detection和所有预测的bonding box的IOU距离来计算assignment cost matrix;

小于IOU阈值的assignment 会被拒绝,源码中阈值设置为0.3;

文章指出使用IOU distance 可以解决 tracking 中的短暂遮挡问题,这是由于IOU distance更倾向于检测相交尺寸,在图片有部分遮挡的情况下,IOU变化不是很大,但遮挡面积很大时,必然有影响。如果遮挡时间较长会重新分配track,造成出错。(较长时间的遮挡问题在后续的deep sort论文中使用appearance特征进行缓解)。

 4. Track的建立和删除

如果detection和target的重叠率小于IOU阈值,认为此track应当删除;(个人认为这种完全基于几何预测bonding box 的位置来判断会造成比较大的错误率以及 ID switch,当然后续的deep sort 也对这方面进行了改进。)

如果在Tlost 帧内没有对应的 detection 与 track 匹配,就将此track删除。文中Tlost 设为1,文中指出是因为没有匹配所使用的固定速度模型效果很差并且帧数过多的re-id问题超出了本文讨论的范围。(个人认为主要还是固定速度的预测模型的问题)。

 

deep-SORT

文章方法

1.轨迹处理和状态估计

  • 状态估计: 使用一个8维空间去刻画轨迹在某时刻的状态 ,分别表示bounding box中心的位置、纵横比、高度、以及在图像坐标中对应的速度信息。然后使用一个kalman滤波器预测更新轨迹,该卡尔曼滤波器采用匀速模型和线性观测模型。其观测变量为

  • 轨迹处理: 这个主要说轨迹什么时候终止、什么时候产生新的轨迹。首先对于每条轨迹都有一个阈值a用于记录轨迹从上一次成功匹配到当前时刻的时间。当该值大于提前设定的阈值则认为改轨迹终止,直观上说就是长时间匹配不上的轨迹认为已经结束。然后在匹配时,对于没有匹配成功的detections都认为可能产生新的轨迹。但由于这些detections可能是一些false alarms,所以对这种情形新生成的轨迹标注状态'tentative' ,然后观查在接下来的连续若干帧(论文中是3帧)中是否连续匹配成功,是的话则认为是新轨迹产生,标注为'confirmed',否则则认为是假性轨迹,状态标注为'deleted'。

2.匹配

匹配自然是指当前有效的轨迹和当前的detections之间的匹配。所谓有效的轨迹是指那些还存活着的轨迹,即状态为tentative和confirmed的轨迹。轨迹和detection之间的匹配程度结合了运动信息和表观信息。

  • 运动匹配度
    使用detection和track在kalman 滤波器预测的位置之间的马氏距离刻画运动匹配程度。

表示第j个detection和第i条轨迹之间的运动匹配度,其中是轨迹由kalman滤波器预测得到的在当前时刻观测空间的协方差矩阵,是轨迹在当前时刻的预测观测量,时第j个detection的状态
考虑到运动的连续性,可以通过该马氏距离对detections进行筛选,文中使用卡方分布的0.95分位点作为阈值,定义如下示性函数

  • 表观匹配度

单独使用马氏距离最为匹配度度量会导致IDSwitch等情形严重,特别的当相机运动时可能导致马氏距离度量失效,所以这个时候应该靠表观匹配度补救。对于每一个detection,包括轨迹中的detections,使用深度网络提取出单位范数的特征向量$r$,深度网络稍后再说。然后使用detection和轨迹包含的detections的特征向量之间的最小余弦距离作为detection和track之间的表观匹配程度。当然轨迹太长导致表观产生变化,在使用这种最小距离作为度量就有风险,所以文中只对轨迹的最新的之内detections进行计算最小余弦距离。

同样的,该度量同样可以确定一个门限函数,这个阈值由训练集得到

两种度量的融合: 加权平均 
其中是超参数,用于调整不同项的权重。
门限函数 

总结: 距离度量对于短期的预测和匹配效果很好,而表观信息对于长时间丢失的轨迹而言,匹配度度量的比较有效。超参数的选择要看具体的数据集,比如文中说对于相机运动幅度较大的数据集,直接不考虑运动匹配程度。
另外还有一点我想说的是这两个匹配度度量的阈值范围是不同的,如果想取相通的重要程度,应该取0.1左右。

3.级联匹配

如果一条轨迹被遮挡了一段较长的时间,那么在kalman滤波器的不断预测中就会导致概率弥散。那么假设现在有两条轨迹竞争同一个detection,那么那条遮挡时间长的往往得到马氏距离更小,使detection倾向于匹配给丢失时间更长的轨迹,但是直观上,该detection应该匹配给时间上最近的轨迹。导致这种现象的原因正是由于kalman滤波器连续预测没法更新导致的概率弥散。这么理解吧,假设本来协方差矩阵是一个正态分布,那么连续的预测不更新就会导致这个正态分布的方差越来越大,那么离均值欧氏距离远的点可能和之前分布中离得较近的点获得同样的马氏距离值。
所以文中才引入了级联匹配的策略让'more frequently seen objects'匹配的优先级更高(将遮挡时间按等级分层,遮挡时间越小的匹配等级更高,即更容易被匹配)。这样每次匹配的时候考虑的都是遮挡时间相同的轨迹,就不存在上面说的问题了。具体的算法如下:

enter description here

在匹配的最后阶段还对unconfirmed和age=1的未匹配轨迹进行基于IoU的匹配。这可以缓解因为表观突变或者部分遮挡导致的较大变化。当然有好处就有坏处,这样做也有可能导致一些新产生的轨迹被连接到了一些旧的轨迹上。但这种情况较少。

4.深度表观描述子

预训练的网络时一个在大规模ReID数据集上训练得到的,这个ReID数据集包含1261个人的1100000幅图像,使得学到的特征很适合行人跟踪。

然后使用该预训练网络作为基础网络,构建wide ResNet,用来提取bounding box的表观特征,网络结构如下:

enter description here

该网络在Nvidia GeForce GTX 1050 mobile GPU下提出32个bounding boxes大约花费30ms,显然可以满足实时性要求。本人认为深度网络提取特征时针对单一类别(如行人)进行特征匹配,若存在着多种的类别(行人,车辆,船只等)进行特征匹配,效果未知。

参考:

https://www.cnblogs.com/yanwei-li/p/8643336.html

https://blog.csdn.net/yuhq3/article/details/78857614

猜你喜欢

转载自blog.csdn.net/XSYYMY/article/details/81747134