GCNet
论文标题:Global Correlation Network: End-to-End Joint Multi-Object Detection and Tracking
论文地址: http://arxiv.org/abs/2103.12511
论文源码:暂未开源
JDE方法的跟踪部分依然依赖于数据关联并且需要复杂的后处理来进行轨迹的生命周期管理,因此它们并没有将检测和跟踪组合得很好。因此,GCNet(Global Correlation Network,全局相关网络)被提了出来,它以端到端得方式实现了联合多目标检测和跟踪。与大多数目标检测方法不同的是,GCNet引入了全局相关层来回归目标的绝对大小和边框坐标,而不是偏移量预测。GCNet的pipeline概念上是非常简洁的,它**不需要非极大值抑制、数据关联以及其他复杂的跟踪策略。**在UA-DETRAC这个车辆跟踪数据集上进行评估,GCNet达到了SOTA的检测和跟踪表现。
Introduction
在这篇论文中,作者提出了一种新的端到端联合检测和跟踪的网络,该网络通过同样的方式完成边界框回归和跟踪,这种方式称为全局相关操作(global correlation)。边界框的回归通常利用局部特征去估计anchor与ground truth之间的偏移量,或者估计框大小以及关键点与特征位置之间的偏移量。
GCNet中,网络直接回归边界框的绝对坐标和尺寸而不是相对坐标或偏移量,因此作者提出了global correlation layer来编码全局信息到每个位置的特征里。
Movaitation
在 t t t时刻,现有的目标轨迹集为 { T 1 , T 2 , . . . T n } \lbrace T_{1},T_{2},...T_{n} \rbrace {T1,T2,...Tn},其中每个 T i = [ B i , 1 , B i , 2 , . . . B i , n ] T_{i}=[B_{i,1},B_{i,2},...B_{i,n}] Ti=[Bi,1,Bi,2,...Bi,n]表示第 i i i个目标在各个时刻的边框信息。这里的 B i , j B_{i,j} Bi,j表示第 i i i个目标在时间 j j j时刻的边界框。考虑当前帧图像 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
整个GCNet分为检测模块(Detection module)和跟踪模块(Tracking module) 两部分,我们首先来看检测模块,它的结构如下图所示,包含三个部分分别是backbone、分类分支、回归分支。backbone用于高级语义特征的提取,由于分类分支采用的是和CenterNet一样的思路,特征图的每个位置对应一个目标的中心点,因此特征图的分辨率其实对网络的性能影响非常大。为了得到高分辨率大感受野的特征图,作者采用和FPN一样的跳跃连接结构,但是只输出最精细级别的特征图 F F F,它的尺寸为 h ′ × w ′ × 3 h' \times w' \times 3 h′×w′×3,等价于 H 8 × W 8 × 3 \frac {H}{8}\times \frac {W}{8} \times 3 8H×8W×3.
通过backbone得到了原始图像的特征图 F F F,利用 F F F最下面的分类分支通过卷积层运算得到分类置信度图 Y d ∈ R h ′ × w ′ × n Y_{d}\in R^{h' \times w' \times n} Yd∈Rh′×w′×n,它的数值均在0和1之间,因此它其实是一个热力图。 Y d Y_{d} Yd的第 i i i个通道的峰值对应于第 i i i类的目标的中心。
然后,上面的回归分支输入backbone的特征图 F F F和分类置信度图 Y d Y_{d} Yd,然后计算三个特征图,即 Q , K , V Q,K,V Q,K,V。它们的计算式如下式,这里 C o n v ( F , a , b , c ) Conv(F,a,b,c) Conv(F,a,b,c)表示核尺寸为 a a a、步长为 b b b、核数目为 c c c的卷积层, B N BN BN表示batch normalization层。
这里的
G
(
X
,
Y
)
G(X,Y)
G(X,Y)的含义,它其实是下图所示的一种空间注意力结构。此外,在
Q
Q
Q和
K
K
K计算之前,特征图
F
F
F加上了一个shape一样的位置编码
P
P
P,它的计算方式如下。
通过这个位置编码,位置上距离较近的两个嵌入向量余弦相似度较大,距离较远的两个嵌入向量余弦相似度较小,因而可以减少跟踪时类似对象的负面影响。
Global Correlation Layer
作者提出的global correlation layer是如何对全局信息进行编码的。对于特征图 F ∈ R h × w × 4 F \in R^{h \times w \times 4} F∈Rh×w×4,通过两个线性变换计算特征图 Q Q Q和特征图 k k k,计算式如下。
上式中的下标表示行列的位置,如
X
i
,
j
∈
R
c
X_{i,j}\in R^{c}
Xi,j∈Rc表示
X
X
X在第
i
i
i行第
j
j
j列位置的特征向量。
接着,对每个特征向量 Q i , j Q_{i,j} Qi,j,计算其与所有的 K i , j K_{i,j} Ki,j之间的余弦距离,然后再通过矩阵 W W W进行线性变换即可得到相关向量 C i , j ∈ R c ′ C_{i,j}\in R^{c'} Ci,j∈Rc′,它的形式如下。
因此,每个
C
i
,
j
C_{i,j}
Ci,j都编码了局部特征向量
Q
i
,
j
Q_{i,j}
Qi,j和全局特征图
K
K
K之间的相关性,所以它可以用于图像中相应位置的目标的绝对边界框。所有相关向量可以构建一个相关特征图
C
∈
R
h
×
w
×
c
′
C\in R^{h \times w \times c'}
C∈Rh×w×c′,因此可以通过简单的1x1卷积来得到边框预测
B
∈
R
h
×
w
×
4
B\in R^{h\times w\times 4}
B∈Rh×w×4。这个Global Correlation Layer操作在GCNet的检测和跟踪结构中被使用,不过,在检测时,
Q
Q
Q和
K
K
K来自同一帧图像,而在跟踪时,
Q
Q
Q来自前一帧图像
K
K
K来自当前帧图像。
这个Global Correlation Layer操作,其实是作者定义的一套计算全局相关性特征图的计算方式,下面的模块中会用到。
有了 Q Q Q和 K K K就可以计算处相关性特征图 C C C了,然后,就可以利用下面的式子计算最终的边界框 B d , i , j = [ x i , j , y i , j , j i , j , w i , j ] B_{d,i,j}=[x_{i,j},y_{i,j},j_{i,j},w_{i,j}] Bd,i,j=[xi,j,yi,j,ji,j,wi,j]。需要注意的是,GCNet直接回归目标边界框的绝对坐标和尺寸.
跟踪模块,其实所谓跟踪就是为当前帧的目标赋予ID的过程,它可以通过和历史目标关联也可以作为新的轨迹的开端。它的输入由三部分组成,分别是当前帧的特征图
K
K
K、当前帧的检测置信度图(即热力图)、历史轨迹的特征向量。
跟踪模块为每个历史轨迹输出一个跟踪置信度和边界框。它的结构其实和检测模块是很类似的,它的大部分参数也是和检测模块共享的,除了计算跟踪置信度的全连接层(下图的绿色块)。跟踪框和检测框在表达上是一致的,都是绝对坐标的格式。跟踪置信度则表明这个目标仍旧在当前帧上的概率。此外,由于跟踪模块以逐目标的方式进行(也就是每个历史轨迹都会逐一处理到),因此它能够很自然地进行ID传递而不需要关联步骤。
Training
GCNet是可以端到端训练的,不过为了更好的效果,作者采用先训练检测模块再整个网络微调的二阶段训练思路。
分类分支的训练策略和CornerNet一致,GT热力图的产生方式如下式,通过2D高斯核函数产生GT heatmap Y g t ∈ R h ′ × w ′ × 3 Y_{gt}\in R^{h'\times w'\times 3} Ygt∈Rh′×w′×3 。
上面式子中的 N K N_{K} NK表示类别 k k k目标数目, [ X n , Y n ] [X_{n},Y_{n}] [Xn,Yn]则表示目标 n n n的中心, σ 2 \sigma ^{2} σ2依据目标的尺寸而定, σ x \sigma_{x} σx和 σ y \sigma_{y} σy的表达式如下,其中的IoU阈值设置为0.3。
分类损失是像素级的focal loss,式子如下。
回归损失采用CIoU loss,算式如下。
这里的
[
i
,
j
]
=
1
[i,j]=1
[i,j]=1表示相应的
B
d
,
i
,
j
B_{d,i,j}
Bd,i,j被分配给一个GT框,只有当
G
i
j
n
>
0.3
G_{ijn}>0.3
Gijn>0.3 and
∑
G
i
j
n
−
m
a
x
G
i
j
n
<
0.3
\sum G_{ijn}-maxG_{ijn}<0.3
∑Gijn−maxGijn<0.3满足时一个才会被分
B
d
,
i
,
j
B_{d,i,j}
Bd,i,j配给一个GT,表示如下。
并且对于 max n G i j n = 1 \max_{n}G_{ijn} = 1 maxnGijn=1的 B i j B_{ij} Bij,设置回归损失的权重为2,其余为1,这是为了加强中心点的边框精准度。
首先预训练检测模块,然后在整个网络上微调,微调这一步训练时,一次输入两个图像 I t − i I_{t-i} It−i和 I t I_{t} It,这里的 i i i在1和5之间。损失包含两部分,分别是 I t − i I_{t-i} It−i的检测损失和两幅图像的跟踪损失,跟踪损失又由两项组成,回归CIoU损失和分类focal loss。跟踪的GT由目标的ID确定,当 I t − i I_{t-i} It−i中的时,相对应 [ i , j ] = 1 [i,j]=1 [i,j]=1的目标也存在 I t I_{t} It, B t , i j B_t,ij Bt,ij 和 Y t , i j Y_{t,ij} Yt,ij为正例。最终的损失如下式所示。
Inference
上图所示为整个推理算法,输入为连续的图像帧序列 I 1 . . . I t I_{1}...I_{t} I1...It,记录每个目标的轨迹 T i T_{i} Ti、置信度 Y i Y_{i} Yi、特征向量及候选向量 [ V i , Q i ] [V_{i},Q_{i}] [Vi,Qi]为四个集合, T , O , Y , C \mathcal {T},\mathcal {O},\mathcal {Y},\mathcal {C} T,O,Y,C,它们均初始化为空。在每个时刻,对当前帧图像进行检测并在轨迹集合候选集之间进行跟踪。通过跟踪置信度来更新集合 Y , C \mathcal {Y},\mathcal {C} Y,C的所有置信度,其中 Y i = min ( 2 × Y i × Y t , i , 1.5 ) Y_{i}=\min(2 \times Y_{i}\times Y_{t,i},1.5) Yi=min(2×Yi×Yt,i,1.5)。轨迹和候选的置信度低于 P 2 P_{2} P2将会被删除,然后轨迹集、候选集和特征集也会相应更新。检测结果中,IoU高于 p 3 p_{3} p3或者置信度低于 p 2 p_{2} p2的将被忽略。对于剩下的检测框,如果置信度高于阈值 p 1 p_{1} p1会用于生成新的轨迹,此外的框加入候选集合 C \mathcal {C} C中。这里不难发现,整个检测和跟踪都能以稀疏模式完成,因此整体计算复杂度并不高。
Experiment
在基准数据集上和其他方法比较检测的结果如下,改方法优势还是比较明显的。
GCNet在多目标跟踪任务上的效果如下图,达到SOTA水准,且速度很快,达到34FPS。