论文地址: https://arxiv.org/pdf/2303.10404.pdf
代码: 未开源

目前是MOT20的第二名


1. Abstract

这篇文章着力于解决长时跟踪的问题. 当前大多数方法只能依靠Re-ID特征来进行长时跟踪, 也就是轨迹长期丢失后的再识别. 然而, Re-ID特征并不总是有效的. 尤其是在拥挤和极度遮挡的情况下. 为此, 这篇文章提出了MotionTrack, 包括两个方面:

  1. 设计了一个交互模块(Interaction Module), 来学习短轨迹之间的相互作用. 简单来说, 就是根据目标相邻两帧的的偏移, 计算出一个表征目标之间相互影响的矩阵, 随后利用该矩阵经过一个GCN和MLP来直接得到目标的预测位置(代替Kalman滤波).
  2. 设计了一个恢复模块(Refined Module), 用来拼接碎片化的轨迹. 对于没有匹配成功的检测和丢失的轨迹, 计算他们之间的速度-时间关系, 并保留匹配程度高的组合.

2. Introduction

MOT的范式有两种(当然不完全是这两种), 一是tracking-by-detection, 二是tracking-by-regression. 前者是根据检测器的结果, 将检测与轨迹做关联; 而后者往往是检测器提供检测结果之外, 还预测目标的偏移(比如CenterTrack), 也就是直接回归得到目标的新位置, 这样就不需要额外的关联过程. 本文的方法是tracking-by-detection的方法.

不论哪种范式, 都需要处理短时和长时关联的问题. 对于短时关联, 往往是提取目标的运动或者外观特征. 但是作者认为在拥挤密集的场景中这样性能有限. 主要的原因是bbox太小, 提取的特征有限, 而且在密集场景中目标运动也是很复杂的. 对于长时关联, 如果依靠Re-ID特征去关联, 则同样有分辨率低等等问题, 如果像MeMOT这种采用记忆库的方式, 则有些耗时.

为此, 作者提出了MotionTrack, 对于短时关联, 学习目标之间的交互作用, 来预测拥挤场景下的复杂运动. 对于长时关联, 将轨迹的历史信息和当前的检测进行相关计算, 随后利用当前检测再对轨迹进行修正.

3. Method

下面对文章解决短时和长时关联的两个创新点逐一介绍.

3.1 短时关联–Interaction Module

假设第 ttt帧, 我们有检测集合 Dt \mathcal{D}^tDt, 现有轨迹集合为 T\mathbb{T}T, 共有 MMM个轨迹, 其中有 SSS个标记为丢失的轨迹, 集合为 T l o s t \mathbb{T}^{lost}Tlost. 我们计算 MMM个轨迹在第 t − 2t-2t2 t − 1t-1t1帧的偏移量 Ot∈ R M × 4 \mathcal{O}^t\in\mathbb{R}^{M\times 4}OtRM×4, 每一行分别表示中心点xy和高宽的偏移量. 随后我们将偏移量和绝对位置坐标concat起来, 得到 It∈ R M × 8 I^t\in\mathbb{R}^{M\times 8}ItRM×8.

随后, 我们利用自注意力机制, 得到每个轨迹之间运动的影响, 如下式所示:


其中 WWW代表权重, ddd是维数. 这个与Transformer里的自注意力是基本相似的.

于是我们得到了注意力矩阵 A a t t e∈ R M × M A^{atte}\in\mathbb{R}^{M\times M}AatteRM×M, 这个矩阵中的每个元素表示的就是两个轨迹间运动趋势的影响程度.

这其实是社会力模型的一种表示, 传统的社会力模型是手工设计特征, 本文(以及后期的多数方法)都是用深度学习的方式直接学习.

为了更好地表示群体行为, 作者采用非对称卷积(简单来说, 就是采用 1 × n1\times n1×n或者 n × 1n\times 1n×1的卷积核). 因为在这个问题中, 采用这样的卷积核代表的可以是一些轨迹对一个轨迹的影响, 也就是群体建模了. 这一步的公式如下:


随后, 我们只保留大于 ξ\xiξ的元素, 如下所示:

其中 s g nsgnsgn是符号函数, 圆圈加点是Hadamard积, 也就是逐元素乘积.

最后, 我们利用偏移量 Ot O^tOt, 和表示轨迹间相互影响的矩阵 A a d j c A^{adjc}Aadjc输入到一个GCN和MLP后预测当前帧的偏移量:


其中 WG W^GWG是图网络的权重.

3.2 长时关联–Refined Module

我们将预测的轨迹的位置和检测进行IoU匹配(最简单的匹配方式), 如果匹配完, 还有 UUU个检测和 SSS个轨迹没有匹配, 则进入到Refined Module模块.具体地, 剩余的检测集合记为 D r e s t∈ R U × 5 D^{rest}\in\mathbb{R}^{U\times 5}DrestRU×5, 5表示的分别是时间和 x y w hxywhxywh坐标. 我们保留30帧历史轨迹的信息, 因此仍未匹配的轨迹集合记为 T l o s t∈ R S × 30 × 5 T^{lost}\in\mathbb{R}^{S\times 30 \times 5}TlostRS×30×5, 我们对于 T l o s t T^{lost}Tlost的第二维和第三维分别采用非对称卷积, 得到新的特征, 如下:

对第二维采用卷积的意义是对于每个轨迹, 学习时间维上的关联; 对第三维采用卷积的意义是对不同轨迹, 学习位置间的影响.

随后对于检测, 将当前位置和最后一次的位置concat起来, 变成D rest ^∈ R U × 10 \hat{D^{rest}}\in\mathbb{R}^{U \times 10}Drest^RU×10, 随后将10升维成D:


其中 F d e t e∈ R U × D F^{dete}\in\mathbb{R}^{U \times D}FdeteRU×D

有一个疑问: 还没有匹配, 怎么确定检测的最后一次的位置是什么” /> F d e t e F^{dete}Fdete F t r a j F^{traj}Ftraj结合起来, 变成 F ∈ R S × U × 2 D F\in\mathbb{R}^{S \times U \times 2D}FRS×U×2D, 这样我们对第三维做MLP+sigmoid, 就可以得到轨迹和检测之间的相似度得分(相关度) C c o r r∈ R S × U C^{corr}\in\mathbb{R}^{S \times U}CcorrRS×U, 之后将 C c o r r C^{corr}Ccorr作为代价矩阵, 用贪心算法就可以得到匹配.

得到匹配后, 我们要利用现有的检测来修正丢失轨迹的位置, 采用简单的线性模型即可:

3.3 整体流程

再看下面的流程图, 就比较明了了:

3.4 训练

以前做笔记, 不注重是怎么训练的, 其实这是很重要的一部分…

对于Interaction Module, 根据预测出的偏移量计算绝对坐标, 并采用IoU损失:


具体地, 采用相邻的三帧作为一个sample, 前两帧是网络的输入, 预测出的第三帧位置用来计算损失.

对于Refined Module, 对所有的真值轨迹进行提取, 并且随机进行两两组合, 一种组合方式作为一个训练集, 然后对轨迹和检测进行采样, 看看这个网络预测出的检测是否属于该轨迹. 这是个分类问题, 因此采用交叉熵损失:

4. 效果与评价


总体来说, 效果确实是很好的.

这篇文章比较”大力出奇迹”, 堆了self-attention, 堆了GCN, 也用了相关运算这种在MOT里也比较惯常的做法, 亮点是从社会力模型的角度讲故事, 而且用网络代替Kalman预测位置也许具有更好的效果.