• [论文阅读笔记15]GNN在多目标跟踪中的应用



    GNN简单来讲, 旨在通过融合顶点和边的特征进而提取出图(Graph)中的信息. 一个直觉的想法是, 在MOT中, 我们可以用顶点表示目标的特征, 边表示目标之间的关系, 进而一个构成的图就可以作为解决关联问题的一个很好的入口, GNN就可以成为解决问题的工具.

    我想总结几篇经典的利用GNN做MOT的文献. 力争持续更新.


    1. Learning a Neural Solver for Multiple Object Tracking(MOTSolv, Offline, CVPR2020)

    解决Offline的MOT问题, 主流是依靠最小(大)流算法. 这篇文章本质上利用GNN来对最小流算法进行求解.

    1.1 Abstract

    摘要中说, MOT方法大家热衷于研究特征提取的策略, 然而本篇文章主要针对数据关联进行研究. 文章提出了一个消息传递网络, 来解决网络流问题. 换言之, 将网络流这个最优化问题变得可微了.

    1.2 用图问题描述跟踪

    我们首先来建模, 弄清图中顶点与边的含义. 假定我们有了所有的检测, 定义检测集合 O = { o i } ∣ i = 1 n \mathcal{O}=\{o_i\}|_{i=1}^n O={oi}i=1n, 其中每个 o i o_i oi代表一个检测, 一个检测包含位置与时间信息, 因此令 o i = { a i , p i , t i } o_i=\{a_i,p_i,t_i\} oi={ai,pi,ti}, 其中 a i a_i ai表示原始像素(tracking-by-detection范式, 我们有现成的检测框), p i p_i pi表示位置, t i t_i ti表示这个检测所处的时间. 显然, 一个轨迹就可以用一系列的检测表示: T i = { o i k } ∣ k = 1 n i T_i=\{o_{ik}\}|_{k=1}^{n_i} Ti={oik}k=1ni.

    我们现在构建图 G = ( V , E ) , V = { f i } , E ⊂ V × V G=(V,E), V=\{f_i\}, E\subset V\times V G=(V,E),V={fi},EV×V, 其中 f i f_i fi对应目标特征, 边的含义是, 这两个检测之间是否构成轨迹. 具体来说, 我们用 T i = { o i k } ∣ k = 1 n i T_i=\{o_{ik}\}|_{k=1}^{n_i} Ti={oik}k=1ni 描述一个轨迹, 也等价于使用边集合 { ( i 1 , i 2 ) , ( i 2 , i 3 ) , . . . , } \{(i_1,i_2),(i_2,i_3),...,\} {(i1,i2),(i2,i3),...,}描述. 根据轨迹的特点, 一个目标仅能和最多一条轨迹相连. 那么用GNN解决最小流问题, 实际上就是, 将边进行分类, 判定其是否属于一条轨迹.

    如果用 y ( i , j ) ∈ { 0 , 1 } y(i,j)\in\{0,1\} y(i,j){0,1}表示对边 ( i , j ) (i,j) (i,j)的分类结果, 则最小流问题叙述为:
    min ⁡ ∑ ( i , j ) ∈ E c ( i , j ) y ( i , j ) s . t . y ( i , j ) ∈ { 0 , 1 } \min\sum_{(i,j)\in E}c(i,j)y(i,j) \\ s.t. \quad y(i,j)\in\{0,1\} min(i,j)Ec(i,j)y(i,j)s.t.y(i,j){0,1}

    1.3 消息传递网络的设计

    我们知道, GNN在前向传播的过程中要不断聚合顶点与边的信息, 也就是跟CNN类似的感受野的效果. 那么如何设置聚合信息的策略, 也是一个值得研究的课题.

    前已说过, 顶点表示目标, 边表示目标间的联系. 具体地, 在初始化时.顶点用目标的特征进行编码. 特征是利用现成的Re-ID网络提取的.

    对于边, 用几何和外观两种特征来衡量目标之间的联系. 假设两个目标的位置分别为 ( x i , y i , h i , w i ) , ( x j , y j , h j , w j ) (x_i,y_i,h_i,w_i), (x_j,y_j,h_j,w_j) (xi,yi,hi,wi),(xj,yj,hj,wj), 外观特征分别为 f i , f j f_i, f_j fi,fj, 我们还需要时间差来衡量时间上的远近, 则边的初始特征向量为:
    h i , j 0 = ( 2 ( x j − x i ) h i + h j , 2 ( y j − y i ) h i + h j , log ⁡ h i h j , log ⁡ w i w j , t j − t i , ∣ ∣ f i − f j ∣ ∣ 2 ) h_{i,j}^{0}=(\frac{2(x_j-x_i)}{h_i+h_j}, \frac{2(y_j-y_i)}{h_i+h_j}, \log{\frac{h_i}{h_j}},\log{\frac{w_i}{w_j}},t_j-t_i,||f_i-f_j||_2) hi,j0=(hi+hj2(xjxi),hi+hj2(yjyi),loghjhi,logwjwi,tjti,fifj2)

    在GNN一层一层传递的过程中, 既要边向顶点传递信息, 也要顶点向边传递信息, 先顶点到边,再边到顶点, 也就是如下的流程:

    在这里插入图片描述

    具体地, 在顶点向边传递的过程中, 会将两顶点的特征和边特征concat起来输入MLP N e \mathcal{N}_e Ne, 在边向顶点传递信息的过程中, 对于和该顶点相连的每条边, 首先将上一步计算出的边的特征和顶点的concat输入MLP N v \mathcal{N}_v Nv, 之后将得到的结果进行sum, 也就是如下两式:
    在这里插入图片描述
    还有一个细节, 为了在MLP中加入时间的先验信息, 在计算边到顶点信息传递时, 按照与该顶点相邻的顶点是past还是future分别进行计算, 并总是利用初始信息:

    在这里插入图片描述
    例如: 我们要计算下图中中间节点的更新的feature, 与它相连的有过去两个节点和未来两个节点, 则利用两个MLP分别计算过去节点和未来节点对应的结果, concat之后, 再输入一个MLP进行计算.
    在这里插入图片描述

    1.4 评价

    这是一个offline的方法, 利用GNN里比较常见的策略, 将匹配问题转化为graph中边分类问题. 做的一点小改动是将相连的顶点分为past和future. 不过迷惑的一点是, 没有看明白将edge进行分类后, 是如何满足约束条件的.

      \space  

    2. Learnable Graph Matching: Incorporating Graph Partitioning with Deep Feature Learning for MOT(GMTracker, Online, CVPR2021)

    2.1 Abstract

    文章主要针对三个问题:

    1. 现有的方法忽视了轨迹和检测之间的上下文信息,这样对遮挡不友好
    2. 端到端的数据关联方式太依赖DNN了,没有利用到基于优化的方式的长处。换言之,用DNN来解决优化方式比较值得怀疑
    3. 基于graph的方法往往需要一个独立的GNN来提取特征,这样不方便

    提出的解决方法是:
    利用整体的无向图来描述轨迹和检测之间的关系,将关联问题转换为图匹配问题,并且为了让整体都是可微的(端到端),将原来的图匹配放宽为连续二次规划,然后利用隐函数定理将其训练到一个深度图网络中.

    整体算法的思路是, 先用GCN增强图的特征表示, 然后用图匹配问题解决关联问题.

    2.2 将MOT转化为图匹配形式

    图匹配问题是寻找两个图的顶点映射, 使得匹配后顶点和顶点之间的边的相似度要尽量相近. 如果我们对已有的轨迹建立一个图, 再将当前帧检测建立一个图, 那么MOT的匹配问题就是如何寻找这个顶点之间映射的问题.

    我们还是先来构建图. 和MOTSolv类似, 对于检测图 G D = ( V D , E D ) G_D=(V_D,E_D) GD=(VD,ED), 顶点集合 V D V_D VD表示一个检测, 边表示检测之间的相似度. 对于轨迹图 G T = ( V T , E T ) G_T=(V_T,E_T) GT=(VT,ET), 顶点集 V T V_T VT表示该轨迹检测的集合, 边也是轨迹之间的相似度. 检测图和轨迹图都是完全图. 至于相似度如何定义, 会在后文说明.

    图匹配问题, 是一个二次分配问题(QAP), 可以写成K-B形式: (数学不好, 这里背后的原理不懂)
    我们必须先假定, 待匹配的两个图顶点数相同, 这是图匹配问题的规定

    在这里插入图片描述

    (1)式:
    将图匹配问题表示为该最优化问题. 其中 A A A表示图的带权邻接矩阵, Π \Pi Π表示匹配关系, 约束条件的意思是: 我们保证匹配关系是一一对应的(双射, 1 n 1_n 1n为全1矩阵). , B B B表示顶点的亲和度矩阵.

    因为根据K-B形式的特性, Π \Pi Π是正交矩阵, 因此可以写为如下形式:

    在这里插入图片描述

    F表示矩阵的F范数,
    这个式子更加直观, 第一项表示边的匹配关系的差值, 也就是边的差异. 第二项表示匹配结果的顶点之间的相似度. 我们应该最小化边的差异, 最大化点的相似度.

    进一步地, 可以证明, 正交矩阵 Π \Pi Π位于双随机矩阵的凸包内, 因此我们可以限定 Π \Pi Π的搜索范围, 转化为如下优化问题:

    在这里插入图片描述
    然而, 在MOT问题中, 带权邻接矩阵不该是二维的, 该是三维的, 因为每个元素都代表一个特征. 我们假定特征是经过归一化的, 为此, 我们按第三维展开, 将优化问题写为:

    在这里插入图片描述
    并将其重写为(为啥)?
    在这里插入图片描述

    (5)式中:
    小写字母全部是原矩阵的拉直形式, M M M n 2 × n 2 n^2\times n^2 n2×n2矩阵, 表示所有可能的顶点匹配.

    那么根据(3)式的结论, 我们可以转化为:

    在这里插入图片描述
    那么, 边和顶点之间的相似度都是用余弦距离度量的(保证了归一化), 如下两式所示:

    在这里插入图片描述
    在这里插入图片描述
    通过一种方式(此处略掉了)把(7)的 M e u , v M_e^{u,v} Meu,v映射到(6)式的 M M M.

    2.3 GMTracker和图匹配网络

    2.3.1 用于增强特征的cross-graph GCN

    为什么要叫Cross-Graph呢? 是因为在增强特征的时候, 图卷积是对检测图和轨迹图一起做的, 这样可以关注到检测与轨迹的关系.

    目标代表顶点, 顶点的初始特征用Re-ID网络的外观特征. 边代表两个目标之间的相似度, 对于检测图和轨迹图中内部顶点之间的边, 我们定义是边连接的顶点的特征拼接(并正则化), 即:
    h i , i ′ = l 2 ( h i , h i ′ ) h_{i,i'}=l_2(h_i, h_{i'}) hi,i=l2(hi,hi)
    其中 h h h代表特征.

    聚合函数采用加权和形式, 即在第 l l l层的第 i i i个顶点:
    m i ( l ) = ∑ j ∈ G T w i , j h j h i ( l + 1 ) = M L P ( h i ( l ) + ∣ ∣ h i ( l ) ∣ ∣ 2 m i ( l ) ∣ ∣ m i ( l ) ∣ ∣ 2 ) i ∈ G D , j ∈ G T m_i^{(l)}=\sum_{j\in G_T}w_{i,j}h_j \\ h_i^{(l+1)}=MLP(h_i^{(l)}+\frac{||h_i^{(l)}||_2m_i^{(l)}}{||m_i^{(l)}||_2}) \\ i\in G_D, j\in G_T mi(l)=jGTwi,jhjhi(l+1)=MLP(hi(l)+mi(l)2hi(l)2mi(l))iGD,jGT

    其中的权重如何定义呢? 我们用外观特征和运动特征一起衡量. 对于轨迹的运动预测采用Kalman滤波:
    m i ( l ) = c o s ( h i ( l ) , h j ( l ) ) + I o U ( g i , g j ) m_i^{(l)}=cos(h_i^{(l)},h_j^{(l)})+IoU(g_i,g_j) mi(l)=cos(hi(l),hj(l))+IoU(gi,gj)

    2.3.2 可微的图匹配层

    前面用数学方法描述了MOT中的图匹配问题, 作者想把这个也变成可微的, 变成网络的一部分, 跟DeepMOT一样.

    作者借鉴了OptNet, 是一个用网络解决最优化问题的算法. 作者说具体的证明在附录里, 然而我没找到附录在哪!!

    2.4 评价

    这篇文章的可取之处在于利用跨图的GCN, 同时考虑检测和轨迹来更新特征. 并且将匹配问题转化为图匹配问题(而不再限于沟渠的二分图匹配——匈牙利算法的模式), 并且将图匹配算法变得可微.

    有几个疑问之处, 一是图匹配如何具体实现可微的, 二是图匹配问题应该要求两个图的顶点个数一样, 当不一样时, 是如何处理的.
      \space  

    3. Joint Detection and Multi-Object Tracking with Graph Neural Networks(GSDT, Online, arxiv 2021.4)

    3.1 Abstract

    这篇文章的亮点在于1. Joint detection and tracking 2. GNN. JDT的卖点在于数据关联可以和检测一起训练, 达到one-shot的效果.

    对于过去的JDT的工作, 很多都没有考虑到object-object之间的关系. 而对于过去图网络的工作, 很多还是tracking-by-detection的(例如前两篇文献都是). 而这个工作, 是可以利用GNN的结构天然地对object-object关系进行建模, 也是JDT的, 如下图所示.
    在这里插入图片描述

    3.2 Method

    GSDT的原理比较简单. 为了实现JDT, 最直接的方式是从同一个特征图同时进行检测和目标特征的预测. 为了实现Online, 我们应该把过去的轨迹和当前帧的检测关联起来.

    整体结构如下图:
    在这里插入图片描述

    假设在帧 t t t, 我们有 t − 1 t-1 t1的特征图和第 t t t帧的特征图. 我们根据已有的轨迹, 利用ROIAlign将 t − 1 t-1 t1的特征图对应的位置抠出来, 这样就得到了轨迹的特征. 我们希望学习过去和现在的object-object关系, 但是现在帧我们只有特征图, 没有检测. 因此只能把当前特征图整个都当成潜在检测, 例如特征图维度是 R c × h × w \mathbb{R}^{c\times h \times w} Rc×h×w, 就逐像素flatten成 h w hw hw c c c维的向量.

    我们把轨迹的特征和当前特征图flatten出的特征当作图的顶点. 由于同一帧的目标不可能相互匹配, 因此我们建图的时候只需要建立 t − 1 t-1 t1帧顶点到 t t t顶点即可. 此外, 只有相近目标关系才大, 因此边只需要连接轨迹和相近的像素. 随后GNN对特征进行更新. 然然而, 如果采用一层GNN, 则只有时间信息而没有空间信息. 因此可以采用多层, 在迭代的过程中, 特征会传播的更远, 就可以获取空间信息. GNN部分如下图:

    在这里插入图片描述
    经过GNN后, h w hw hw c c c维的向量已经得到了更新, 我们再重新reshape回 R c × h × w \mathbb{R}^{c\times h \times w} Rc×h×w, 这样在此新特征图上进行不同任务的预测: 位置, 形状, 外观信息.

    在这里插入图片描述
    得到特征后, 数据关联阶段仍然采用检测的embedding和轨迹embedding计算亲和度, 匈牙利算法匹配.

    3.3 评价

    GSDT利用GNN对当前帧feature map进行更新, 融合过去轨迹特征和空间信息. 然而, 过去特征实际上只用了 t − 1 t-1 t1帧的, 这样如果有的目标有模糊或者怎样, 外观信息可能不准, 可以对过去一定帧数取平均, 会好一些. GNN只利用了顶点信息:
    在这里插入图片描述
    其实对边也赋予特征可能会更丰富一点.

      \space  

    4. Detection Recovery in Online Multi-Object Tracking with Sparse Graph Tracker(SGT, Online, arxiv 2022.5)

    4.1 Abstract

    文章从漏检这个问题入手, 指出MOT性能受限的一大因素是因为遮挡, 模糊等造成的漏检. 所以想用GNN来恢复漏检. 具体的做法是节点代表检测, 边代表两个检测之间的相似度(例如位置或者外观). 之后跟MOTSolv一样, 把两个检测是否属于同一目标, 转换成边分类的问题.

    这个模型是Online的, 每次在相邻两帧进行, 并且不需要运动特征和额外的Re-ID网络, 是个JDT的模型(和GSDT一样).

    4.2 Introduction & Related Work

    在这两个部分, 作者提出了一个有趣的观点: “找到在FP和TP之间实现最佳权衡的检测阈值至关重要.” 其实, 对于以往处理漏检的方法, 主要有两个工作. 一是ByteTrack, 二是OMC. OMC没看过, ByteTrack实际上是通过降低阈值和多次匹配完成的性能提升, 然而这样会在降低FN的同时提高FP. 实际上, 像SGT这种利用特征重新关联的形式, 反而应该会好一些.

    4.3 Method

    SGT基于FairMOT打造, 实际上做的是匹配阶段的优化.

    SGT实际上是通过边分类对即将抛弃的检测进行恢复. 边代表节点(检测)之间的相似度, 用位置, 外观和IoU三个指标衡量:
    在这里插入图片描述
    与上述方法不同的是, 顶点并不是用Re-ID特征初始化, 而是用骨干网络提取的整个特征作为顶点初始化, 所有顶点共享.

    下面对SGT的过程做一个笔记.

    在这里插入图片描述

    1. Step1. 输入(应该是相邻)的两帧 t 1 , t 2 t_1, t_2 t1,t2, 我们选择置信度最大的 K K K个检测( K K K应该比较大), 提取特征. 但是这 K K K个检测里面有置信度大的, 也有置信度小的. 这要是之前的一些方法, 低置信度的通常被丢弃了. 我们现在要通过GNN, 恢复置信度低的检测.
    2. Step2. 构建GNN. 注意绿色的是在 t 1 t_1 t1之前丢失的检测, 被加入到 t 1 t_1 t1侧的顶点中. 注意丢失的检测也是有寿命的.
    3. Step3. GNN forward, 更新顶点和边的特征.
    4. Step4. 对边进行二分类, 确定两个检测是否为同一个目标, 并用匈牙利算法匹配, 确保一一对应. 此时, 原本要抛弃的一些检测可能因为边分类是正类而被恢复. 为了抑制FP, 在恢复后仍然对顶点分类, 高于置信度才真正恢复.

    4.4 评价

    SGT实际上是针对低置信度抛弃问题的一个改进, 相比ByteTrack, 显得不那么暴力了, 而且通过顶点分类等方式有意识地抑制FP.

    5. 比较

    算法Online/Offline范式整体思路图形式顶点含义边含义
    MOTSolvOfflineTBDGNN解决最小流问题完全图目标的Re-ID feature目标相似度
    GMTrackerOnlineTBD将匹配问题转换为图匹配问题(顶点映射关系), 并利用隐函数定理将匹配层可微完全图目标的Re-ID feature目标相似度
    GSDTOnlineJDT利用GNN更新当前feature map, 不同head再进行不同任务稀疏图一侧是轨迹的Re-ID feature, 一侧是feature map的像素特征-
    SGTOnlineJDT利用边分类来决定两个检测是否属于同一目标,以此恢复低置信度检测稀疏图整个feature map目标相似度
  • 相关阅读:
    三种常见的存储类型
    G口服务器的作用是什么?
    新手上云指南
    企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势
    Java中的set集合如何理解——精简
    Go语言:使用 GVM 搭建可维护的 Golang 开发环境
    设置按键中断,按键1按下,LED亮,再按一次,灭按键2按下,蜂鸣器响。再按一次,不响按键3按下,风扇转,再按一次,风扇停
    java Map集合基本功能
    FusionCharts Suite XT v3.19 Crack
    leetcode day12 相同的树
  • 原文地址:https://blog.csdn.net/wjpwjpwjp0831/article/details/125470648