参考文献:Joint Object Detection and Multi-Object Tracking with Graph Neural Networks
Joint Object Detection and Multi-Object Tracking with Graph Neural Networks
一、 摘要
由于过去的多目标追踪系统都是将目标检测和数据关联作为两部分单独处理,进行独立的训练,无法使用一次反向传播来优化整个网络,这就会导致次优性能,即某一个单独的任务目标代替了MOT整个任务的目标,占据了主导的地位。
为了解决这个问题,最近的工作开始考虑在一个联合的MOT框架下同时优化检测和数据关联模型,同时改进优化这两个模块。
本论文提出了一种新的使用图神经网络(GNNs)来进行联合MOT的方法实例。其核心思想是GNNs能够在空间和时间两方面对不同大小的目标之间的关系进行建模,这对于学习识别特征进行检测和数据关联至关重要。
创新:
- 不忽视目标间关联的情况下进行联合MOT操作。
- 使用GNNs获得目标间的时空关系,来对目标的关联进行建模,改善检测和数据关联。
二、 介绍
过去的MOT工作,使用检测后追踪(TBD)的方式来进行在线MOT问题的解决,即检测器输出检测结果后跟着一个数据关联模块来匹配检测出来的结果和过去的轨迹,来形成当前帧的新的轨迹。这个时候的MOT一般是将检测器和数据关联模块单独训练。但是由于这种独立训练,我们无法进行一个整个的反向传播来优化整个网络,这就会导致网络的重点可能只会在其中一个模块中,从而导致次优性能。
为了提升性能,需要要解决以下问题:
- 通过联合MOT框架,进行检测和数据关联的同时优化,那么如何联合?
- 联合MOT框架后,如何进行有鉴别性的特征学习?
首先解决联合MOT框架,发展到如今,以及有很多联合MOT的方法:
- 一个是将目标检测器与跟踪器统一,跟踪器直接将前一帧检测到的每个目标的位置回归到当前帧(目标追踪变得独立,数据关联问题也就解决了)。例如CDT,Center。
- 通过增加一个提取目标特征的ReID或者ID验证分支来进行帧间匹配来拓展目标检测。例如MOTS,FairMOT。
- 或者通过锚管,不同于使用锚框的基于锚的检测器,锚管代表一个帧列表中的Bbox序列(一帧一个Bbox),给定的视频剪辑作为输入,正真的管可以找到并且作为轨迹输出,解决了联合MOT问题在一个单一的镜头。例如TubeTK,DMM-NET。
观察上面的方法,发现提取的单个对象/轨迹/管特征是相互独立的,并且忽略了对象-对象关系。但是这种关系可能是有作用的,例如两个人在上一帧走在一起,那么这一帧很有可能会在附近的位置继续出现在一起;数据关联时候,如果两个帧间目标的相似度以很高的置信度增加,即这两个目标很相似了,那么这两个中的每个目标和其他目标的相似度得分就应该被抑制。
所以想要提升联合MOT的效果必须好好利用目标间的关系,之前存在工作将目标间关系用于数据关联,但是在检测方面却没有使用。
为了获得更有鉴别性的特征,通过GNNs来获得目标间的关联,每个对象提取的特征不再是孤立的,而是可以通过其相关对象在空间和时间域的特征进行调整,获得的特征同时用于检测和关联任务,那么第二个问题就解决了。
三、 相关工作
1. 目标检测
大量数据集出现后,基于图像的检测技术取得了巨大的进展,过去几年,基于锚的目标检测占主导,最近兴起了基于点的目标检测也获得了良好的表现。但是基于图片的检测使用单张图片进行输入,在帧之间就会很不稳定,于是基于视频检测就开始使用多帧进行输入,相较于原来的单张图片输入,获得了更多的时序一致性,但是对象之间的关联并没有存在过多的建模。在多帧输入基础上,我们加入了GNNs,来弥补目标间的关联。
2. MOT方面
本网络为Online方法,并且不同于传统的使用现成检测器的Online方法只关注于数据关联,我们选择联合优化检测和数据关联,从而提高性能。
3. 联合检测和目标关联
我们的方法与之前的三种联合MOT方法相似,但在建模时空对象关系上有所超越。我们的方法可以同时提高目标检测和数据关联任务的性能,而不仅仅考虑单一的成分的提高或者是忽略了目标间的关联。
4. 图形神经网络关系建模
其核心思想是构造一个节点和边相互关联的图,并根据关系更新节点/边特征(例如节点特征聚合)。最近几年兴起了许多不同的图网络(图卷积,图注意力),使用独特的特征聚合来有效解决问题。与那些只关注使用GNN来改进数据关联的方法不同,我们的工作使用GNN来进行联合检测和关联,其中检测分支也从GNN关系建模中受益。
四、 方法
输入为 t − 1 t-1 t−1和 t t t帧的图片 F t − 1 F_{t-1} Ft−1和 F t F_t Ft以及 t − 1 t-1 t−1帧上的轨迹 T t − 1 = { T t − 1 1 , T t − 1 2 , … , T t − 1 p t − 1 } T_{t-1}=\{T_{t-1}^1,T_{t-1}^2,…,T_{t-1}^{p_{t-1}}\} Tt−1={Tt−11,Tt−12,…,Tt−1pt−1},目的是找到 F t F_t Ft中的目标 D t = { D t 1 , D t 2 , … , D t K t } D_t=\{D_t^1,D_t^2,…,D_t^{K_t }\} Dt={Dt1,Dt2,…,DtKt},并将他们和轨迹 T t − 1 T_{t-1} Tt−1相匹配。 K t K_t Kt和 p t − 1 p_{t-1} pt−1可以不相同的,前者是检测的目标数,后者是前帧的轨迹数。通过关联来确认是否在 t t t帧拓展或者终结一个轨迹。在每帧迭代的处理这个过程,从而获得整个视频的轨迹。
网络通过整合一个检测器和一个ReID模型来同时进行检测和关联目标。通过GNN来提取目标间的关联,顺便学习更好的特征,以便提升检测器和数据关联。
模型如上图,图中包括四个模块:特征提取,点特征聚集,检测和关联,取名为GSTD(GNNs for Simultaneous Detection and Tracking)。
首先未传入图网络前,将当前帧传入backbone获得特征图先进行一次(b)操作,进行回归修正当前的检测结果;前一帧传入backbone后通过对box的RoIAlign获得上一帧轨迹特征。然后将当前帧特征图按像素展平,当做可能的检测对象点,和上面的前一帧轨迹特征传入图网络,进行节点特征聚合(对于每个上一帧的特轨迹特征,只和在当前帧对于附近的位置的结点进行建立边进行聚合)。然后得到通过第一层图网络后的输出,继续执行以上操作(详情见英文注释)。
1. 特征提取和目标检测
使用DLA-34对
F
t
−
1
F_{t-1}
Ft−1和
F
t
F_t
Ft两个输入帧进行特征提取,获得特征图
M
^
t
−
1
0
,
M
^
t
0
∈
R
W
r
×
H
r
×
C
\hat M_{t-1}^0,\hat M_t^0 \in R^{\frac{W}{r}×\frac{H}{r}×C}
M^t−10,M^t0∈RrW×rH×C(图2(a)左),
r
r
r是一个下采样率,
W
W
W,
H
H
H是图片宽高,
C
C
C是通道数。这两个提取的特征会用于接下来的关系建模,目标检测和数据关联。在图网络中,
t
t
t帧的特征图会在每层进行更新,
l
l
l层更新会获得特征
M
^
t
l
\hat M_t^l
M^tl。
目标检测方面使用CenterNet,只对t帧的图像进行检测,将
M
^
t
l
\hat M_t^l
M^tl喂给图2中的前三个检测头(location, box size 和refinement heads),生成三个映射:位置映射
M
^
L
l
∈
R
W
r
×
H
r
\hat M_L^l \in R^{\frac{W}{r}×\frac{H}{r}}
M^Ll∈RrW×rH用于估计目标中心坐标大概位置,大小映射
M
^
R
l
∈
R
W
r
×
H
r
×
2
\hat M_R^l \in R^{\frac{W}{r}×\frac{H}{r}×2}
M^Rl∈RrW×rH×2估计宽和高,和微调映射
M
^
S
l
∈
R
W
r
×
H
r
×
2
\hat M_S^l \in R^{\frac{W}{r}×\frac{H}{r}×2}
M^Sl∈RrW×rH×2用于微调粗略的坐标达到精确,这三个检测头可以使用图网络任意的层
l
l
l上进行操作。
训练:
使用高斯热图
M
L
l
∈
R
(
W
r
×
H
r
)
M_L^l\in R^(\frac{W}{r}×\frac{H}{r})
MLl∈R(rW×rH)显示出每个图的真实目标,并且使用损失函数进行反向传播整个网络,其中高斯热图的峰值即真实目标的中心位置,位置
(
i
,
j
)
(i, j)
(i,j)的值为:
M
L
l
(
i
,
j
)
=
∑
k
=
1
N
exp
(
−
(
i
−
⌊
x
k
r
⌋
)
2
+
(
j
−
⌊
y
k
r
⌋
)
2
2
σ
k
2
)
(1)
M_{L}^{l}(i, j)=\sum_{k=1}^{N} \exp \left(-\frac{\left(i-\left\lfloor\frac{x_{k}}{r}\right\rfloor\right)^{2}+\left(j-\left\lfloor\frac{y_{k}}{r}\right\rfloor\right)^{2}}{2 \sigma_{k}^{2}}\right) \tag{1}
MLl(i,j)=k=1∑Nexp(−2σk2(i−⌊rxk⌋)2+(j−⌊ryk⌋)2)(1)
N
N
N为真实目标总数,
x
k
x_k
xk和
y
k
y_k
yk是真实目标k的中心坐标。
⌊
⋅
⌋
⌊·⌋
⌊⋅⌋向下取值。
σ
σ
σ是标准差。真实框大小和微调的映射为
M
S
l
M_S^l
MSl,
M
R
l
M_R^l
MRl,若在点
(
i
,
j
)
(i,j)
(i,j)存在目标,则:
M
S
l
(
i
,
j
,
:
)
=
(
w
,
h
)
(2)
M_{S}^{l}(i, j,:)={(w,h)} \tag{2}
MSl(i,j,:)=(w,h)(2)
M
R
l
(
i
,
j
,
:
)
=
(
x
r
−
⌊
x
r
⌋
,
y
r
−
⌊
y
r
⌋
)
(3)
M_{R}^{l}(i, j,:)=\left(\frac{x}{r}-\left\lfloor\frac{x}{r}\right\rfloor, \frac{y}{r}-\left\lfloor\frac{y}{r}\right\rfloor\right)\tag{3}
MRl(i,j,:)=(rx−⌊rx⌋,ry−⌊ry⌋)(3)
位置映射使用focal损失
L
l
o
c
l
L_{loc}^l
Llocl,大小和微调映射使用L1损失
L
s
i
z
e
l
L_{size}^l
Lsizel,
L
r
e
f
l
L_{ref}^l
Lrefl,总体损失为:
L
det
l
=
λ
1
L
loc
l
+
λ
2
L
size
l
+
λ
3
L
ref
l
(4)
L_{\text {det}}^{l}=\lambda_{1} L_{\text {loc}}^{l}+\lambda_{2} L_{\text {size}}^{l}+\lambda_{3} L_{\text {ref}}^{l}\tag{4}
Ldetl=λ1Llocl+λ2Lsizel+λ3Lrefl(4)
λ \lambda λ的系数都为0.1。
2. 数据关联
图2(b),为了将检测和轨迹匹配,增加了一个额外的嵌入头,为每个潜在的检测学习其身份嵌入。对于
M
^
t
l
\hat M_t^l
M^tl中的每个像素,身份嵌入层用于在测试中计算每一对轨迹和潜在对象的相似度得分,过去帧检测到的轨迹的身份嵌入会被缓存。
具体:
M
^
t
l
\hat M_t^l
M^tl作为输入,嵌入头输出
M
^
E
l
∈
R
W
r
×
H
r
×
D
\hat M_E^l\in R^{\frac{W}{r}×\frac{H}{r}×D}
M^El∈RrW×rH×D,
D
D
D代表嵌入维度,
M
^
E
l
\hat M_E^l
M^El中的每一个像素对于中心点在这个像素的潜在检测都存在一个嵌入。
训练:
使用
M
^
E
l
\hat M_E^l
M^El在每个像素的嵌入作为输入,来优化嵌入头,输出预测的身份向量
p
^
\hat p
p^。其中第
i
i
i项表示该像素的对象i的概率。需要给定真实身份向量
p
p
p,由one-hot编码生成的长度为
M
M
M的向量(
M
M
M为目标数据库中的身份的数量(online方法,这里
M
M
M没搞懂)),
p
p
p中只有真实身份位置置为1,其余为0。只监督在
M
^
E
l
\hat M_E^l
M^El中那些存在真实目标的像素点,使用交叉熵:
L
e
m
b
l
=
1
N
∑
k
=
1
N
∑
m
=
1
M
p
k
(
m
)
log
(
p
^
k
(
m
)
)
(5)
L_{e m b}^{l}=\frac{1}{N} \sum_{k=1}^{N} \sum_{m=1}^{M} \mathbf{p}^{k}(m) \log \left(\hat{\mathbf{p}}^{k}(m)\right) \tag{5}
Lembl=N1k=1∑Nm=1∑Mpk(m)log(p^k(m))(5)
N为预测到的目标个数,M为目标总数。
3. 图网络关系建模
图构建
构建图
G
(
V
,
E
)
G(V,E)
G(V,E),
V
V
V个节点,
E
E
E条边。节点代表检测和轨迹的特征(上一帧特征)。轨迹的特征由轨迹框直接输入,具体使用RoIAlign操作从特征图
M
^
t
−
1
0
\hat M_{t-1}^0
M^t−10上截取轨迹特征。对于检测的特征的提取,我们选择使用
M
^
t
l
\hat M_t^l
M^tl中的每个像素代表一个潜在的检测,生成
W
r
×
H
r
\frac{W}{r}×\frac{H}{r}
rW×rH个监测点。
还需要构建边集。直接构建每对点之间的全连接图,计算量会很大。相反,利用MOT的域知识:a. 数据关联发生在帧间;b. 同一目标位移在帧间不会很大。
所以基于a只需要构建轨迹点和检测点的连接;基于b,对于每个轨迹,只将他们和在附近位置的监测点连接。
节点特征聚合
为了实现这一目标,我们通过聚合节点的邻域节点的特征来迭代地更新节点特征。这样信息可以通过图来传播,节点可以进行交互。对比各种图网络后,使用图卷积来进行特征聚合,公式如下:
h
l
i
=
ρ
1
(
h
l
−
1
i
)
+
∑
j
∈
N
(
i
)
ρ
2
(
h
l
−
1
j
)
(6)
h_{l}^{i}=\rho_{1}\left(h_{l-1}^{i}\right)+\sum_{j \in \mathcal{N}(i)} \rho_{2}\left(h_{l-1}^{j}\right) \tag{6}
hli=ρ1(hl−1i)+j∈N(i)∑ρ2(hl−1j)(6)
h
l
i
h_l^i
hli代表卷积网络第
l
l
l层的第
i
i
i个节点,
N
(
i
)
N(i)
N(i)表示节点
i
i
i的邻节点。
ρ
1
ρ_1
ρ1和
ρ
2
ρ_2
ρ2是线性层。对于那些没有和轨迹点相连的节点,即(6)中的后半项为0,这些点用于发现
t
t
t帧中的新目标。如果只是使用一个GNN层对于帧间的数据进行的处理,也就是说只进行了时序信息的处理,没有进行空间上的处理。所以,本网络使用了多层的GNN网络,信息可以来回传播,从而实现时空对象关系建模,通过不同层的GNN网络,从而让同帧不同节点的特征进行互相传播,达到空间关联建模。(本实验经过测试使用3层最优)。
4. 使用GNN联合检测和关联
1,2中的两个模型同时训练就可以达到联合检测和关联,但如果只利用
M
^
t
−
1
0
,
M
^
t
0
\hat M_{t-1}^0,\hat M_t^0
M^t−10,M^t0两个特征,那就没有利用到目标之间的关系。因此我们还使用了每层图网络提取的特征,从而利用了目标之间的关系。因此总体的损失为在所有的图网络层中的检测和目标关联损失:
L
total
=
∑
l
η
1
L
det
l
+
η
2
L
emb
l
(7)
L_{\text {total}}=\sum_{l} \eta_{1} L_{\text {det}}^{l}+\eta_{2} L_{\text {emb}}^{l} \tag{7}
Ltotal=l∑η1Ldetl+η2Lembl(7)
L
L
L是GNN层的索引,代表第几层。
η
1
,
η
2
η1, η2
η1,η2代表每个损失的权重。
5. 推理和追踪管理
每一帧中,我们首先通过后处理的 M ^ L l , M ^ S l , M ^ R l \hat M_L^l,\hat M_S^l,\hat M_R^l M^Ll,M^Sl,M^Rl和一个通过NMS获得的 F t F_t Ft 帧中的估计检测 D t D_t Dt,同时通过 M ^ E l \hat M_E^l M^El中检测到目标的像素来获得检测 D t D_t Dt的身份嵌入。 T t − 1 T_{t-1} Tt−1在过去帧的身份嵌入在检测后会被缓存,所以他们可获得。使用这些嵌入来计算亲密度矩阵 S ^ \hat S S^,每一项表示每对轨迹与检测之间的相似度。然后使用匈牙利算法找到 D t D_t Dt和 T t − 1 T_{t-1} Tt−1的最佳匹配。未匹配到轨迹的且检测自信度大于0.4的目标初始化为一个新的轨迹。未匹配的轨迹可能离开了场景或者未被检测到。为了避免终止仍在场景的轨迹,使用卡尔曼滤波去拓展这个轨迹 τ t e r m τ_{term} τterm 帧,在后续的任务中任然加入进行匹配。如果 τ t e r m τ_{term} τterm 帧后仍未匹配到,则终止这个轨迹。本实验 τ t e r m τ_{term} τterm 取30。
五、 总结
提出了一种新的联合MOT方法实例,该方法可以同时优化目标检测和数据关联模块,使用GNN来建模目标间的时空运动特征,学习更有鉴别性的特征,更进一步优化网络。