Multi-object Tracking via End-to-end Tracklet Searching and Ranking:多目标跟踪的评分网络

📝论文下载地址

  [论文地址]

🔨代码下载地址

  [GitHub]

👨‍🎓论文作者

Tao HuLichao HuangHan
ShenHorizon Robotics Inc

📦模型讲解

[背景介绍]

  视频跟踪可以划分为单目标跟踪和多目标跟踪两个部分。单目标跟踪中比较有名的方法就是孪生网络,孪生网络的关键是在搜索图像中能不能匹配到单个目标的位置。多目标跟踪网络比较有名的是使用目标检测模型为backbone,使用关联匹配的模型,对连续帧进行目标的匹配,多目标跟踪网络的关键是对两帧之间对应目标的关联。

[论文解读]

  在通过检测进行跟踪的过程中,MOT由两个阶段组成:在每个帧进行目标检测;并在跨帧的每个检测结果分配ID也就是进行关联。分配ID的常见做法通常是根据tracklet和检测结果之间的关联。在本节中,作者首先通过目标检测的跟踪方法对提出的框架进行总体架构描述,然后再扩展各小节中的细节。

  作者提出了一个新的框架,可以通过tracklet在线搜索使用margin损失直接优化tracklet得分。该框架由迭代搜索、学习、排名和修剪过程组成,如下图所示。 获得模型后,采用在线匈牙利算法和近似在线算法-多重假设跟踪进行推断,以全面了解其有效性。最后,逐帧运行此分配过程,并随时间产生一组目标轨迹。

[评分网络]

   T i T_i Ti表示目标 i i i在视频中的轨迹,它由目标检测补丁 D i D_i Di组成:
T i = { b i t } t = t 0 t 0 + D i T_i = \{b^t_i\}^{t0+Di}_{t=t0} Ti={bit}t=t0t0+Di
意思应该是 t 0 t0 t0时刻和之后时刻目标检测的结果中 i i i的boundingbox的结果 D i D_i Di组合成目标 i i i的轨迹。
  给定在时间 t t t已经获得目标 i i i的轨迹为 T i t T^t_i Tit,之后的检测结果 { b 1 t + 1 , b 2 t + 1 , . . . , b i t + 1 , . . . , b j t + 1 } \{b^{t+1}_1,b^{t+1}_2,...,b^{t+1}_i,...,b^{t+1}_j\} {b1t+1,b2t+1,...,bit+1,...,bjt+1}表示在 t + 1 t+1 t+1帧检测到 j j j个目标,这些目标中会包含在 t + 1 t+1 t+1帧的目标 i i i
  作者提出了一个基于tracklet搜索的对延长tracklet进行一致性评分的方法。也就是说在之前 t t t帧目标 i i i的tracklet T i t T^t_i Tit的基础上会加上 t + 1 t+1 t+1帧的结果,组成一个新的tracklet ( T i t , b j t + 1 ) (T^t_i,b^{t+1}_j) (Tit,bjt+1),这个公式好像有点问题,而且在后面很多公式上标下标随意变换。我认为应该是 T ~ i t + 1 = ( T i t , b n t + 1 ) \tilde T^{t+1}_i=(T^t_i,b^{t+1}_n) T~it+1=(Tit,bnt+1) n ∈ { 1 , 2 , . . . , i , . . . , j } n\in\{1,2,...,i,...,j\} n{1,2,...,i,...,j}
其中 T ~ i t + 1 \tilde T^{t+1}_i T~it+1代表在 t + 1 t+1 t+1帧目标 i i i的假设轨迹,在 t + 1 t+1 t+1帧中检测结果 n n n就是目标 i i i的情况下。
  作者的目标是找到一个评分函数,以促进训练和推理阶段之间的一致性。 假设给出了用深层网络实现的评分函数为 f s ( T ) f_s(T) fs(T),通过对所有的 T ~ i t + 1 \tilde T^{t+1}_i T~it+1进行评分,选取最高的作为结果,也就是:
T ^ i t + 1 = a r g m a x T ~ i t + 1 { f s ( T ~ i t + 1 ) } \hat T^{t+1}_i=argmax_{\tilde T^{t+1}_i}\{f_s(\tilde T^{t+1}_i) \} T^it+1=argmaxT~it+1{fs(T~it+1)}其中 T ^ i t + 1 \hat T^{t+1}_i T^it+1代表在 t + 1 t+1 t+1帧目标 i i i的最终预测轨迹。

[评分网络损失函数]

  对于多目标跟踪过程中的一个目标来说,例如这个目标是 i i i,在 t t t帧的轨迹Groundtruth是 T i t T^t_i Tit T i t = ( T i t − 1 , b i t ) T^t_i=(T^{t-1}_i,b^t_i) Tit=(Tit1,bit)也就是代表在 t t t帧的视频跟踪目标有 i i i个。
  多目标跟踪网络在第 t t t帧有 j j j个目标检测结果,而要跟踪的某一个目标 i i i包含在目标检测的结果中,那么可以通过下式得到 t t t帧目标 i i i的预测轨迹 T ^ i + n t \hat T^t_{i+n} T^i+nt组成候选轨迹 T ^ i t \hat\mathcal T^{t}_i T^it
T ^ i t = { T ^ i + 1 t , T ^ i + 2 t , . . . , T ^ i + j t } \hat\mathcal T^{t}_i=\{\hat T^t_{i+1},\hat T^t_{i+2},...,\hat T^t_{i+j}\} T^it={T^i+1t,T^i+2t,...,T^i+jt} T ^ i + n t = ( T ^ i t − 1 , b n t ) \hat T^t_{i+n}=(\hat T^{t-1}_i,b^t_n) T^i+nt=(T^it1,bnt) n ∈ { 1 , 2 , . . . , i , . . . , j } n\in\{1,2,...,i,...,j\} n{1,2,...,i,...,j}
其中下标 i + n i+n i+n表示 t − 1 t-1 t1帧的目标 i i i和第 t t t帧检测的目标 n n n的组合,那么轨迹中与Groundtruth T i t T^t_i Tit最相似的是:
T ^ i + i t = ( T ^ i t − 1 , b i t ) \hat T^t_{i+i}=(\hat T^{t-1}_i,b^t_i) T^i+it=(T^it1,bit)
  那么 T ^ i t / T ^ i + i t \hat\mathcal T^{t}_i/ \hat T^t_{i+i} T^it/T^i+it表示在候选轨迹 T ^ i t \hat\mathcal T^{t}_i T^it中剔除得分最高的 T ^ i + i t \hat T^t_{i+i} T^i+it,那么剩下的就是非目标 i i i的预测轨迹,可能是其他跟踪目标也可能是误检目标,单对于目标 i i i来说都是错的,所以作者要抑制这些得分定义了margin损失 ( L m a r g i n ) i t (L_{margin})^t_i (Lmargin)it,表示 t t t帧目标 i i i的margin损失 L m a r g i n L_{margin} Lmargin
( L m a r g i n ) i t = ∑ T ^ i + n t ∈ T ^ i t / T ^ i + i t m a x ( 0 , S i g m o i d ( f s ( T ^ i + n t ) ) − S i g m o i d ( f s ( T i t ) ) + α ) (L_{margin})^t_i=\sum_{{\hat T^t_{i+n}\in {{\hat{\mathcal T}^t_i}/{\hat T^t_{i+i}}}}}max(0,Sigmoid(f_s({\hat T^t_{i+n}}))-Sigmoid(f_s(T^t_i))+α) (Lmargin)it=T^i+ntT^it/T^i+itmax(0,Sigmoid(fs(T^i+nt))Sigmoid(fs(Tit))+α) n ∈ { 1 , 2 , . . , i − 1 , i + 1 , . . . , j } n\in \{1,2,..,i-1,i+1,...,j\} n{1,2,..,i1,i+1,...,j}
  如果第 t t t帧目标检测出 s s s个目标,跟踪目标总共有 j j j个,那么 L m a r g i n L_{margin} Lmargin需要计算 j j j次。
  上面的margin损失试图从候选中区分真实轨迹,而不能量化候选之间的差异。 具有较低身ID切换的候选轨迹应具有较高的传播保留率。但是,IDS是不可区分的指标,无法直接优化。 可以采用成对排名损失并在连续函数中对不可微度量进行编码。
( L r a n k ) t = ∑ T ^ i + i t , T ^ j + j t ∈ T ^ t S i g m o i d ( γ × ( f s ( T ^ i + i t ) − f s ( T ^ j + j t ) ) ) (L_{rank})^t=\sum_{\hat T^t_{i+i},{\hat T^t_{j+j}\in \hat \mathcal T^t}}Sigmoid(γ×(f_s(\hat T^t_{i+i})-f_s(\hat T^t_{j+j}))) (Lrank)t=T^i+it,T^j+jtT^tSigmoid(γ×(fs(T^i+it)fs(T^j+jt))) { γ = 1  if  IDS ⁡ ( T ^ i + i t ) > IDS ⁡ ( T ^ j + j t ) γ = − 1  if  IDS ⁡ ( T ^ i + i t ) < IDS ⁡ ( T ^ j + j t ) \left\{\begin{array}{lr} \gamma=1 & \text { if } \operatorname{IDS}\left(\hat T^t_{i+i}\right)>\operatorname{IDS}\left(\hat T^t_{j+j}\right) \\ \gamma=-1 & \text { if } \operatorname{IDS}\left(\hat T^t_{i+i}\right)<\operatorname{IDS}\left(\hat T^t_{j+j}\right) \end{array}\right. γ=1γ=1 if IDS(T^i+it)>IDS(T^j+jt) if IDS(T^i+it)<IDS(T^j+jt)
  那么最后的总损失:
L t = L m a r g i n t + L r a n k t L^t=L_{margin}^t+L_{rank}^t Lt=Lmargint+Lrankt

[SBTO算法]

  作者提出了一个基于送搜索的tracklet优化算法(Search-Based Tracklet Optimizing),算法的步骤:
①对于一个特定的跟踪对象 i i i,第 t t t帧时,在很多候选轨迹中选取了最高的 K K K个轨迹, T ^ i t = { T ^ i + 1 t , T ^ i + 2 t , . . . , T ^ i + K t } \hat \mathcal T_i^t=\{\hat T^t_{i+1},\hat T^t_{i+2},...,\hat T^t_{i+K}\} T^it={T^i+1t,T^i+2t,...,T^i+Kt}。为了方便,先写成 T ^ i t = { T ^ 1 t , T ^ 2 t , . . . , T ^ K t } \hat \mathcal T_i^t=\{\hat T^t_{1},\hat T^t_{2},...,\hat T^t_{K}\} T^it={T^1t,T^2t,...,T^Kt}
②在第 t + 1 t+1 t+1帧时,通过目标检测算法检测到 C C C个物体,那么将 T ^ i t \hat \mathcal T_i^t T^it中所有的tracklet再加上1帧的结果就可以组成 T ^ i t + 1 \hat \mathcal T_i^{t+1} T^it+1 t t t帧的tracklet共有 K K K种, t + 1 t+1 t+1帧的检测结果有 C C C种,那么 T ^ i t + 1 \hat \mathcal T_i^{t+1} T^it+1种会包含 K × C K×C K×C种,即: T ^ i t + 1 = { T ^ 1 + 1 t , T ^ 1 + 2 t , . . . , T ^ 1 + C t , . . . , T ^ K + 1 t , T ^ K + 2 t , . . . , T ^ K + C t } \hat \mathcal T_i^{t+1}=\{\hat T^t_{1+1},\hat T^t_{1+2},...,\hat T^t_{1+C},...,\hat T^t_{K+1},\hat T^t_{K+2},...,\hat T^t_{K+C}\} T^it+1={T^1+1t,T^1+2t,...,T^1+Ct,...,T^K+1t,T^K+2t,...,T^K+Ct}
③通过 f s ( . ) f_s(.) fs(.) T ^ i t + 1 \hat \mathcal T_i^{t+1} T^it+1中的tracklet进行评分,分数降序排列。
④排列完成后,选取排列前 K K K的tracklet更新成为第 t + 1 t+1 t+1 T ^ i t + 1 \hat \mathcal T_i^{t+1} T^it+1,相当于从原先 K × C K×C K×C个tracklet剪枝到 K K K个tracklet,可以表示为:
T ^ i t + 1 = { T ^ 1 t + 1 , T ^ 2 t + 1 , . . . , T ^ K t + 1 } \hat \mathcal T_i^{t+1}=\{\hat T^{t+1}_{1},\hat T^{t+1}_{2},...,\hat T^{t+1}_{K}\} T^it+1={T^1t+1,T^2t+1,...,T^Kt+1}
同样的步骤可以继续得到 T ^ i t + 2 、 T ^ i t + 3 . . . \hat \mathcal T_i^{t+2}、\hat \mathcal T_i^{t+3}... T^it+2T^it+3...
⑤计算损失:
L t o t a l = ∑ t = 1 N − 1 L t + 1 L_{total}=\sum^{N-1}_{t=1}L_{t+1} Ltotal=t=1N1Lt+1
  注意以上的算法时训练的算法,训练的过程中会提供Groundtruth,保证评分网络对Groundtruth的评分尽量为1,而 T ^ i t \hat \mathcal T_i^t T^it中评分最高的 K K K个tracklet作者认为全都是错的,要通过训练优化损失,抑制评分最高的 K K K个tracklet,这样就能保证正确的tracklet评分高,错误的tracklet评分低。就像下图所示:

  下面是作者展示的算法流程,本文符号与作者算法的符号不太一样,仅供参考。

[评分网络的结构]

  下面作者介绍了评分网络的结构,但是介绍的不是很多,使用的是LSTM的结构。下图右侧就是上面说的SBTO的流程,左侧是评分网络的流程。

  每一帧的截取目标送入卷积网络生成 φ φ φ φ φ φ是一个一维向量,然后生成隐藏状态 h h h h h h都是由上一帧的隐藏状态和当前帧的 φ φ φ生成:
h t + 1 = f ( h t , φ t + 1 ) h_{t+1}=f(h_t,φ_{t+1}) ht+1=f(ht,φt+1)
  之后作者介绍不太清楚,可能可能可能是这样。实线表示 t t t帧的时候对所有 0 − t 0-t 0t帧的隐藏状态进行加权求和得到实心蓝色的部分,当 t + 1 t+1 t+1帧的时候,所有 0 − t + 1 0-t+1 0t+1帧的隐藏状态加权求和(空心蓝色部分)会替代或者组合实心蓝色的部分,然后和当前的隐藏状态同时输入全连接层输出评分。

本人理解和作者的思想可能有偏差,待代码开源后进行更改!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值