多目标跟踪算法——DeepSORT

1 简介

DeepSORT在SORT的基础上做了一些改进,其中最重大的改进是在做数据(track和detection)关联时利用了行人的外观特征(feature embedding)。通过加入外观特征,可以处理更长时间遮挡下的跟踪[经过更长时间的遮挡,运动模型可能完全失效,无法关联上detection,但是如果有外观特征提供的信息,还有可能关联上],以及减少ID切换
什么是ID switch呢,加入我们跟踪到了张三,并且把张三标记为ID1,张三经过一片广告牌或一个小人群时被遮挡住了一段时间(无ID1对应的bbox),当张三(检测bbox)再次出现时,它被赋予了一个新ID(关联上的是别的track)。但我们希望,即使张三有一段时间被遮挡了,当他再次出现,仍能保持他上次出现的ID(bbox仍然和原track关联上)。
我们可以再细致地分析一下ID Switch发生的情况:
1)被遮挡的帧数小于Tmax,但张三重新出现时,它的bbox被其它track匹配上了或者未被任何track匹配上(反正就没被track A匹配上);
2)被遮挡的帧数大于Tmax,track A直接被注销了。
通过加入外观特征,可以减少情况1的发生概率。

2 算法介绍

《多目标跟踪算法——SORT》的基础上,DeepSORT有如下变化。

2.1 运动估计

SORT的状态定义为[u,v,s,r,u˙,v˙,s˙]T,前4个值分别表示物体中心坐标、bbox面积和纵宽比。DeepSORT的状态定义为(u,v,γ,h,x˙,y˙,γ˙,h˙),前4个值分别表示物体中心坐标、纵宽比和高度。

2.3 数据关联

2.3.1 基于运动信息的关联

计算第j个检测目标和第i个track的马氏距离: dj是检测结果(u,v,γ,h)yisi是Kalman预测得到的均值和协方差。
d(1)(i,j)=(djyi)TSi1(djyi)
bi,j(1)=1[d(1)(i,j)t(1)]

2.3.2 基于外观特征的关联

计算第j个检测目标和第i个track的外观距离:这里使用的特征(人体ReID特征)都是经过归一化的,计算track最近的100个特征来和检测特征的距离,选择其中的最小距离值。
d(2)(i,j)=min{1rjTrk(i)rk(i)Ri}
bi,j(2)=1[d(2)(i,j)t(2)]

2.3.3 结合运动信息和外观特征

ci,j=λd(1)(i,j)+(1λ)d(2)(i,j)
bi,j=m=12bi,j(m)

2.3.3 Matching Cascade

核心想法就是让age更小的track优先进行匹配。age = the number of frames since last successful measurement association. (只要track关联上了detection,age就reset为0)如果某个被遮挡的物体,它被遮挡的帧数小于Amax(大于Amax该track就要被销毁了),当它重新出现时,会优先(相比于失联更久的track)为它匹配检测结果。
image

如果不区分优先级,所有的tracks一起进来用匈牙利算法匹配,会出现什么问题呢?答案是如果有两个tracks竞争地匹配同一个检测结果,马氏距离倾向于不确定性较大(遮挡时间较长)的track。
参考机器学习笔记-距离度量与相似度(二)马氏距离,用下面这张图来说明。虽然点A距分布1的中心为4,距分布2的中心为6,从欧式距离上看,应该选择分布1对应的track。但是A点在分布2的3σ内,在分布1的3σ外,从概率上看,应该选择分布2对应的track。在马氏距离下,我们倾向于选择分布2对应的track,这意味着当我们的bbox面临两个track,如果一个track被遮挡了更久,我们的分配算法会偏向将检测结果分配给它。但是这一偏向并不合理,可能会导致跟踪轨迹的碎片化和不稳定性。
image

后面还会继续关注一些多目标跟踪(MOT)算法。

posted @   渐渐的笔记本  阅读(3152)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示