【论文阅读2】DeepSORT (SORT with a deep association metric)

【论文阅读2】DeepSORT (SORT with a deep association metric)

1. 各部分笔记

1.1 Abstract

SORT算法非常简单有效,但是其缺少对被遮挡对象的处理,会导致id switches比较大,即目标身份的频繁切换。

DeepSORT通过融入外观信息来提高SORT的性能。具体来说,引入了一个预训练好的行人重识别(Re-ID)网络来提取目标边界框的外观特征描述符,从而能够在较长的遮挡时间内跟踪对象,有效地减少了id switches的次数

1.2 Introduction

SORT只使用Kalman预测的状态(预测值)和检测结果(观测值)之间的IoU距离作为关联度量,来构造代价矩阵。其关联度量仅考虑运动信息,只有在状态估计不确定性较低时才是准确的(例如相机运动、遮挡等情况会让目标运动的不确定性变高)。因此,SORT对遮挡情况不鲁棒,会导致id switches比较大。

DeepSORT改进了SORT的关联度量,使用了结合运动信息和外观信息的关联度量:

  • 运动模型:度量Kalman预测的状态变量(预测值)和检测结果的状态变量(观测值)之间的马氏距离。

  • 外观模型:当目标运动不确定性变高时(例如相机运动、遮挡等情况),采用外观模型,即使用一个预训练好的Re-ID网络来提取目标边界框的外观特征描述符。

    度量轨迹的外观描述符和检测的外观描述符之间的余弦距离。

1.3 SORT WITH DEEP ASSOCIATION METRIC

1.3.1 轨迹处理和状态估计

DeepSORT采用的Kalman滤波跟SORT中基本一致,仍然用的是恒定速度模型,系统的状态向量为:
X = [ u , v , γ , h , u ˙ , v ˙ , γ ˙ , h ˙ ] X=[u,v,\gamma,h,\dot u,\dot v,\dot \gamma,\dot h] X=[u,v,γ,h,u˙,v˙,γ˙,h˙]
其中 u , v u,v u,v 分别表示目标边界框的中心点坐标; γ , h \gamma,h γ,h 分别表示目标边界框的纵横比和高; u ˙ , v ˙ , γ ˙ , h ˙ \dot u,\dot v,\dot \gamma,\dot h u˙,v˙,γ˙,h˙分别表示中心点坐标、纵横比、高的变化速率。

相比于SORT中的状态向量,多了一个长宽比的变化速率 h ˙ \dot h h˙,例如对于相机运动的场景,长宽比确实是会随时间变化的。因此这里也与SORT不一样,SORT将长宽比设定成常数。


DeepSort中Track的生命周期(考虑了遮挡):

  • 消亡——对每个track统计未成功关联的帧数(missing age):对于每个track,统计从最近一次与检测(观测值)关联以来的帧数,该计数在Kalman预测期间递增。如果该track与检测(观测值)再次关联上,该计数就会被重置为0。因此,若一个track的计数大于最大寿命 A m a x A_{max} Amax,就被认为已经离开了场景,其信息会从track集合中删除。

  • 新生——对每个无法与现有的track关联的detection初始化一个新的track hypothesis(轨迹假设):这些新的track hypothesis会在前三帧中被设定为 tentative(暂定的)。 如果前三帧没有成功与检测(观测值)关联,就删除。否则建立一个新track。

    这一操作是为了防止追踪到FP。

1.3.2 匹配问题
1.3.2.1 运动特征的关联度量

对于Kalman预测的状态和新的测量值的匹配问题,本文仍然沿用匈牙利算法。与SORT不同的是(SORT用的是IOU距离),DeepSORT采用马氏距离作为度量。

运动特征的关联度量:第 j j j 个 detection 的状态变量(观测值)和第 i i i 个 track 的Kalman预测状态变量(预测值)之间的马氏距离
d i , j ( 1 ) = ( d j − y i ) T S i − 1 ( d j − y i ) d_{i,j}^{(1)}=(d_j-y_i)^\Tau S_i^{-1}(d_j-y_i) di,j(1)=(djyi)TSi1(djyi)
其中 i i i 表示Kalman预测的状态变量(track distribution)的序号, j j j 表示detection的序号。 S i − 1 S_i^{-1} Si1 表示第 i i i 个Kalman预测的状态变量的协方差矩阵, y i y_i yi 表示Kalman预测的状态变量(track distribution)的均值。该式本质就是计算了第 j j j 个detection和第 i i i 个track distribution之间的距离。

此外,可以设置一个马氏距离的阈值,来排除不可能的匹配。可以定义如下指示函数(二进制变量):
b i , j ( 1 ) = I { d i , j ( 1 ) ≤ t ( 1 ) } b_{i,j}^{(1)}=\Iota \{d_{i,j}^{(1)}\leq t^{(1)}\} bi,j(1)=I{di,j(1)t(1)}

1.3.2.2 外观特征的关联度量

如果有相机运动等情况Kalman滤波的不确定性会变大,这样仅用运动信息来进行关联度量就不太可靠了。

DeepSORT用一个小型的残差网络来提取目标边界框的外观特征描述符,该网络结构如下图所示:

在这里插入图片描述

对于每个检测边界框 d j d_j dj,将其对应的图像切片输入到预训练好的Re-ID网络中,输出128维的向量,即为外观特征描述符 r j r_j rj,满足 ∣ ∣ r j ∣ ∣ = 1 ||r_j||=1 ∣∣rj∣∣=1(范数为1)。

此外,用一个 gallery R i = { r k ( i ) } k = 1 L k R_i=\{r_k^{(i)}\}_{k=1}^{L_k} Ri={rk(i)}k=1Lk 来存放第 i i i 个 track 在最近的 L k L_k Lk 帧中的所有外观特征描述符( L k L_k Lk 默认为 100)。

外观特征的关联度量:第 j j j 个 detection 的外观特征描述符和第 i i i 个 track 的gallery中所有外观特征描述符之间的最小余弦相似度
d i , j ( 2 ) = m i n { 1 − r j T r k ( i ) ∣ r k ( i ) ∈ R i } d_{i,j}^{(2)}=min\{1-r_j^\Tau r_k^{(i)}|r_k^{(i)}\in R_i\} di,j(2)=min{1rjTrk(i)rk(i)Ri}
同理,也可以用一个指示函数来排除不可能的匹配(二进制变量):
b i , j ( 2 ) = I { d i , j ( 2 ) ≤ t ( 2 ) } b_{i,j}^{(2)}=\Iota \{d_{i,j}^{(2)}\leq t^{(2)}\} bi,j(2)=I{di,j(2)t(2)}

1.3.2.3 结合运动特征和外观特征的关联度量

运动特征和外观特征的关联度量可以在匹配问题中相互补充。一方面,马氏距离对运动特征的度量,对于短期预测(short-term predictions)比较有用;另一方面,余弦距离对外观特征的度量,对长时间遮挡后的id恢复比较有用。

为了构建关联问题,将两个度量加权求和:
c i , j = λ d i , j ( 1 ) + ( 1 − λ ) d i , j ( 2 ) c_{i,j}=\lambda d_{i,j}^{(1)}+(1-\lambda)d_{i,j}^{(2)} ci,j=λdi,j(1)+(1λ)di,j(2)
如果关联在两个度量的门限区域(gating region)内,则称其为可接受关联(引入一个门控矩阵来限制代价矩阵中过大的值):
b i , j = b i , j ( 1 ) b i , j ( 2 ) b_{i,j}=b_{i,j}^{(1)}b_{i,j}^{(2)} bi,j=bi,j(1)bi,j(2)
每个度量对关联成本矩阵的影响可以通过超参数 λ λ λ 来控制。当存在大量相机运动时,设置 λ = 0 λ=0 λ=0 ,即仅使用外观信息。

1.3.3 级联匹配(Matching Cascade)

匹配级联是为了解决一些子问题。引入了一个匹配级联,优先考虑更常见的对象,以编码关联可能性中的概率扩散概念。

在这里插入图片描述

在这里插入图片描述

2. 总结

DeepSORT比SORT改进的地方在于:

  • 使用马氏距离来衡量Kalman预测的状态量和检测的状态量之间的差异。

  • 使用一个已经预训练好的Re-ID网络来提取目标边界框的外观特征描述符。

    使用余弦距离来衡量已有轨迹的外观描述符和检测的外观描述符之间的差异,辅助构造代价矩阵,有助于id switches的减小。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我了解到DeepSort和BoSort都是用于对象跟踪的算法。DeepSort是一种结合了YOLOv4和Deep Association Metric的算法,它使用深度卷积神经网络进行对象检测,并通过关联度量来跟踪对象。而BoSort是一种基于YOLOv5和pytorch框架的算法,它可以在俯视场景下进行车辆检测和跟踪,并生成目标的运动轨迹。 以下是DeepSort和BoSort的介绍和演示: 1. DeepSort介绍: DeepSort是一种先进的对象跟踪算法,它结合了YOLOv4和Deep Association Metric。YOLOv4用于对象检测,而Deep Association Metric用于关联度量,以跟踪对象。这种算法可以在实时视频中准确地跟踪多个对象,并生成它们的运动轨迹。 2. BoSort介绍: BoSort是一种基于YOLOv5和pytorch框架的对象跟踪算法。它专门用于俯视场景下的车辆检测和跟踪。该算法可以检测并跟踪视频中的车辆,并生成它们的运动轨迹。它还提供了训练好的visdrone数据集权重以及各种训练曲线供参考。 3. DeepSort演示: 以下是使用DeepSort进行对象跟踪的Python代码示例: ```python # 导入所需的库和模型 import cv2 from deep_sort import DeepSort # 创建DeepSort对象 deepsort = DeepSort() # 加载视频 video = cv2.VideoCapture('path/to/video') while True: ret, frame = video.read() if not ret: break # 对象检测 detections = deepsort.detect(frame) # 对象跟踪 tracks = deepsort.track(detections) # 可视化结果 frame = deepsort.visualize(frame, tracks) # 显示结果 cv2.imshow('Object Tracking', frame) if cv2.waitKey(1) == ord('q'): break # 释放资源 video.release() cv2.destroyAllWindows() ``` 4. BoSort演示: 以下是使用BoSort进行车辆检测和跟踪的Python代码示例: ```python # 导入所需的库和模型 import cv2 from bosort import BoSort # 创建BoSort对象 bosort = BoSort() # 加载视频 video = cv2.VideoCapture('path/to/video') while True: ret, frame = video.read() if not ret: break # 车辆检测 detections = bosort.detect(frame) # 车辆跟踪 tracks = bosort.track(detections) # 可视化结果 frame = bosort.visualize(frame, tracks) # 显示结果 cv2.imshow('Vehicle Tracking', frame) if cv2.waitKey(1) == ord('q'): break # 释放资源 video.release() cv2.destroyAllWindows() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值