CSTracker原团队的论文,设计了re-check子网络,可以添加在JDE范式的跟踪器之中,涨点明显。
论文:http://arxiv.org/abs/2104.09441
代码:https://github.com/JudasDie/SOTS
近来,ons-shot的方法在MOT中取得了开创新的结果。one-shot方法即是JDT(JDE)范式的多目标跟踪方法,在同一网络内,提取到用于检测和ReID任务的特征。但这些方法大多有一个相同的问题,仅仅依靠单帧输入来进行当前帧bbox的预测,而当遇到遮挡、模糊之类的模糊时,有用的视觉信息缺失,跟踪器的性能便会下降。这也是最近很多论文想要的应对的问题。如果一个目标,其在当前帧被误分为背景类别,那么便不会被连接到本属于的轨迹中,造成轨迹的中断或者终止。于是,作者在这篇文章中提出了一个re-check网络来存储这些没有检测到的目标,作者称之为“fake background”。re-check通过修进后的互相关性层(cross-correlation layer)来捕获先前轨迹和当前帧的候选框之间的关系,以此将先前的轨迹传播到当前帧来。
现有的MOT方法大多分为two-step和one-shot两种。two-step方法,也就是TBD(tracking-by-detection)范式,将MOT分解成目标检测和数据关联两个独立的子任务。虽然效果很好,但对每个bbox进行独立的外貌embedding的提取所带来的的计算量过于庞大。而one-shot方法则将两个任务的特征提取融合到了一个网络之中。通过共享特征和进行多任务学习,它们能够以准实时速度运行。作者发现,大多数已有的one-shot跟踪器都是以一个强大的完备的检测器为基础的,换句话说,在ReID任务看来,会假定所以的目标都被检测器正确检测到。然而,真实场景中有很多困难,使得这个假设是不太可能的,如图。
红色框圈出的目标,在一些帧中,因为遮挡或者其他原因,被分为前景的概率较小,所以并没有被检测器检测到,所以会造成轨迹的中断。而检测器检测不到这些目标,因为其仅仅采用了当前帧那一帧的信息,这样是远远不够的。作者通过时序信息,对检测器错误分类的目标其周围的环境信息进行检查,来恢复那些没有找到的目标。和之前的某些方法直接采用前一阵的特征来丰富当前帧的特征的操作不同,re-check网络其实是将前一阵的目标转移到当前帧来,弥补被误分类的目标,类似于一个预测模型。re-check通过前一帧目标的位置,检查其在当前帧位置附近的环境信息,来生成一个候选框。如果候选框并不在当前帧的检测结果中,那么便可以认为它是被当前帧的检测器误分类的目标,便可以将其加入到最终的结果中。
上图是方法的整体结构,在JDE范式的跟踪器之后添加了一个模块,灰框中可以改用其他JDE范式的算法,作者在文中采用的是CSTrack。
输入当前帧
x
x
x,通过特征提取器(backbone和neck)得到特征图
F
t
\boldsymbol{F}_{t}
Ft:
F
t
=
Ψ
(
x
)
\boldsymbol{F}_{t}=\Psi(\boldsymbol{x})
Ft=Ψ(x)之后,
F
t
\boldsymbol{F}_{t}
Ft再通过网络的head得到检测结果和外貌embedding:
[
R
t
d
e
,
F
t
i
d
]
=
Φ
(
F
t
)
\left[\boldsymbol{R}_{t}^{d e}, \boldsymbol{F}_{t}^{i d}\right]=\Phi\left(\boldsymbol{F}_{t}\right)
[Rtde,Ftid]=Φ(Ft)
R
t
d
e
\boldsymbol{R}_{t}^{d e}
Rtde是检测结果,其中包括前景概率
P
t
d
e
∈
R
H
×
W
×
1
\boldsymbol{P}_{t}^{d e} \in \mathbb{R}^{H \times W \times 1}
Ptde∈RH×W×1和bbox结果
B
t
d
e
∈
R
H
×
W
×
4
\boldsymbol{B}_{t}^{d e} \in \mathbb{R}^{H \times W \times 4}
Btde∈RH×W×4。
F
t
i
d
∈
R
H
×
W
×
C
\boldsymbol{F}_{t}^{i d} \in \mathbb{R}^{H \times W \times C}
Ftid∈RH×W×C(C=512)为ID embedding。检测结果
R
t
d
e
\boldsymbol{R}_{t}^{d e}
Rtde通过greedy-NMS得到当前帧检测器最终的结果
D
base
\boldsymbol{D}_{\text {base }}
Dbase 。
D
base
\boldsymbol{D}_{\text {base }}
Dbase 中的每一个检测结果,对应着
F
t
i
d
\boldsymbol{F}_{t}^{i d}
Ftid中的一个
1
×
1
×
C
1 \times 1 \times C
1×1×C的embedding。假设
E
t
i
d
\boldsymbol{E}_{t}^{i d}
Etid为
D
base
\boldsymbol{D}_{\text {base }}
Dbase 中检测结果的embedding的集合,在先前的one-shot方法中,
D
base
\boldsymbol{D}_{\text {base }}
Dbase 和
E
t
i
d
\boldsymbol{E}_{t}^{i d}
Etid会用来进行数据关联,通过匈牙利算法,和之前的轨迹进行连接。
CSTrack通过加入互注意力机制来缓解检测任务和ReID任务之间的竞争,以极小的代价提升了JDE,所以作者采用CSTrack作为baseline。
SiamMOT: 作者将提出的方法命名为SiamMOT,设计了一个re-check网络来修复被检测器误分为背景的目标。
如上图所示,上一帧的embedding
E
t
−
1
i
d
\boldsymbol{E}_{t-1}^{i d}
Et−1id被用来作为这一帧的时序信息。网络通过计算
E
t
i
d
\boldsymbol{E}_{t}^{i d}
Etid和
F
t
i
d
\boldsymbol{F}_{t}^{i d}
Ftid之间的相似度,将轨迹沿伸到当前帧来。作者通过实验还发现,如果一个目标在当前帧消失了,那么在相似度图中便对应着FP的反应。为了缓解这个问题,作者又将相似度图与当前帧特征
F
t
\boldsymbol{F}_{t}
Ft进行融合,来进行微调。最终,re-check网络可以表示为:
M
p
=
Π
(
F
t
i
d
,
E
t
−
1
i
d
,
F
t
)
\boldsymbol{M}_{p}=\Pi\left(\boldsymbol{F}_{t}^{i d}, \boldsymbol{E}_{t-1}^{i d}, \boldsymbol{F}_{t}\right)
Mp=Π(Ftid,Et−1id,Ft)其中,
M
p
\boldsymbol{M}_{p}
Mp代表着先前的轨迹在当前帧预测的结果,输出的是分类为前景的概率。
然后将
M
p
\boldsymbol{M}_{p}
Mp和原本的当前帧的bbox结果
B
t
d
e
\boldsymbol{B}_{t}^{d e}
Btde一起进行greedy-NMS。这次NMS的结果记为
D
trans
\boldsymbol{D}_{\text {trans }}
Dtrans 。
D
trans
\boldsymbol{D}_{\text {trans }}
Dtrans 和
D
base
\boldsymbol{D}_{\text {base }}
Dbase 通过相互之间的IoU进行融合,最后得到
D
final
\boldsymbol{D}_{\text {final}}
Dfinal。
D
final
\boldsymbol{D}_{\text {final}}
Dfinal和其在
F
t
i
d
\boldsymbol{F}_{t}^{i d}
Ftid中对应的embedding用于数据关联。
re-check网络分为两个子模块:沿伸检测模块(the transductive detection module)用于轨迹传播和精修模块(the refinement module)。
Transductive Detection Module: 此模块的目的是通过前一帧embedding
E
t
−
1
i
d
=
{
e
t
−
1
1
,
⋯
,
e
t
−
1
n
}
\boldsymbol{E}_{t-1}^{i d}=\left\{\boldsymbol{e}_{t-1}^{1}, \cdots, \boldsymbol{e}_{t-1}^{n}\right\}
Et−1id={et−11,⋯,et−1n}和当前帧候选embedding之间的相似度,来预测之前轨迹在当前帧的位置。响应图
m
i
m_i
mi的计算方式是:
m
i
=
(
e
t
−
1
i
∗
F
t
i
d
)
∣
i
=
1
n
\boldsymbol{m}_{i}=\left.\left(\boldsymbol{e}_{t-1}^{i} * \boldsymbol{F}_{t}^{i d}\right)\right|_{i=1} ^{n}
mi=(et−1i∗Ftid)∣∣∣i=1n
m
i
m_i
mi中的最大值便代表之前轨迹在当前帧的位置。
n
n
n为上一帧embedding的个数,所以最终会得到
n
n
n张响应图,
M
=
{
m
1
,
⋯
,
m
n
}
\boldsymbol{M}=\left\{\boldsymbol{m}_{1}, \cdots, \boldsymbol{m}_{n}\right\}
M={m1,⋯,mn}。将响应图
m
i
m_i
mi转换成二元的mask,将高反应区域设为1,其余位置均是0。这样会减少其他模糊的容易混淆的预测:
m
^
i
x
y
=
{
1
if
∥
x
−
c
x
∥
≤
r
,
∥
y
−
c
y
∥
≤
r
0
otherwise
\hat{\boldsymbol{m}}_{i}^{x y}=\left\{\begin{array}{ll} 1 & \text { if }\left\|x-c_{x}\right\| \leq r,\left\|y-c_{y}\right\| \leq r \\ 0 & \text { otherwise } \end{array}\right.
m^ixy={10 if ∥x−cx∥≤r,∥y−cy∥≤r otherwise
c
x
c_x
cx和
c
y
c_y
cy是
m
i
m_i
mi中最大值的坐标,
r
r
r为设置的范围。再将得到的
m
^
i
\hat{\boldsymbol{m}}_{i}
m^i和原始的
m
i
\boldsymbol{m}_{i}
mi相乘,得到最终的响应图:
M
s
=
∑
i
=
1
n
(
m
^
i
⋅
m
i
)
\boldsymbol{M}_{s}=\sum_{i=1}^{n}\left(\hat{\boldsymbol{m}}_{i} \cdot \boldsymbol{m}_{i}\right)
Ms=i=1∑n(m^i⋅mi)
M
s
\boldsymbol{M}_{s}
Ms代表着当前帧各位置上存在上一帧轨迹的概率。如果
M
s
\boldsymbol{M}_{s}
Ms中的某个位置值很大,说明此处有一个候选框可以连接到轨迹上。
Refinement Module: 作者观察到没有出现在当前帧的那些目标在tracklet transduction模块中会带来一些假阳性样本,为了缓解这个问题,所以作者设计了refinement模块,采用原始的特征
F
t
∈
R
H
×
W
×
C
(
C
=
256
)
\boldsymbol{F}_{t} \in \mathbb{R}^{H \times W \times C}(\mathrm{C}=256)
Ft∈RH×W×C(C=256)来对响应图
M
s
\boldsymbol{M}_{s}
Ms进行微调。首先,将
M
s
\boldsymbol{M}_{s}
Ms放入一个反向bottleneck模块,将
M
s
\boldsymbol{M}_{s}
Ms映射到高维空间,再降为到原本的维度,得到
M
s
′
∈
R
H
×
W
×
1
\boldsymbol{M}_{s}^{\prime} \in \mathbb{R}^{H \times W \times 1}
Ms′∈RH×W×1,然后与当前帧的特征进行融合:
F
^
=
F
t
⋅
M
s
′
\hat{\boldsymbol{F}}=\boldsymbol{F}_{t} \cdot \boldsymbol{M}_{s}^{\prime}
F^=Ft⋅Ms′再通过几层卷积,将
F
^
\hat{\boldsymbol{F}}
F^转换为最终的
M
p
\boldsymbol{M}_{p}
Mp。
Optimization: 响应图
M
p
\boldsymbol{M}_{p}
Mp的gt定义为多个高斯分布的组合。对于每个目标来说,
t
i
=
exp
(
−
(
x
−
c
i
x
)
2
+
(
y
−
c
i
y
)
2
2
σ
i
2
)
\boldsymbol{t}_{i}=\exp \left(-\frac{\left(x-c_{i}^{x}\right)^{2}+\left(y-c_{i}^{y}\right)^{2}}{2 \sigma_{i}^{2}}\right)
ti=exp(−2σi2(x−cix)2+(y−ciy)2)其中,
c
i
=
(
c
i
x
,
c
i
y
)
c_{i}=\left(c_{i}^{x}, c_{i}^{y}\right)
ci=(cix,ciy)为目标的中心点坐标,
σ
i
\sigma_{i}
σi和目标大小有关。然后可以得到和目标数量相同的gt,
t
=
{
t
1
,
…
,
t
n
}
\boldsymbol{t}=\left\{\boldsymbol{t}_{1}, \ldots, \boldsymbol{t}_{n}\right\}
t={t1,…,tn}。最终,将
t
\boldsymbol{t}
t沿着通道维度进行相加,得到最终的
T
\boldsymbol{T}
T。为了减小两个高斯分布之间重叠部分的影响,
σ
i
\sigma_{i}
σi的上限设为1。最终采用Logistic−MSE损失监督训练:
L
g
=
−
1
n
∑
x
y
{
(
1
−
M
p
x
y
)
log
(
M
p
x
y
)
,
if
T
x
y
=
1
(
1
−
T
x
y
)
M
p
x
y
log
(
1
−
M
p
x
y
)
,
else
\mathcal{L}_{g}=-\frac{1}{n} \sum_{x y}\left\{\begin{array}{l} \left(1-\boldsymbol{M}_{p}^{x y}\right) \log \left(\boldsymbol{M}_{p}^{x y}\right), \quad \text { if } \boldsymbol{T}^{x y}=1 \\ \left(1-\boldsymbol{T}^{x y}\right) \boldsymbol{M}_{p}^{x y} \log \left(1-\boldsymbol{M}_{p}^{x y}\right), \text { else } \end{array}\right.
Lg=−n1xy∑{(1−Mpxy)log(Mpxy), if Txy=1(1−Txy)Mpxylog(1−Mpxy), else
这一部分介绍了
D
trans
\boldsymbol{D}_{\text {trans }}
Dtrans 和
D
base
\boldsymbol{D}_{\text {base }}
Dbase 进行融合的过程。首先,对
D
trans
\boldsymbol{D}_{\text {trans }}
Dtrans 中的每一个bbox,
b
i
\boldsymbol{b}_{i}
bi,计算一个得分
s
s
s:
s
=
1
−
max
(
IOU
(
b
i
,
D
base
)
)
s=1-\max \left(\operatorname{IOU}\left(\boldsymbol{b}_{i}, \boldsymbol{D}_{\text {base }}\right)\right)
s=1−max(IOU(bi,Dbase ))
s
s
s越高说明
b
i
\boldsymbol{b}_{i}
bi没有出现在
D
base
\boldsymbol{D}_{\text {base }}
Dbase 中(阈值设为0.5),可能是当前帧的检测器将其误分类为背景。算法流程也较为简单,如下:
在之前的方法中,网络预测的是anchor的中心点
(
a
x
,
a
y
)
\left(a_{x}, a_{y}\right)
(ax,ay)到bbox中心点
(
b
x
,
b
y
)
\left(b_{x}, b_{y}\right)
(bx,by)之间的归一化的偏移量:
Δ
=
b
−
a
=
Sigmoid
(
r
)
\boldsymbol{\Delta}=\boldsymbol{b}-\boldsymbol{a}=\operatorname{Sigmoid}(\boldsymbol{r})
Δ=b−a=Sigmoid(r)然而,在下图中,绿色框的中心点在图像的外面,而由于sigmoid函数的限制,网络预测的偏移量生成的bbox很难覆盖整个目标。当目标只是部分可见时,bbox的预测也是不完全的,那么由于gt的bbox和预测的不完全的bbox差别很大,所以会被认定为假阳性样本。
为了缓解这个问题,作者提出了boundaryaware regression方法(BAR)。让模型预测:
Δ
=
b
−
a
=
(
Sigmoid
(
r
)
−
0.5
)
×
h
\boldsymbol{\Delta}=\boldsymbol{b}-\boldsymbol{a}=(\operatorname{Sigmoid}(\boldsymbol{r})-0.5) \times h
Δ=b−a=(Sigmoid(r)−0.5)×h其中的
h
h
h也是一个可学习的参数。这使得网络预测的偏移量能够大于1,使得预测的bbox覆盖得更多
。
上表是消融实验,可以看出re-check网络对baseline的提升效果比较大,BAR模块也可以在re-check模块的基础上再次提高方法的效果。
上表是本文方法和其他方法之间的对比实验,可以看出,SiamMOT达到了sota的水平,比baseline(CSTrack)在MOT16和MOT17上均高了6%左右,涨点明显。