现有的 MOT 方法大致可分为 tracking-by-detection 和 joint-detection-association 两种方式。尽管 joint-detection-association 获得了更多的关注度,取得了与前者相近的表现,作者认为在跟踪的准确率方面 tracking-by-detection 方式仍是最优的。Joint-detection-association 将不同的模块(如检测、运动、embedding 和匹配)整合到一起,存在两个问题:
本文认为,DeepSORT 表现不如 SOTA 方法,是因为 DeepSORT 所使用的技术落伍了,而非其跟踪方式的问题。
此外,现有的方法
作者重新研究了 DeepSORT,从多个方面(检测、embedding 和关联)对其进行了改进,提出了 StrongSORT。此外,作者提出了 2 个轻量的、即插即用的模块,能进一步优化跟踪结果。首先,appearance-free link (AFL) 将短的 tracklets 通过全局匹配来判断它们是否属于同一 ID,得到完整的轨迹,没有使用昂贵的外观特征。其次,提出了高斯平滑插值(GSI)来补偿丢失的检测框,GSI 基于高斯过程回归算法实现了更准确的定位。
如上图上半部分,DeepSORT 是一个双分支架构,包括了外观分支和运动分支。在外观分支上,给定每一帧的检测结果,外观特征描述器(一个 CNN)完成特征提取,该 CNN 在行人重识别数据集 MARS 上预训练。它使用一个特征池,存储了每个 tracklet 在过去 100 帧的特征。当出现新的检测框,计算特征池里第 i i i个特征 R i R_i Ri和第 j j j个检测框 f j f_j fj的最小余弦距离:
d ( i , j ) = min { 1 − f j T ⋅ f k ( i ) ∣ f k ( i ) ∈ R i } d(i,j)=\min\lbrace1-f_j^T \cdot f_k^{(i)}|f_k^{(i)}\in R_i\rbrace d(i,j)=min{1−fjT⋅fk(i)∣fk(i)∈Ri}
该距离用于代价匹配。
在运动分支,Kalman filter 预测当前帧中 tracklets 的位置。然后用 Mahalanobis 距离来计算 tracklets 和检测框的相似度。DeepSORT 使用这个运动距离过滤掉不太可能的配对。
随后,matching cascade 算法将 association 任务作为一系列子问题去解决,而非全局分配问题。核心思想就是常出现的物体拥有更高的匹配优先级。用 Hungarian 算法解决每个 association 子问题。
主要对 DeepSORT 的两个分支做了改进,如山图下半部分。
在外观分支,使用了更强的特征提取器 BoT,替换原来简单的 CNN。主干网络是 ResNeSt50,在 DukeMTMC-reID 数据集预训练,提取更具判别力的特征。对于特征池特征的更新策略,用指数滑动平均(EMA)方法来更新第 t t t帧第 i i i个 tracklet 的外观特征 e i t e_i^t eit:
e i t = α e i t − 1 + ( 1 − α ) f i t e_i^t=\alpha e_i^{t-1} + (1-\alpha)f_i^t eit=αeit−1+(1−α)fit
f i t f_i^t fit是当前匹配的检测框的外观特征, α = 0.9 \alpha=0.9 α=0.9是动量系数。EMA 更新策略不仅能增强配对的质量,也能提高速度。
在运动分支,采用了 ECC 进行相机运动补偿。原先的 Kalman filter 对于低质量检测框效果不好,忽略了检测噪声的尺度。为了解决该问题,借鉴了 NSA Kalman filter 算法,自适应地计算噪声协方差 R ~ k \tilde{R}_k R~k:
R ~ k = ( 1 − c k ) R k \tilde{R}_k=(1-c_k)R_k R~k=(1−ck)Rk
R k R_k Rk是预先设定的常量测量噪声协方差, c k c_k ck是状态 k k k的检测置信度得分。
此外,在匹配时除了使用外观特征距离,作者也使用了运动信息来解决分配问题。代价矩阵 C C C是外观代价 A a A_a Aa和运动代价 A m A_m Am的加权和:
C = λ ⋅ A a + ( 1 − λ ) ⋅ A m C=\lambda\cdot A_a + (1-\lambda)\cdot A_m C=λ⋅Aa+(1−λ)⋅Am
加权系数 λ \lambda λ设为 0.98 0.98 0.98。另一个有趣的发现就是,尽管 matching cascade 算法很重要,但随着跟踪器能力的变强,它会制约其表现。原因是,跟踪器越强,对模棱两可的匹配就更加鲁棒。因此,额外的先验信息会制约匹配的准确性。于是,作者使用全局线性匹配替换了 matching cascade。
目前的一些方法会使用 global link 来关联 tracklets,让匹配更加准确。但它们的计算量都很高,而且要调多个超参,不够鲁棒。作者也发现,过度依赖外观特征会造成算法对噪声的表现不好。AFLink 不依赖于外观特征,只需时间-空间信息来预测两个 tracklets 的关系。
上图就是 AFLink 模型的双分支架构。输入是 2 个 tracklets T i T_i Ti和 T j T_j Tj,其中 T ∗ = { f k , x k , y k } k = 1 N T_*=\lbrace f_k,x_k,y_k\rbrace_{k=1}^N T∗={fk,xk,yk}k=1N包括了最近 30 帧的画面 f k f_k fk和坐标位置 ( x k , y k ) (x_k,y_k) (xk,yk)。若少于 30 帧,则采用 zero padding。在 temporal module,使用 7 × 1 7\times 1 7×1卷积核对 temporal 维度进行卷积,提取特征。然后,fusion module 进行 1 × 3 1\times 3 1×3卷积,整合不同特征维度(即 f , x , y f,x,y f,x,y)的信息。对这两个特征图做池化,压缩为特征向量,然后 concat 起来,得到的特征就包含了丰富的时间空间信息。最后用一个 MLP 预测关联的置信度分数。
关联时,排除那些不合理的 tracklet 配对。然后对预测的分数使用线性分配,完成 global link。
一般使用插值来填补检测框丢失引起的轨迹 gaps。线性插值比较简单,因此很流行。但它没有考虑运动信息,就不够准确。现有的算法引入的方案都比较耗时,如单目标追踪器,Kalman filter,ECC 等。本文提出了一个轻量级的插值算法,使用高斯过程回归对非线性运动进行建模。
对于第 i i i个轨迹,其 GSI 为:
p t = f ( i ) ( t ) + ϵ p_t=f^{(i)}(t)+\epsilon pt=f(i)(t)+ϵ
其中 t ∈ F t\in F t∈F是帧数, ϵ ∼ N ( 0 , σ 2 ) \epsilon\sim N(0,\sigma^2) ϵ∼N(0,σ2)是高斯噪声, p t ∈ P p_t\in P pt∈P是第 t t t帧的位置坐标。给定由跟踪和线性插值结果组成的轨迹 S ( i ) = { t ( i ) , p t ( i ) } t = 1 L S^{(i)}=\lbrace t^{(i)},p_t^{(i)}\rbrace_{t=1}^L S(i)={t(i),pt(i)}t=1L,通过拟合函数 f ( i ) f^{(i)} f(i)实现非线性运动建模。假设一个点服从高斯过程 f ( i ) ∈ G P ( 0 , k ( ⋅ , ⋅ ) ) f^{(i)}\in GP(0, k(\cdot,\cdot)) f(i)∈GP(0,k(⋅,⋅)),其中 k ( x , x ′ ) = exp ( − ∥ x − x ′ ∥ 2 2 λ 2 ) k(x,x')=\exp(- \frac{\left\|x-x'\right\|^2}{2\lambda^2}) k(x,x′)=exp(−2λ2∥x−x′∥2)是径向基函数。基于高斯过程的性质,给定新一帧的位置集合 F ∗ F^* F∗,它平滑后的位置 P ∗ P^* P∗是:
P ∗ = K ( F ∗ , F ) ( K ( F , F ) + σ 2 I ) − 1 P P^*=K(F^*,F)(K(F,F) + \sigma^2I)^{-1}P P∗=K(F∗,F)(K(F,F)+σ2I)−1P
其中 K ( ⋅ , ⋅ ) K(\cdot,\cdot) K(⋅,⋅)是基于 k ( ⋅ , ⋅ ) k(\cdot,\cdot) k(⋅,⋅)的协方差函数。超参 λ \lambda λ控制轨迹的平滑程度,与轨迹的长度 l l l相关。
λ = τ ∗ log ( τ 3 / l ) \lambda=\tau \ast \log(\tau^3 / l) λ=τ∗log(τ3/l)
τ \tau τ设为 10。
上图展示了 GSI 和线性插值的区别。橙色的粗略跟踪结果包括了噪声抖动,蓝色的线性插值则忽略了运动信息。红色的 GSI 则通过平滑系数同时解决了整个轨迹的噪声抖动和运动信息问题。