版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HaoBBNuanMM/article/details/85555547
目录
SORT - SIMPLE ONLINE AND REALTIME TRACKING
Deep SORT - SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC
SORT - SIMPLE ONLINE AND REALTIME TRACKING
- 论文 http://arxiv.org/pdf/1602.00763.pdf
- 代码 https://github.com/abewley/sort
概述

SORT跟踪算法到底在干什么?(以单目标跟踪为例说明如下)
- 假设T1时刻成功跟踪了某个单个物体,ID为1,绘制物体跟踪BBox(紫色)
- T2时刻物体检测BBox总共有4个(黑色),预测T2时刻物体跟踪的BBox(紫色)有1个,解决紫色物体跟踪BBox如何与黑色物体检测BBox关联的算法,就是SORT物体跟踪算法要解决的核心问题
- SORT关联两个BBox的核心算法是:用IOU计算Bbox之间的距离 + 匈牙利算法选择最优关联结果

物体跟踪与物体检测是两件不同的事
物体跟踪是把物体跟踪预测的BBox与物体检测的BBox关联,然后用对应的物体检测BBox代表成功跟踪的BBox结果
以上图为例
- T1时刻已经成功跟踪了3个检体(不同颜色的BBox代表不同的物体ID)
- T2时刻除了所有物体检测的新位置BBox(灰色),还要物体跟踪预测的Bbox(非灰的其它不同颜色BBox)与物体检测Bbox(灰色)关联,从而分辨出哪一个物体跟踪的Bbox对应哪一个物体检测的BBox,从而产生T2时刻的物体跟踪BBox结果(包括新增物体跟踪器跟踪T2中新检测到的物体)
- T3时刻如果被追踪的物体发生了遮挡(红框BBox的物体),那么要继续能找到该物体并追踪 (避免ID Switch)
物体跟踪有几个主要任务以及它们对应的解决方案
- 检测-深度学习的各种检测网络来实现物体检测
- 跟踪预测与关联-Tracking的算法来实现物体追踪(比如 本文介绍的SORT)
- ID Switch- Tracking的算法来解决遮挡物体(比如 deep SORT)
- ReID(跨摄像头发现和跟踪同一个物体,避免ID switch) - 比如 deep SORT
解析SORT算法代码








SORT算法的优缺点
优点 | 缺点 |
速度快 |
对于物体遮挡几乎没有处理,导致ID switch 次数很高 |
在没有遮挡的情况下准确度很高 |
有遮挡的情况下准确度很低 |
SORT是一个很粗糙的跟踪算法,所以又有了Deep SORT
Deep SORT - SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC
关联度量(ASSOCIATION METRIC)
- 计算公式(1)
- 马氏距离计算物体检测Bbox dj和物体跟踪BBox yi之间的距离
- 注:不使用欧式距离的原因是dj和yi 的空间域分布不同,欧式距离忽略空间域分布的计算结果不能准确反映两者的真实距离
- 当两者距离≤特定阈值,则表示两者关联
- 但马氏距离依然不能很好的解决物体被长时间遮挡后关联不正确导致ID Switch的问题
- 计算公式(2)
- 物体检测BBox dj 通过CNN网络计算对应的128维feature向量rj 称为appearance descriptor
- 具体的做法是把物体检测BBox dj 对应的图像patch作为下图的CNN输入,输出128维feature向量rj

- 对于跟踪器i,为它创建一个集合
保留它过去Lk 次成功跟踪后物体检测Bbox对应的Lk 个Feature向量集合,公式(2)是在计算第i个物体跟踪的所有Feature向量和第j个物体检测之间的最小余弦距离(具体含义参考下图)
- 当两者距离≤特定阈值,则表示两者关联
公式(2)的几何解释 <p>•<span style="color:#000000;">组合计算公式(</span><span style="color:#000000;">1</span><span style="color:#000000;">)和(</span><span style="color:#000000;">2</span><span style="color:#000000;">)作为计算第</span><span style="color:#000000;">i</span><span style="color:#000000;">个物体跟踪和第</span><span style="color:#000000;">j</span><span style="color:#000000;">个物体检测之间关联度量的总公式</span><img alt="" class="has" height="42" src="https://img-blog.csdnimg.cn/20190101201857219.jpg" width="391"></p> <p>•<span style="color:#000000;">组合距离阈值判断不等式,作为总的判断第</span><span style="color:#000000;">i</span><span style="color:#000000;">个物体跟踪和第</span><span style="color:#000000;">j</span><span style="color:#000000;">个物体检测之间的距离(关联度量)是否关联的总公式<img alt="" class="has" height="83" src="https://img-blog.csdnimg.cn/20190101201925745.jpg" width="211"></span></p> </li> <li> <h2 id="%E5%85%B3%E8%81%94%E7%AE%97%E6%B3%95%20Matching%20Cascade"><a name="t6"></a><a name="t6"></a><span style="color:#000000;">关联算法</span><span style="color:#000000;"> Matching Cascade</span></h2> </li>
T是物体跟踪集合
D是物体检测集合
- C矩阵存放所有物体跟踪i与物体检测j之间距离的计算结果
- B矩阵存放所有物体跟踪i与物体检测j之间是否关联的判断(0/1)
- 关联集合M初始化为{}
- 将找不到匹配的物体检测集合初始化为D
- 从刚刚匹配成功的跟踪器循环遍历到最多已经有Amax 次没有匹配的跟踪器
- 选择满足条件的跟踪器集合Tn
- 根据最小成本算法计算出Tn与物体检测j关联成功产生集合[xi,j]
- 更新M为匹配成功的(物体跟踪i,物体检测j) 集合
- 从U中去除已经匹配成功的物体检测j
- 循环
- 返回 M U 两个集合
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HaoBBNuanMM/article/details/85555547
目录