Global Correlation Network: End-to-End Joint Multi-Object Detection and Tracking
清华和北航的一篇多目标跟踪的论文,发表于ICCV2021,PDF地址:https://arxiv.org/abs/2103.12511。
摘要
大多数多目标跟踪(MOT)方法是基于tracking-by-detection范式的,检测和跟踪为两个独立的任务。最近,出现了一些单阶段方法,将两个任务的特征提取部分放在同一个网络中完成。但跟踪部分依旧需要进行数据关联以及一些关于轨迹的复杂的后处理。作者在这篇文章中提出了Global Correlation Network (GCNet),设计了一个全局相关网络层(global correlation layer)用于回归出bbox的绝对大小以及坐标。整个pipeline较为简单,不需要NMS以及其他复杂的跟踪策略。
介绍
传统的多目标跟踪算法是tracking-by-detection(TBD)范式,检测和跟踪两个任务均独立存在。得益于目标检测领域的发展,这类算法一度占据了几乎整个MOT领域。早期的算法采用一些简单的特征来进行数据关联,比如大小、位置和速度等,但这些特征或多或少都有些明显的缺陷。比如当相机发生抖动时,一些运动模型便无法发挥用处。此后,大多数方法采用外貌特征,虽然提高了准确度和鲁棒性,但也提高了计算代价。最近,很多算法通过在骨干网络之后添加一个ReID分支,将检测和外貌特征的提取部分结合在了一起。这样的方法虽然减少了计算复杂度,但在数据关联模块依旧可能需要运动模型预测或者复杂的跟踪策略,导致过多的超参数,以及推理时pipeline不够简洁。针对以上问题,作者设计了GCNet,以同样的方法实现了bbox回归和跟踪。众所周知,bbox回归利用局部特征估计anchor和gt之间的偏移,或者预测bbox大小以及关键点和特征位置之间的偏移。在GCNet中,作者想要直接预测出bbox的绝对大小和坐标,而不是相对坐标和偏移量。然而在传统的卷积神经网络中,由于感受野受限,局部特征并不会包含全局信息。自注意力模块可以使每个位置的特征都包含全局信息,但在一个高分辨率的特征图上进行自注意力计算复杂度太过高昂,所以作者设计了全局关联层( the global correlation layer)来将全局信息编码到每个位置的特征中。对于特征图
F
∈
R
h
×
w
×
c
F \in R^{h \times w \times c}
F∈Rh×w×c,通过两个线性变换生成两张不同的特征图
Q
Q
Q和
K
K
K:
Q
i
j
=
W
q
F
i
j
,
K
i
j
=
W
k
F
i
j
Q_{i j}=W_{q} F_{i j}, K_{i j}=W_{k} F_{i j}
Qij=WqFij,Kij=WkFij对于每一个
Q
i
j
Q_{i j}
Qij,计算其与所有的
K
i
j
K_{i j}
Kij之间的余弦距离,再经过另一个线性变换后,得到相关向量
C
i
j
∈
R
c
′
C_{i j} \in R^{c^{\prime}}
Cij∈Rc′:
C
i
j
=
W
⋅
flatten
(
[
Q
i
j
K
11
∣
Q
i
j
∣
∣
K
11
∣
⋯
Q
i
j
K
1
w
∣
Q
i
j
∣
∣
K
1
w
∣
⋮
⋱
⋮
Q
i
j
K
h
1
∣
Q
i
j
∣
∣
K
h
1
∣
⋯
Q
i
j
K
h
w
∣
Q
i
j
∣
∣
K
h
w
∣
]
)
C_{i j}=W \cdot \text { flatten }\left(\left[\begin{array}{ccc} \frac{Q_{i j} K_{11}}{\left|Q_{i j}\right|\left|K_{11}\right|} & \cdots & \frac{Q_{i j} K_{1 w}}{\left|Q_{i j}\right|\left|K_{1 w}\right|} \\ \vdots & \ddots & \vdots \\ \frac{Q_{i j} K_{h 1}}{\left|Q_{i j}\right|\left|K_{h 1}\right|} & \cdots & \frac{Q_{i j} K_{h w}}{\left|Q_{i j}\right|\left|K_{h w}\right|} \end{array}\right]\right)
Cij=W⋅ flatten ⎝⎜⎜⎛⎣⎢⎢⎡∣Qij∣∣K11∣QijK11⋮∣Qij∣∣Kh1∣QijKh1⋯⋱⋯∣Qij∣∣K1w∣QijK1w⋮∣Qij∣∣Khw∣QijKhw⎦⎥⎥⎤⎠⎟⎟⎞
相关向量
C
i
j
C_{i j}
Cij是将局部特征向量
Q
i
j
Q_{i j}
Qij和全局特征
K
K
K之间的相关性进行编码后的向量,所以它可以被用来回归出图像中相应位置的目标的bbox的绝对大小。将所有的相关向量
C
i
j
C_{i j}
Cij整合成相关图的形式
C
∈
R
h
×
w
×
c
′
C \in R^{h \times w \times c^{\prime}}
C∈Rh×w×c′,通过1*1的卷积得到
B
∈
R
h
×
w
×
4
B \in R^{h \times w \times 4}
B∈Rh×w×4。当进行目标检测时,
K
K
K和
Q
Q
Q为同一帧;当进行跟踪时,
Q
Q
Q为之前帧,
K
K
K为当前帧。这样以来,GCNet便可以以同样的方式来完成检测和跟踪。GCNet的分类分支,采用了与CenterNet同样的网络结构和训练策略。当进行推理模式时,对每一帧会生成检测热度图
Y
d
Y_d
Yd和跟踪热度图
Y
t
Y_t
Yt。检测热度图
Y
d
Y_d
Yd代表着当前帧目标中心的检测置信度,跟踪热度图
Y
t
Y_t
Yt代表着当前帧与下一帧之间的跟踪置信度。
方法
假设对于 t t t时刻来说,有第0帧到第 t − 1 t-1 t−1帧的轨迹, { T 1 , T 2 , … , T n } \left\{T_{1}, T_{2}, \ldots, T_{n}\right\} {T1,T2,…,Tn},其中 T i = [ B i , 1 , B i , 2 , … , B i , t − 1 ] T_{i}=\left[B_{i, 1}, B_{i, 2}, \ldots, B_{i, t-1}\right] Ti=[Bi,1,Bi,2,…,Bi,t−1], B i j B_{ij} Bij代表物体 i i i在 t t t时刻的bbox。输入当前帧的图像 I t ∈ R h × w × 3 I_{t} \in R^{h \times w \times 3} It∈Rh×w×3,需要将当前帧的目标 B x , t B_{x,t} Bx,t分配给历史轨迹,或者开启一条新轨迹。
Global Correlation Network
Detection module: 上图是框架中的检测模块,分为三部分:骨干网络、分类分支和回归分支。由于分类分支是与CenterNet一样,特征图的每一个位置都可能对应一个目标的中心点,所以特征图的分辨率对网络的性能有着至关重要的影响。为了获得高分辨率的特征图,并且保持感受野不受限,作者采用了与FPN一样的跳跃连接,但是只使用FPN输出中最好的一个特征图,记为
F
∈
R
h
′
×
w
′
×
c
F \in R^{h^{\prime} \times w^{\prime} \times c}
F∈Rh′×w′×c,其中
h
′
=
h
8
h^{\prime}=\frac{h}{8}
h′=8h,
w
′
=
w
8
w^{\prime}=\frac{w}{8}
w′=8w。分类分支为全卷机网络,输出检测的置信度热度图
Y
d
∈
R
h
′
×
w
′
×
n
Y_d \in R^{h^{\prime} \times w^{\prime} \times n}
Yd∈Rh′×w′×n,特征图的值范围均在0到1之间。
Y
d
Y_d
Yd的第
i
i
i个通道的峰值代表着目标的中心点属于第
i
i
i类。
回归分支的输入为
F
F
F和
Y
d
Y_d
Yd,然后计算三个特征图
Q
Q
Q,
K
K
K,
V
V
V:
Q
=
B
N
Q
(
Conv
Q
(
F
,
1
,
1
,
c
)
+
P
)
K
=
Gate
[
B
N
K
(
Conv
K
(
F
,
1
,
1
,
c
)
+
P
)
,
Y
d
]
V
=
Conv
V
(
F
,
1
,
1
,
c
)
\begin{array}{l} Q=B N_{Q}\left(\operatorname{Conv}_{Q}(F, 1,1, c)+P\right) \\ K=\operatorname{Gate}\left[B N_{K}\left(\operatorname{Conv}_{K}(F, 1,1, c)+P\right), Y_{d}\right] \\ V=\operatorname{Conv}_{V}(F, 1,1, c) \end{array}
Q=BNQ(ConvQ(F,1,1,c)+P)K=Gate[BNK(ConvK(F,1,1,c)+P),Yd]V=ConvV(F,1,1,c)其中,
C
o
n
v
(
F
,
a
,
b
,
c
)
Conv(F,a,b,c)
Conv(F,a,b,c)代表着卷积大小为
a
a
a、stride为
b
b
b、卷积核数量为
c
c
c的卷及操作。
G
a
t
e
(
X
,
Y
)
Gate(X,Y)
Gate(X,Y)是一种简单的空间注意力,如下图所示。
P
P
P是和
F
F
F同样尺寸的位置编码,计算方式如下:
P
i
j
k
=
{
cos
(
4
π
k
c
+
π
i
h
)
,
0
⩽
k
<
c
2
cos
(
4
π
k
c
+
π
j
w
)
,
c
2
⩽
k
<
c
0
⩽
i
<
h
′
,
0
⩽
j
<
w
′
P_{i j k}=\left\{\begin{array}{ll} \cos \left(\frac{4 \pi k}{c}+\frac{\pi i}{h}\right), & 0 \leqslant k<\frac{c}{2} \\ \cos \left(\frac{4 \pi k}{c}+\frac{\pi j}{w}\right), & \frac{c}{2} \leqslant k<c \end{array}\right.\\0 \leqslant i<h^{\prime}, 0 \leqslant j<w^{\prime}
Pijk={cos(c4πk+hπi),cos(c4πk+wπj),0⩽k<2c2c⩽k<c0⩽i<h′,0⩽j<w′这样计算以来,两个空间位置靠近的embedding向量便会与较大的余弦相似度,较远的embedding的余弦相似度便较小,减小了跟踪时相似物体对跟踪效果的影响。其实也是将位置信息加入到了相关向量中,即使很相似的目标,若是位置差距很远,也不会被关联。
通过前一部分给出的计算方式,通过
Q
Q
Q和
K
K
K计算出相关向量
C
C
C以后,最终的bbox可以通过以下公式
B
d
,
i
j
=
W
⋅
B
N
(
[
C
i
j
V
i
j
]
)
B_{d, i j}=W \cdot B N\left(\left[\begin{array}{ll}C_{i j} & V_{i j}\end{array}\right]\right)
Bd,ij=W⋅BN([CijVij])得到(
B
d
,
i
j
=
[
x
i
j
,
y
i
j
,
h
i
j
,
w
i
j
]
B_{d, i j}=\left[x_{i j}, y_{i j}, h_{i j}, w_{i j}\right]
Bd,ij=[xij,yij,hij,wij])。
Tracking module:
跟踪模块的结构如上图所示,其输入是当前帧的特征图
K
K
K、当前帧的检测置信度图以及历史轨迹的特征向量。此模块的输出是跟踪的置信度以及为每个历史轨迹输出一个bbox。不难看出,跟踪模块的结构与检测模块几乎一致,参数大部分也是共享检测分支的,除了图中绿色部分的用于计算跟踪置信度的全连接层的参数。这里输出的bbox与检测分支的输出形式一致,均是绝对坐标和大小。跟踪置信度代表着历史轨迹中的目标是否还存在在当前帧。我的理解是,这种跟踪形式,对每个历史轨迹在当前帧寻找可以分配的目标,可以自然而然地将ID传送下去,文中写的是以一种“object-wise”的方式。
Training
作者说GCNet是可以端到端进行训练的,也可以两阶段训练,然后对两阶段的训练策略进行了介绍。先训练检测分支,最后对整个网络进行微调。
检测分支的训练策略与CornerNet一致。首先通过高斯函数来定义gt的热度图
Y
g
t
∈
R
h
′
×
w
′
×
n
Y_{g t} \in R^{h^{\prime} \times w^{\prime} \times n}
Ygt∈Rh′×w′×n:
Y
g
t
,
i
j
k
=
max
1
⩽
n
⩽
N
k
(
G
i
j
n
)
G
i
j
n
=
exp
[
−
(
i
−
x
n
)
2
2
σ
x
,
n
2
−
(
i
−
y
n
)
2
2
σ
y
,
n
2
]
σ
x
=
h
(
1
−
IoU_threshold)
3
(
1
+
IoU_threshold)
σ
y
=
w
(
1
−
IoU_threshold)
3
(
1
+
IoU_threshold)
\begin{array}{l} Y_{g t, i j k}=\max _{1 \leqslant n \leqslant N_{k}}\left(G_{i j n}\right) \\ G_{i j n}=\exp \left[-\frac{\left(i-x_{n}\right)^{2}}{2 \sigma_{x, n}^{2}}-\frac{\left(i-y_{n}\right)^{2}}{2 \sigma_{y, n}^{2}}\right] \end{array} \\ \sigma_x= \frac {h(1-\text{IoU\_threshold)}}{3(1+\text{IoU\_threshold)}} \\ \sigma_y= \frac {w(1-\text{IoU\_threshold)}}{3(1+\text{IoU\_threshold)}}
Ygt,ijk=max1⩽n⩽Nk(Gijn)Gijn=exp[−2σx,n2(i−xn)2−2σy,n2(i−yn)2]σx=3(1+IoU_threshold)h(1−IoU_threshold)σy=3(1+IoU_threshold)w(1−IoU_threshold)其中,
N
k
N_k
Nk是第
k
k
k类目标的数量,
[
x
n
,
y
n
]
\left[x_{n}, y_{n}\right]
[xn,yn]为目标
n
n
n的中心点,
σ
2
\sigma^2
σ2与目标的尺寸相关。分类分支的损失为像素级别的带有惩罚因子的focal loss:
L
d
,
c
l
a
=
−
1
h
′
w
′
n
⋅
∑
i
j
k
{
(
1
−
Y
d
,
i
j
k
)
2
log
(
Y
d
,
i
j
k
)
,
Y
g
t
,
i
j
k
=
1
(
1
−
Y
g
t
,
i
j
k
)
2
Y
d
,
i
j
k
2
log
(
1
−
Y
d
,
i
j
k
)
,
Y
g
t
,
i
j
k
≠
1
L_{d, c l a}=-\frac{1}{h^{\prime} w^{\prime} n} · \sum_{i j k}\left\{\begin{array}{ll} \left(1-Y_{d, i j k}\right)^{2} \log \left(Y_{d, i j k}\right), & Y_{g t, i j k}=1 \\ \left(1-Y_{g t, i j k}\right)^{2} Y_{d, i j k}^{2} \log \left(1-Y_{d, i j k}\right), & Y_{g t, i j k} \neq 1 \end{array}\right.
Ld,cla=−h′w′n1⋅ijk∑{(1−Yd,ijk)2log(Yd,ijk),(1−Ygt,ijk)2Yd,ijk2log(1−Yd,ijk),Ygt,ijk=1Ygt,ijk=1回归分支的损失采用的是CIoU loss:
L
d
,
r
e
g
=
∑
[
i
j
]
=
1
β
i
j
⋅
L
C
I
o
U
(
B
g
t
,
i
j
,
B
d
,
i
j
)
L_{d, r e g}=\sum_{[i j]=1} \beta_{i j} \cdot L_{C I o U}\left(B_{g t, i j}, B_{d, i j}\right)
Ld,reg=[ij]=1∑βij⋅LCIoU(Bgt,ij,Bd,ij)其中的
[
i
j
]
=
1
[ij]=1
[ij]=1代表着对应的
B
d
,
i
j
B_{d,ij}
Bd,ij分配到了一个gt框。作者将bbox分配到gt的准则如下:
[
i
j
]
=
{
1
,
∃
n
G
i
j
n
>
0.3
&
∑
n
G
i
j
n
−
max
n
G
i
j
n
<
0.3
0
,
otherwise
[i j]=\left\{\begin{array}{ll} 1, \ \ \ \ \ \ \exists_{n} G_{i j n}>0.3 \ \& \sum_{n} G_{i j n}-\max _{n} G_{i j n}<0.3 \\ 0, \ \ \ \ \ \ \text { otherwise } \end{array}\right.
[ij]={1, ∃nGijn>0.3 &∑nGijn−maxnGijn<0.30, otherwise 对于一些,
max
n
G
i
j
n
=
1
\max _{n} G_{i j n}=1
maxnGijn=1的bbox,将其在损失中的权重设为2,其余为1。这是为了提高预测bbox中心点的准确度。
训练完检测模块后,对整个网络进行微调。此阶段,输入为
I
t
I_t
It和
I
t
−
i
I_{t-i}
It−i两帧图像(
1
<
i
<
5
1<i<5
1<i<5)。此时的损失分为两部分:
I
t
−
i
I_{t-i}
It−i的检测损失以及两帧之间的跟踪损失。跟踪损失也是由相同的两部分构成:分类分支采用focal loss以及回归分支采用CIoU loss。跟踪时的gt由目标的ID决定,当
I
t
−
i
I_{t-i}
It−i中的
[
i
j
]
=
1
[ij]=1
[ij]=1等于1,且相对应的目标也存在于
I
t
I_t
It中,则
B
t
,
i
j
B_{t,ij}
Bt,ij和
Y
t
,
i
j
Y_{t,ij}
Yt,ij为正例。最终,总的整体损失为:
Loss
=
L
d
,
c
l
a
+
L
t
,
c
l
a
+
0.1
×
(
L
d
,
r
e
g
+
L
t
,
r
e
g
)
\operatorname{Loss}=L_{d, c l a}+L_{t, c l a}+0.1 \times\left(L_{d, r e g}+L_{t, r e g}\right)
Loss=Ld,cla+Lt,cla+0.1×(Ld,reg+Lt,reg)
Inference pipeline
进行推理时,输入为连续的帧
I
1
∼
I
t
I_{1} \sim I_{t}
I1∼It。首先进行初始化,轨迹集合
T
=
∅
\mathcal{T}=\varnothing
T=∅,置信度集合
Y
=
∅
\mathcal{Y}=\varnothing
Y=∅,特征向量集合
O
=
∅
\mathcal{O}=\varnothing
O=∅以及候选集合
C
=
∅
\mathcal{C}=\varnothing
C=∅。在每一时刻,对当前帧进行检测,并对已存在的轨迹和候选检测框进行跟踪。通过
Y
i
=
min
(
2
×
Y
i
×
Y
t
,
i
,
1.5
)
Y_{i}=\min \left(2 \times Y_{i} \times Y_{t, i}, 1.5\right)
Yi=min(2×Yi×Yt,i,1.5)来对置信度集合
Y
\mathcal{Y}
Y进行更新。轨迹和候选检测卡中置信度低于
p
2
p_2
p2的会被删除,然后更新轨迹集合
T
\mathcal{T}
T和候选集合
C
\mathcal{C}
C,相对应的特征向量也会进行更新。检测结果中IoU高于
p
3
p_3
p3并且置信度低于
p
2
p_2
p2的结果会被忽略。然后剩下的检测框中,检测置信度高于
p
1
p_1
p1的会开始生成新的轨迹,再次剩下的检测框会加入到候选集合
C
\mathcal{C}
C中。超参数
p
1
p_1
p1、
p
2
p_2
p2和
p
3
p_3
p3在实验中分别设为0.5、0.3和0.5。可以看到,所有的检测和跟踪均在稀疏模式下完成,所以算法的计算复杂的较低。具体算法如下图所示:
实验
上表示GCNet在UA-DETRAC上的消融实验,主要验证了三点:(1)Gate模块将分类分支的信息融入到回归分支之中,不仅是一个空间注意力机制,也有利于回归分支的训练;(2)特征图
V
V
V进行拼接可以提供更多相关向量中没有的的局部信息,有助于推理处目标的尺寸;(3)作者设计的位置编码效果比普通位置编码更好,不同的通道对应的编码的值也不同。
上面两张表分别是GCNet与其他算法在UA-DETRAC的检测和跟踪的实验结果,可以看出在检测方面GCNet的效果还是很高的,跟踪的实验对比的其他算法并没有很多目前sota的算法,用的数据集也不是较为流行的MOT数据集,所以效果其实不太能看的出来。另外,这篇论文的代码也未开源。