Graph Networks for Multiple Object Tracking—用于多目标跟踪的图网络(GNMOT)
之前的一段时间学习了自己毕业师姐的构造图结构进行多目标跟踪数据该关联的新型跟踪器—SCGTracker只能是感慨自己和师姐的差距了。
这里在接着上一篇学习到的基础上,继续学习构造最简单的二部图来完成数据关联的用于多目标跟踪的图网络。积累一些图结构相关的思路吧。
摘要概括
-
现有的MOT方法大都关注到局部的关系而忽略了全局的关系。
-
一些方法将 MOT 问题表述为图优化问题。 然而,这些方法基于
静态图
,很少更新。 为了解决这些问题,我们设计了一种具有端到端图网络
的新近在线 MOT 方法。 -
设计一个外观图网络和一个运动图网络来分别捕获外观和运动相似度。 我们的图网络中精心设计了更新机制,这意味着图中的
节点
、边
和全局变量
都可以更新。
全局变量可以捕获全局关系以帮助跟踪。 最后,提出了一种处理丢失检测的策略来弥补检测器的缺陷。
总结:当前一些利用图网络解决MOT的工作都是静态图, 本篇文章提出了动态图, 设计了一个外观图和一个运动图, 来计算轨迹与检测之间的关系. 采用了边, 顶点和全局变量来更新图的特征。
引言总结与相关工作
大多数应用在多目标跟踪上的图还是静态图为主,将对象和检测视为节点并将对象和检测之间的关联视为边来构建图。
-
图模型将 MOT 问题表述为最小成本网络流优化问题。 当节点或边包含的信息过时时,这些静态图模型将失败。
-
如果这些图模型能够更新节点和边,将获得更好的跟踪性能。(然后这些静态图模型没有对对象之间的全局交互进行建模。)
图 1. 图网络由彩色圆形节点(帧 t − 1 中的对象)、灰色方形节点(帧 t 中的检测)、边(对象和检测之间的连接)和全局变量组成。 我们的方法可以迭代更新所有组件。
图神经网络由下面的三个部分组成。
- 边
- 节点
- 全局变量(全局变量期望捕获对象之间的交互。)
图网络迭代地更新节点和边,可以弥补以往图模型的缺陷。对于我们的MOT问题来说最重要的两个部分就是外观和动作特征。
因为外观特征和运动特征在不同的场景下的表现不同,因此设计了两种图网络,包括外观图网络和运动图网络,它们分别使用外观特征和运动特征作为节点的属性
- 分别处理外观和运动的两个端到端图网络,我们设计了四个更新模块来获取对象和关联检测之间的相似度分数。
包含一个节点更新模块、一个全局变量更新模块和两个边更新模块。
- 最后,为了弥补检测器的缺陷,提出了两种处理丢失检测的策略。
它包括单目标跟踪器(SOT)策略和检测恢复策略。
特殊的意义:这是第一篇将图网络应用于 MOT 问题的论文。
本文的贡献
-
我们提出了一种新的在线 MOT 方法,具有端到端图网络框架,以及处理缺失检测的策略。
-
我们的图网络中精心设计了更新机制,允许图网络的推理。
在相关工作中提到的最主要的值得学习的一部分就是,将MOT问题的方法分为了三种,在线跟踪,离线跟踪,和近在线跟踪方法。
核心方法—问题表述
首先论文中先介绍了MOT领域中常见的一些概念,轨迹集,检测集,和对象集的概念。
之后给出了流程图介绍一下整个算法的执行流程。之后我们对下面的这一幅图进行详细的解释。
Feature Extraction
- 首先,我们从对象和检测中提取外观特征和运动特征。
和之前或者说是现在的网络一样,外观特征是通过卷积神经网络来进行提取的。
- 运动特征是一个 6 维向量,包括对象/检测的左上角的 2D 坐标、宽度、高度和 2D 速度,该速度是根据检测和对象之间的位移计算得出的。
Graph Networks
之后的一步我们介绍图网络的结构,(了解一下这个图网络可能是二部图是如何的构建出来的)
作用:图网络推断每个跟踪对象和每个检测对象之间的相似性。连接对象和检测的每条边都与其相似度得分相关联。
这个部分的作用大部分情况下和师姐之前的SCGTracker的图结构的应该是很相似的,最后应该根据某种关系构建出亲和力矩阵,或者是相似性矩阵来进行匹配。
这里只做整体的概述,在后面的部分有更加详细的讲解。
Data Association
此过程输出对象和检测之间的关联。 匈牙利算法用于寻找最佳分配。
Missing Detections Handling
最后一个整体方法的概述部分较为详细的讲解了对于缺失检测的处理问题。
提出的原因:在数据关联过程之后,仍然存在一些缺失的检测。
对于当前帧中丢失的那些对象,使用SOT策略来跟踪当前帧中那些丢失的对象,并将它们与SOT恢复的具有高置信度得分的边界框相关联。
对于那些丢失了一段时间的检测,我们使用检测恢复策略,该策略应用线性运动模型来恢复那些丢失的检测
问题描述:
-
我们将 Ot 中的第 i 个对象表示为 oi,以及 Dt 中的第 j 个检测为 dj
-
oi 和 dj 之间的赋值状态用 ai,j 表示,其中 ai,j = 1 描述了检测 dj 与对象 oi 关联的情况,而 ai,j = 0 描述了相反的情况。(邻接矩阵的表示)
-
分配集表示为:(应该就对应着邻接表示)
A t = { a i , j } ∣ O t ∣ × ∣ D t ∣ \mathcal{A}_{t}=\left\{a_{i, j}\right\}^{\left|\mathscr{O}_{t}\right| \times\left|\mathcal{D}_{t}\right|} At={ai,j}∣Ot∣×∣Dt∣
其中|Ot| 和|Dt| 分别是对象和检测的数量。
- 那么最优分配集可以表述为:
A ^ t = argmin A t ∑ i = 1 ∣ O t ∣ ∑ j = 1 ∣ D t ∣ a i , j F ( o i , d j ) s.t. ∑ i = 1 ∣ O t ∣ a i , j ≤ 1 and ∑ j = 1 ∣ D t ∣ a i , j ≤ 1 \begin{aligned} \hat{\mathcal{A}}_{t}= & \operatorname{argmin}_{\mathcal{A}_{t}} \sum_{i=1}^{\left|\mathcal{O}_{t}\right|} \sum_{j=1}^{\left|\mathcal{D}_{t}\right|} a_{i, j} \mathcal{F}\left(o_{i}, d_{j}\right) \\ \text { s.t. } & \sum_{i=1}^{\left|\mathcal{O}_{t}\right|} a_{i, j} \leq 1 \text { and } \sum_{j=1}^{\left|\mathcal{D}_{t}\right|} a_{i, j} \leq 1 \end{aligned} A^t= s.t. argminAti=1∑∣Ot∣j=1∑∣Dt∣ai,jF(oi,dj)i=1∑∣Ot∣ai,j≤1 and j=1∑∣Dt∣ai,j≤1
-
其中 F(oi, dj) 表示对象 oi 和检测 dj 之间的成本。
-
约束条件描述了一个对象最多可以与一个检测关联,并且一个检测最多可以与一个对象关联。
-
在遵循约束条件的情况下,可以满足一下的两个条件。
∑ i = 1 ∣ O t ∣ a i , j = 0 \sum_{i=1}^{\left|\mathcal{O}_{t}\right|} a_{i, j}=0 i=1∑∣Ot∣ai,j=0
∑ j = 1 ∣ D t ∣ a i , j = 0 \sum_{j=1}^{\left|\mathcal{D}_{t}\right|} a_{i, j}=0 j=1∑∣Dt∣ai,j=0
这意味着检测与任何对象无关,并且当前帧中对象丢失。
细节展开—Graph Networks
F(oi, dj) 表示对象 oi 和检测 dj 之间的成本。
之前提到的成本函数我们将其定义为:
F ( o i , d j ) = α AGN ( f a o i , f a d j ) + ( 1 − α ) MGN ( f m o i , f m d j ) \mathcal{F}\left(o_{i}, d_{j}\right)=\alpha \operatorname{AGN}\left(f_{a}^{o_{i}}, f_{a}^{d_{j}}\right)+(1-\alpha) \operatorname{MGN}\left(f_{m}^{o_{i}}, f_{m}^{d_{j}}\right) F(oi,dj)=αAGN(faoi,fadj)+(1−α)MGN(fmoi,fmdj)
- 其中AGN(·)和MGN(·)分别表示外观图网络和运动图网络
显然对于下面的这一部分图来说V:代表图的节点。u:代表全局变量。E:代表的是边的信息。
因此,两个聚合函数ρv→u和ρe→u分别用于聚合所有节点和所有边。
图 4.(a) 我们的 4 步图网络的结构。 也是外观图网络的结构。 阶段A、B、C、D分别表示边更新模块I、节点更新模块、全局更新模块和边更新模块II。 (b) 运动图网络的结构,仅包含阶段C和阶段D。
- α 是超参数。 foi a 和 fdj a 分别表示对象 oi 和检测 dj 的外观特征,foi m 和 fdj m 分别表示 oi 和 dj 的运动特征。
Structures of the Graph Network
背景:根据MOT的独特特性,精心设计了图网络结构和更新顺序。
我们设计了一个四步图网络,将边缘更新模块移至3结构的末尾。 原因是没有节点和全局变量的真实值,因此该网络仅受边的监督来更新节点和全局变量。
-
首先应该添加一个边更新模块来更新边,因为节点更新模块依赖于更新的边而不是初始化的边。
-
因此,我们设计了以下图网络结构,它包含四个模块,包括(A)边更新模块I φe,(B)节点更新模块φv,(C)全局更新模块φu,(D)边更新模块II ψe
3. 将V和E分别表示为节点集和边集,每个节点由一个特征表示。
V = { v p s , v q r ∣ p = 1 , … , ∣ O t ∣ , q = 1 , … , ∣ D t ∣ } E = { e k ∣ k = 1 , … , K } \begin{aligned} V & =\left\{v_{p}^{s}, v_{q}^{r}\left|p=1, \ldots,\left|\mathcal{O}_{t}\right|, q=1, \ldots,\left|\mathcal{D}_{t}\right|\right\}\right. \\ E & =\left\{e_{k} \mid k=1, \ldots, K\right\} \end{aligned} VE={vps,vqr∣p=1,…,∣Ot∣,q=1,…,∣Dt∣}={ek∣k=1,…,K}
vs p 表示第 p 个跟踪的对象 vr q 表示第 q 次检测对象。
ek 表示一个对象和一个检测之间的第 k 个边缘/关系
K = |Ot| × |Dt| 表示对象检测对的总数。
这里的全局变量u期望从所有的跟踪器,检测对象,和分配状态中来编码信息。更新全局变量需要考虑所有节点和边。
因此,两个聚合函数ρv→u和ρe→u分别用于聚合所有节点和所有边。
下面我们依次对我们刚刚简单说明的四个模块部分 A边更新模块 B节点更新模块 C全局更新模块 D边更新模块二进行细节上的说明和讲解。
(A) Edge Updating Module I
Inputs are the object node, the detection node, the edge and the global variable. The output is the updated edge.
- 输入:对象节点、检测节点、边v和全局变量u
- 输出:输出是更新后的边。
为了简单起见,我们将通过 ek 连接的对象节点和检测节点分别表示为 vs k 和 vr k。
前面的跟踪器s表示,后面新检测的检测框用k表示。
- 然后,更新后的边 e* k 可以计算为:
e k ∗ = ϕ e ( v k s , v k r , e k , u ) = N N ϕ ( [ v k s , v k r , e k , u ] ) , e_{k}^{*}=\phi^{e}\left(v_{k}^{s}, v_{k}^{r}, e_{k}, u\right)=\mathrm{NN}_{\phi}\left(\left[v_{k}^{s}, v_{k}^{r}, e_{k}, u\right]\right), ek∗=ϕe(vks,vkr,ek,u)=NNϕ([vks,vkr,ek,u]),
其中NNφ(·)是一个神经网络,其结构由两个全连接(FC)层和中间的Leaky ReLU函数组成。
将构成的节点 Vks和Vkr以及之间的连接关系ek,和全局变量U输入到边更新模块中去,也就是相当于经过了NNφ(·)网络。
(B)Node Updating Module
该模块将历史特征合并到检测节点中。(直观感觉可能是将之前的一下节点特征和更新的边的特征合并到检测的节点上去。做一个特征的融合机制。)
Inputs are the object node, the detection node, the updated edge and the global variable
输入:对象节点
、检测节点
、更新的边
和全局变量
。
输出:是更新后的检测节点。 注意是检测节点
更新后的检测节点 ∼vr k 可以通过下式计算:
v ~ k r = ϕ v ( v k s , v k r , e k ∗ , u ) = N N ϕ ( [ v k s , v k r , e k ∗ , u ] ) , \tilde{v}_{k}^{r}=\phi^{v}\left(v_{k}^{s}, v_{k}^{r}, e_{k}^{*}, u\right)=\mathrm{NN}_{\phi}\left(\left[v_{k}^{s}, v_{k}^{r}, e_{k}^{*}, u\right]\right), v~kr=ϕv(vks,vkr,ek∗,u)=NNϕ([vks,vkr,ek∗,u]),
前两部分的更新信息输入到第三个部分也就是后面的全局更新模块的部分了。
(C ) Global Updating Module
输入:输入是全局变量、聚合节点和聚合边。
输出:更新后的全局变量。
- 聚合所有对象和检测节点以及所有更新的边,并将其表示为:将V和E分别表示为聚合节点和聚合边。
- 聚合特征可以按照以下的方式来进行计算:
V ˉ = 1 2 K ( ∑ k = 1 K v k s + ∑ k = 1 K v ~ k r ) , E ˉ = 1 K ∑ k = 1 K e k ∗ . \bar{V}=\frac{1}{2 K}\left(\sum_{k=1}^{K} v_{k}^{s}+\sum_{k=1}^{K} \tilde{v}_{k}^{r}\right), \bar{E}=\frac{1}{K} \sum_{k=1}^{K} e_{k}^{*} . Vˉ=2K1(k=1∑Kvks+k=1∑Kv~kr),Eˉ=K1k=1∑Kek∗.
该聚合过程考虑了所有关联。(所以我自己认为这个地方重新计算得到的这两个信息视为了全局变量了)
这一个部分也应该是图网络的一个核心,也就是图的一个聚合操作了。
- 之后V和E将与原始全局变量一起被送入全局更新模块。 因此,更新后的全局变量~u可以通过以下方式计算:
u ~ = ϕ u ( V ˉ , E ˉ , u ) = N N ϕ ( [ V ˉ , E ˉ , u ] ) , \tilde{u}=\phi^{u}(\bar{V}, \bar{E}, u)=\mathrm{NN}_{\phi}([\bar{V}, \bar{E}, u]), u~=ϕu(Vˉ,Eˉ,u)=NNϕ([Vˉ,Eˉ,u]),
(D) Edge Updating Module II
输入是对象节点、更新的检测节点、更新的边缘和更新的全局变量。
输出是最终边缘。 最终边缘 ∼ek 可以通过以下方式计算。
e ~ k = ψ u ( v k s , v ~ k r , e k ∗ , u ~ ) = NN ψ ( [ v k s , v ~ k r , e k ∗ , u ~ ] ) , \tilde{e}_{k}=\psi^{u}\left(v_{k}^{s}, \tilde{v}_{k}^{r}, e_{k}^{*}, \tilde{u}\right)=\operatorname{NN}_{\psi}\left(\left[v_{k}^{s}, \tilde{v}_{k}^{r}, e_{k}^{*}, \tilde{u}\right]\right), e~k=ψu(vks,v~kr,ek∗,u~)=NNψ([vks,v~kr,ek∗,u~]),
其中 NNψ(·) 与模块 (A) 具有相似的结构,但在最后一个 FC 层之后添加了一个 softmax 层以获得相似度得分。
运动图和外观图
外观图的简单概览。
- 外观图网络测量每个对象和每次检测之间的外观相似度。
输入:为所有目标和所有检测的外观特征。
输出:为所有目标-检测对的相似度得分。(亲和力矩阵)
- 外观特征使用上一个时间步更新的检测外观特征,因为它在每个时间步都会更新。
设计了 4 步图网络,如图 4(a)所示。 每条输出边缘被视为外观相似度,如式(1)中的AGN(·)所示。 (3)。
运动图的简单概览。
- 运动图网络测量每个对象和每个检测之间的运动相似度
输入:是所有对象和所有检测的运动特征。
输出:是所有对象检测对的相似度分数。
根据轨迹估计物体的速度,因此不需要更新节点。
每个输出边缘被视为运动相似度,如式(1)中的MGN(·)所示。 (3)。
训练策略
For training the appearance graph network, we design
a 2-step training strategy
首先,训练边缘更新模块 I 直到收敛。 然后,对后三个模块进行训练。
为了训练运动图网络,我们直接训练整个网络。(我们用交叉熵损失来训练我们的图网络。)’
我们为节点更新模块设计了节点成本。 如果对象检测对属于同一个人,则检测节点将被更新。 否则,检测节点预计不会改变。(LC和LN分别表示交叉熵损失和节点成本)
L = L C + λ L N , L=L_{C}+\lambda L_{N}, L=LC+λLN,
p 表示每个对象和每个检测之间的真实关联。 p = 1 表示检测与对象相关,p = 0 表示相反的情况。
L C = − p log p ^ − ( 1 − p ) log ( 1 − p ^ ) L_{C}=-p \log \hat{p}-(1-p) \log (1-\hat{p}) LC=−plogp^−(1−p)log(1−p^)
L N = ( 1 − p ) × MSE ( v , v ~ ) L_{N}=(1-p) \times \operatorname{MSE}(v, \tilde{v}) LN=(1−p)×MSE(v,v~)
v是检测节点的原始特征,~v是更新后的v。MSE(·,·)是均方误差函数。
补充细节:使用的是预训练的34层的resnet网络,每个更新模块中FC层的大小设置为256。
图 3. 上半部分:4 步图网络的结构。 蓝色实心圆圈、绿色实心正方形和橙色圆角矩形分别表示对象集、检测集和全局变量。 每个模块的更新组件都标记为红色。 下半部分:四个模块对应的网络。 对于每个模块,都有一个表示神经网络的大方框。 在方框内,灰色矩形表示 FC 层。 左侧和右侧表示输入和输出。 蓝色、绿色、黑色、橙色矩形分别表示对象节点、检测节点、边缘和全局变量的特征。 具有黑色、绿色和橙色边缘的空心矩形表示边缘、检测节点和全局变量的更新特征。 带有纹理的矩形是聚合特征。 带有黑色轮廓的红色方块是最终的边缘特征。