论文地址: https://arxiv.org/pdf/2303.10404.pdf
代码: 未开源
目前是MOT20的第二名
1. Abstract
这篇文章着力于解决长时跟踪的问题. 当前大多数方法只能依靠Re-ID特征来进行长时跟踪, 也就是轨迹长期丢失后的再识别. 然而, Re-ID特征并不总是有效的. 尤其是在拥挤和极度遮挡的情况下. 为此, 这篇文章提出了MotionTrack, 包括两个方面:
- 设计了一个交互模块(Interaction Module), 来学习短轨迹之间的相互作用. 简单来说, 就是根据目标相邻两帧的的偏移, 计算出一个表征目标之间相互影响的矩阵, 随后利用该矩阵经过一个GCN和MLP来直接得到目标的预测位置(代替Kalman滤波).
- 设计了一个恢复模块(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
假设第帧, 我们有检测集合, 现有轨迹集合为, 共有个轨迹, 其中有个标记为丢失的轨迹, 集合为. 我们计算个轨迹在第到帧的偏移量, 每一行分别表示中心点xy和高宽的偏移量. 随后我们将偏移量和绝对位置坐标concat起来, 得到.
随后, 我们利用自注意力机制, 得到每个轨迹之间运动的影响, 如下式所示:
于是我们得到了注意力矩阵, 这个矩阵中的每个元素表示的就是两个轨迹间运动趋势的影响程度.
这其实是社会力模型的一种表示, 传统的社会力模型是手工设计特征, 本文(以及后期的多数方法)都是用深度学习的方式直接学习.
为了更好地表示群体行为, 作者采用非对称卷积(简单来说, 就是采用或者的卷积核). 因为在这个问题中, 采用这样的卷积核代表的可以是一些轨迹对一个轨迹的影响, 也就是群体建模了. 这一步的公式如下:
其中是符号函数, 圆圈加点是Hadamard积, 也就是逐元素乘积.
最后, 我们利用偏移量, 和表示轨迹间相互影响的矩阵输入到一个GCN和MLP后预测当前帧的偏移量:
3.2 长时关联–Refined Module
我们将预测的轨迹的位置和检测进行IoU匹配(最简单的匹配方式), 如果匹配完, 还有个检测和个轨迹没有匹配, 则进入到Refined Module模块.具体地, 剩余的检测集合记为, 5表示的分别是时间和坐标. 我们保留30帧历史轨迹的信息, 因此仍未匹配的轨迹集合记为, 我们对于的第二维和第三维分别采用非对称卷积, 得到新的特征, 如下:
对第二维采用卷积的意义是对于每个轨迹, 学习时间维上的关联; 对第三维采用卷积的意义是对不同轨迹, 学习位置间的影响.
随后对于检测, 将当前位置和最后一次的位置concat起来, 变成, 随后将10升维成D:
有一个疑问: 还没有匹配, 怎么确定检测的最后一次的位置是什么?
随后将和结合起来, 变成, 这样我们对第三维做MLP+sigmoid, 就可以得到轨迹和检测之间的相似度得分(相关度), 之后将作为代价矩阵, 用贪心算法就可以得到匹配.
得到匹配后, 我们要利用现有的检测来修正丢失轨迹的位置, 采用简单的线性模型即可:
3.3 整体流程
再看下面的流程图, 就比较明了了:
3.4 训练
以前做笔记, 不注重是怎么训练的, 其实这是很重要的一部分…
对于Interaction Module, 根据预测出的偏移量计算绝对坐标, 并采用IoU损失:
对于Refined Module, 对所有的真值轨迹进行提取, 并且随机进行两两组合, 一种组合方式作为一个训练集, 然后对轨迹和检测进行采样, 看看这个网络预测出的检测是否属于该轨迹. 这是个分类问题, 因此采用交叉熵损失:
4. 效果与评价
这篇文章比较”大力出奇迹”, 堆了self-attention, 堆了GCN, 也用了相关运算这种在MOT里也比较惯常的做法, 亮点是从社会力模型的角度讲故事, 而且用网络代替Kalman预测位置也许具有更好的效果.
文章出处登录后可见!