多目标跟踪理论基础(二)

多目标跟踪理论基础

DeepSORT算法概述

由于sort算法还是比较粗糙的追踪算法,当物体发生遮挡的时候,特别容易丢失自己的ID。而Deepsort算法在sort算法的基础上增加了级联匹配 Matching Cascade和新轨迹的确认(confirmed)。Tracks分为确认态(confirmed),和不确认态(unconfirmed),新产生的Tracks是不确认态的;不确认态的Tracks必须要和Detections连续匹配一定的次数(默认是3)才可以转化成确认态。确认态的Tracks必须和Detections 连续失配一定次数(默认70次),才会被删除。

Deepsort的算法流程图如下所示。

在这里插入图片描述

(1)将第一帧次检测到的结果创建其对应的Tracks。将卡尔曼滤波的运动变量初始化,通过卡尔曼滤波预测其对应的框框。这时候的Tracks一定是unconfirmed的。

(2)将该帧目标检测的框框和第上一帧通过Tracks预测的框框一一进行IOU匹配,再通过IOU匹配的结果计算其代价矩阵(cost matrix,其计算方式是1-IOU)。

(3)将(2)中得到的所有的代价矩阵作为匈牙利算法的输入,得到线性的匹配的结果,这时候我们得到的结果有三种,第一种是Tracks失配(Unmatched Tracks),我们直接将失配的Tracks(因为这个Tracks是不确定态了,如果是确定态的话则要连续达到一定的次数(默认30次)才可以删除)删除;第二种是Detections失配(Unmatched Detections),我们将这样的Detections初始化为一个新的Tracks(new Tracks);第三种是检测框和预测的框框配对成功,这说明我们前一帧和后一帧追踪成功,将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。

(4)反复循环(2)-(3)步骤,直到出现确认态(confirmed)的Tracks或者视频帧结束。

(5)通过卡尔曼滤波预测其确认态的Tracks和不确认态的Tracks对应的框框。将确认态的Tracks的框框和是Detections进行级联匹配(之前每次只要Tracks匹配上都会保存Detections其的外观特征和运动信息,默认保存前100帧,利用外观特征和运动信息和Detections进行级联匹配,这么做是因为确认态(confirmed)的Tracks和Detections匹配的可能性更大)。

(6)进行级联匹配后有三种可能的结果。第一种,Tracks匹配,这样的Tracks通过卡尔曼滤波更新其对应的Tracks变量。第二第三种是Detections和Tracks失配,这时将之前的不确认状态的Tracks和失配的Tracks一起和Unmatched Detections一一进行IOU匹配,再通过IOU匹配的结果计算其代价矩阵(cost matrix,其计算方式是1-IOU)。

(7)将(6)中得到的所有的代价矩阵作为匈牙利算法的输入,得到线性的匹配的结果,这时候我们得到的结果有三种,第一种是Tracks失配(Unmatched Tracks),我们直接将失配的Tracks(因为这个Tracks是不确定态了,如果是确定态的话则要连续达到一定的次数(默认30次)才可以删除)删除;第二种是Detections失配(Unmatched Detections),我们将这样的Detections初始化为一个新的Tracks(new Tracks);第三种是检测框和预测的框框配对成功,这说明我们前一帧和后一帧追踪成功,将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。

(8)反复循环(5)-(7)步骤,直到视频帧结束。

距离度量方式

马氏距离(Mahalanobis distance)

为了结合运动信息,论文中提到使用了马氏距离,的平方用于关联预测的卡尔曼状态和新获得的测量值

Cov ⁡ ( X , Y ) = E [ X Y ] − E [ X ] E [ Y ] \begin{aligned} \operatorname{Cov}(X, Y) & =E[X Y]-E[X] E[Y] \end{aligned} Cov(X,Y)=E[XY]E[X]E[Y]

对协方差矩阵进行简单的说明。

x 1 x 2 x 3 [ x 1 x 2 x 3 var ⁡ ( x 1 ) cov ⁡ ( x 1 , x 2 ) cov ⁡ ( x 1 , x 3 ) cov ⁡ ( x 2 , x 1 ) var ⁡ ( x 2 ) cov ⁡ ( x 2 , x 3 ) cov ⁡ ( x 3 , x 1 ) cov ⁡ ( x 3 , x 2 ) var ⁡ ( x 3 ) ] \begin{array}{c} \\ \boldsymbol{x} \mathbf{1} \\ \boldsymbol{x} \mathbf{2} \\ \boldsymbol{x} \mathbf{3} \end{array}\left[\begin{array}{ccc} \boldsymbol{x} \mathbf{1} & \boldsymbol{x} \mathbf{2} & \boldsymbol{x} \mathbf{3} \\ \operatorname{var}(x 1) & \operatorname{cov}(x 1, x 2) & \operatorname{cov}(x 1, x 3) \\ \operatorname{cov}(x 2, x 1) & \operatorname{var}(x 2) & \operatorname{cov}(x 2, x 3) \\ \operatorname{cov}(x 3, x 1) & \operatorname{cov}(x 3, x 2) & \operatorname{var}(x 3) \end{array}\right] x1x2x3 x1var(x1)cov(x2,x1)cov(x3,x1)x2cov(x1,x2)var(x2)cov(x3,x2)x3cov(x1,x3)cov(x2,x3)var(x3)

欧式距离计算:

d = ∑ i = 1 n ( x i − y i ) 2 d=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}} d=i=1n(xiyi)2

马氏距离的计算公式:

D ( x ) = ( x − μ ) T S − 1 ( x − μ ) D(x)=\sqrt{(x-\mu)^{T} S^{-1}(x-\mu)} D(x)=(xμ)TS1(xμ)

D 2 = ( x − x ˉ ) T S − 1 ( x − x ˉ ) D^{2}=(x-\bar{x})^{T} S^{-1}(x-\bar{x}) D2=(xxˉ)TS1(xxˉ)

这里的核心思想是,如果数据在某个方向上的变化较大,那么在这个方向上的单位距离应该被“缩短而如果数据在某个方向上的变化较小,那么在这个方向上的单位距离应该被“拉长”。这就是协方差矩阵在这里起的作用。

余弦相似度

在机器学习领域中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,常用余弦相似度表示。

余弦相似度的定义公式为

cos ⁡ ( A , B ) = A ⋅ B ∥ A ∥ 2 ∥   B ∥ 2 \cos (\mathrm{A}, \mathrm{B})=\frac{\mathrm{A} \cdot \mathrm{B}}{\|\mathrm{A}\|_{2}\|\mathrm{~B}\|_{2}} cos(A,B)=A2 B2AB

其中:

 归一化后  ∥ A ∥ 2 = 1 , ∥   B ∥ 2 = 1 , ∥   A ∥ 2 ∥   B ∥ 2 = 1 \text { 归一化后 }\|\mathrm{A}\|_{2}=1,\|\mathrm{~B}\|_{2}=1,\|\mathrm{~A}\|_{2}\|\mathrm{~B}\|_{2}=1  归一化后 A2=1, B2=1, A2 B2=1

用1-余弦相似度后就可以得到对应的余弦距离

分配问题(关联问题)

论文对于Assignment Problem共给出了5个公式来进行说明。分别用于运动信息和外观信息的匹配。

d ( 1 ) ( i , j ) = ( d j − y i ) T S i − 1 ( d j − y i ) d^{(1)}(i, j)=\left(\boldsymbol{d}_{j}-\boldsymbol{y}_{i}\right)^{\mathrm{T}} \boldsymbol{S}_{i}^{-1}\left(\boldsymbol{d}_{j}-\boldsymbol{y}_{i}\right) d(1)(i,j)=(djyi)TSi1(djyi)

通过设置马氏距离的阈值排除不太可能的关联,阈值设在95%置信区间内,由卡方分布计算得出。

b i , j ( 1 ) = I [ d ( 1 ) ( i , j ) ≤ t ( 1 ) ] b_{i, j}^{(1)}=\mathbb{I}\left[d^{(1)}(i, j) \leq t^{(1)}\right] bi,j(1)=I[d(1)(i,j)t(1)]

d ( 2 ) ( i , j ) = min ⁡ { 1 − r j T r k ( i ) ∣ r k ( i ) ∈ R i } . d^{(2)}(i, j)=\min \left\{1-\boldsymbol{r}_{j}{ }^{\mathrm{T}} \boldsymbol{r}_{k}^{(i)} \mid \boldsymbol{r}_{k}^{(i)} \in \mathcal{R}_{i}\right\} . d(2)(i,j)=min{1rjTrk(i)rk(i)Ri}.

b i , j ( 2 ) = 1 [ d ( 2 ) ( i , j ) ≤ t ( 2 ) ] b_{i, j}^{(2)}=\mathbb{1}\left[d^{(2)}(i, j) \leq t^{(2)}\right] bi,j(2)=1[d(2)(i,j)t(2)]

为了构建关联问题,论文使用加权和的方式组合两个度量,如式(5)所示。

c i , j = λ d ( 1 ) ( i , j ) + ( 1 − λ ) d ( 2 ) ( i , j ) c_{i, j}=\lambda d^{(1)}(i, j)+(1-\lambda) d^{(2)}(i, j) ci,j=λd(1)(i,j)+(1λ)d(2)(i,j)

如果关联在两个度量的门控区域内,认为关联是可接受的,如式(6)所示。

b i , j = ∏ m = 1 2 b i , j ( m ) b_{i, j}=\prod_{m=1}^{2} b_{i, j}^{(m)} bi,j=m=12bi,j(m)

级联匹配

在这里插入图片描述

级联匹配步骤:

  1. 得到这一帧的N个轨迹T和M个检测框D,以及最大的次数Amax
  2. 根据公式5(加权结合公式)计算代价矩阵c
  3. 根据公式6计算出一个矩阵包含T和D的可接受的关联内容
  4. 初始化一个已匹配集合M为空
  5. 初始化未匹配的检测框集合U为D
  6. 从轨迹未匹配次数由小至大开始循环:(从未匹配次数小的开始匹配,解决了上述问题)
  • 先选出未匹配年龄为n的轨迹
  • 使用匈牙利算法进行匹配,为未匹配次数为n的轨迹关联检测框,得到xij
  • 根据xij更新已匹配集合M和未匹配检测框U
  • 循环结束
  1. 返回已匹配的轨迹集合M和未匹配到的检测框集合U

ReID网络

论文给出了已经训练好用来提取特征的深度ReID网络的网络结构

在这里插入图片描述

可以在训练集上进行训练。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值