Learning a Neural Solver for Multiple Object Tracking 论文简读

图神经网络在多目标跟踪的应用

前言

  1. 该论文提出了一个基于图神经网络的离线多目标跟踪方法。
  2. 本文的方法能够同时学习不同帧之间检测的成本计算以及匹配。
  3. 达到了超越tracktor的sota效果。

贡献

  1. 提出了一个基于信息传递网络的多目标跟踪解决器,利用问题的自然图结构来同时执行特征性学习和结果预测。
  2. 提出了一个新奇的时间感知的神经信息传递更新过程,这受启发于多目标跟踪的经典图公式化。
  3. 我们显示了方法在三个公开基准上明显改善的sota结果。

跟踪流程

  1. 图构建:给定一个视频中目标检测的集合,构建一个图,其中节点对应了检测,边对应检测之间的连接。
  2. 特征编码:在边界框图像上应用一个卷积神经网络,初始化节点的外观特征嵌入。对于每一条边也就是不同帧的每一对检测,我们计算一个具有编码了他们的边界框之间的相对大小,位置以及时间差的特征的向量。然后将其输入到一个多层感知器中得到边的几何嵌入。
  3. 神经信息传递:我们在整个图上执行了一系列的信息传递步骤。直觉上,对于每一轮的信息传递,节点会与他们的连接边分享外观信息,边会与他们的伴随节点分享几何信息。最后,能够获得节点和边的更新嵌入信息,其包含了依赖于整个图结构的高阶信息。
  4. 利用模型对最后的边嵌入预测一个目标流变量的连续近似。然后,遵循一个简单的范式对他们进行四舍五入,获得最终的跟踪轨迹。

图构建

  1. 在基于检测的跟踪范式中,给定目标检测集合O={o1,o2,...,on}O=\{o_1,o_2,..., o_n\}O={o1,o2,...,on}作为输入,其中nnn表示了视频中所有帧的目标总数,每个节点被表示为oi=(ai,pi,ti)o_i=(a_i,p_i,t_i)oi=(ai,pi,ti),其中aia_iai表示了边界框里未加工像素,pip_ipi了检测的2D图像坐标,tit_iti表示了帧数。跟踪轨迹被定义为具有时间顺序的目标检测集合Ti={oi1,...,oini}T_i=\{o_{i_1},..., o_{i_{n_i}}\}Ti={oi1,...,oini},其中nin_ini是形成轨迹iii的检测的数量。多目标跟踪的任务就是找到这样一个跟踪轨迹集合T∗={T1,...,Tm}T_*=\{T_1,...,T_m\}T={T1,...,Tm}能够最好的解释给定的检测集。
  2. 这个问题被建模成一个无向图G=(V,E)G=(V,E)G=(V,E),其中V:={1,...,n}V:=\{1,...,n\}V:={1,...,n}E⊂V×VE\subset V\times VEV×V,每一个节点i⊂Vi\subset ViV代表了一个独立的检测oi⊂Oo_i\subset OoiO。对不同帧的每对检测构建一条边EEE,允许恢复有丢失检测的跟踪轨迹(对匹配且不在连续帧上的检测进行插值)。将给定检测集划分为跟踪轨迹的任务能够被视为将图中节点分组为不连续的组分。场景中的每个跟踪轨迹T∗={T1,...,Tm}T_*=\{T_1,...,T_m\}T={T1,...,Tm}能够被映射到图中的一组节点{i1,...,ini}\{i_1,...,i_{n_i}\}{i1,...,ini}
  3. 对图中的每条边引入了一个二元变量,如果某些边连接了属于同一条跟踪轨迹且在同一条跟踪轨迹上是时间连续的节点,那么其标签为1,否则为0。跟踪轨迹也能被表示为边的集合{(i1,i2),...,(ini−1,in)}⊂E\{(i_1,i_2),...,(i_{n_i-1}, i_n)\}\subset E{(i1,i2),...,(ini1,in)}E,对于不同时间戳上的每对节点(i,j)∈E(i,j)\in E(i,j)E,定义二元变量y(i,j)y_{(i,j)}y(i,j)如下:y(i,j):={1∃Tk∈T∗s.t.(i,j)∈Tk0otherwisey_{(i,j)}:=\left\{ \begin{aligned} 1 &\quad \exists T_k\in T_*s.t.(i,j)\in T_k \\ 0 &\quad otherwise\\ \end{aligned} \right.y(i,j):={10TkTs.t.(i,j)Tkotherwise
    y(i,j)=1y_{(i,j)}=1y(i,j)=1的时候边(i,j)(i,j)(i,j)被视为激活状态。因为每条跟踪轨迹是节点不相交的,即一个节点不会属于超过一个跟踪轨迹,因此y(i,j)=1y_{(i,j)}=1y(i,j)=1满足两个线性约束,对于每个节点i∈Vi\in ViV:∑(j,i)∈E s.t. ti>tjy(j,i)≤1\sum_{(j,i)\in E \ s.t. \ t_i>t_j}y_{(j,i)}\leq 1(j,i)E s.t. ti>tjy(j,i)1 ∑(i,k)∈E s.t. ti<tky(i,k)≤1\sum_{(i,k)\in E \ s.t. \ t_i<t_k}y_{(i,k)}\leq 1(i,k)E s.t. ti<tky(i,k)1
    这个不等式是流守恒约束的简化版本,强制了每个节点只能与最多一个过去帧的节点以及最多一个未来帧的节点相连。
  4. 为了实现图划分,该论文提出直接学习预测图中的哪条边被激活,即边上的二元变量的最终值,为此我们将这个任务视为边上的二分类任务,标签就是二元变量值yyy。总之,我们利用经典网络流公式化将多目标跟踪视为一个完全可学习的任务。

特征嵌入

  1. 外观嵌入:利用一个表示为NvencN_v^{enc}Nvenc的卷积网络直接从RGB数据上提取一个特征嵌入。对于每个检测oi∈Oo_i\in OoiO以及对应的图像块aia_iai,我们通过计算hi(0):=Nvenc(ai)h_i^{(0)}:=N_v^{enc}(a_i)hi(0):=Nvenc(ai) 获得oio_ioi对应的节点嵌入。
  2. 几何嵌入:对于时间戳ti≠tjt_i\neq t_jti=tj的检测oio_ioiojo_joj,我们利用其边界框坐标(xi,yi,hi,wi)(x_i,y_i,h_i,w_i)(xi,yi,hi,wi)以及(xj,yj,hj,wj)(x_j,y_j,h_j,w_j)(xj,yj,hj,wj)计算其相对距离和大小:(2(xi−xj)hi+hj,2(yi−yj)hi+hj,loghihj,logwiwj)(\frac{2(x_i-x_j)}{h_i+h_j},\frac{2(y_i-y_j)}{h_i+h_j},log\frac{h_i}{h_j}, log\frac{w_i}{w_j})(hi+hj2(xixj),hi+hj2(yiyj),loghjhi,logwjwi)我们然后将这个特征向量与时间差tj−tit_j-t_itjti以及相对外观∣∣Nvenc(aj)−Nvenc(ai)∣∣||N_v^{enc}(a_j)-N_v^{enc}(a_i)||Nvenc(aj)Nvenc(ai)相连接,然后输入到一个神经网络NeencN_e^{enc}Neenc来获得初始边嵌入h(i,j)(0)h_{(i,j)}^{(0)}h(i,j)(0)

信息传递步骤

信息传递网络

  1. G=(V,E)G=(V,E)G=(V,E)表示图,hi(0)h_i^{(0)}hi(0)表示每个节点i∈Vi\in ViV的节点嵌入,h(i,j)(0)h_{(i,j)}^{(0)}h(i,j)(0)表示每个边(i,j)∈E(i,j)\in E(i,j)E的边缘嵌入,信息传递网络的目标是在整个图上传播包含在节点和边特征变量的信息。
  2. 信息传递步骤被划分为两个步骤:一个是从节点到边(v→e)(v\rightarrow e)(ve),另一个是从边到节点(e→v)(e\rightarrow v)(ev),这个更新步骤连续执行一个固定步数LLL,对于每一个信息传递步骤l∈{1,...,L}l \in \{1,..., L\}l{1,...,L},通常形式的更新如下:(v→e)h(i,j)(l)=Ne([hi(l−1),hj(l−1),h(i,j)(l−1)])(e→v)m(i,j)(l)=Nv([hi(l−1),h(i,j)(l)])         hi(l)=Φ({m(i,j)(l)}j∈Ni)\begin{aligned}&(v\rightarrow e)\quad h_{(i,j)}^{(l)}=N_e([h_i^{(l-1)},h_j^{(l-1)}, h_{(i,j)}^{(l-1)}])\\ &(e\rightarrow v)\quad m_{(i,j)}^{(l)}=N_v([h_i^{(l-1)},h_{(i,j)}^{(l)}])\\ &\qquad \ \ \ \ \ \ \ \ \ h_i^{(l)}=\Phi(\{m_{(i,j)}^{(l)}\}_{j\in N_i})\end{aligned}(ve)h(i,j)(l)=Ne([hi(l1),hj(l1),h(i,j)(l1)])(ev)m(i,j)(l)=Nv([hi(l1),h(i,j)(l)])         hi(l)=Φ({m(i,j)(l)}jNi)其中NeN_eNeNvN_vNv代表了可学习的函数,[.][.][.]表示了连接操作,Ni∈VN_i\in VNiV表示了iii的邻域节点,Φ\PhiΦ表示了一个顺序不变的操作,即累加、最大值或者平均值。在LLL次信息传递步骤之后,每个节点包含了图中距离LLL处的所有节点的信息。因此,LLL代表了一个和卷积神经网络中接受域类似的角色,允许嵌入能够捕获检测相邻帧的信息。

时间感知的信息传递

我们将信息传递过程中的边临时嵌入m(i,j)(l)m_{(i,j)}^{(l)}m(i,j)(l)划分为两个部分,其中一个来自过去帧的节点,另一个来自未来帧的节点。我们将与iii相邻的来自过去帧和未来帧的节点分别表示为NifutN_i^{fut}NifutNipastN_i^{past}Nipast。同时,我们也定义了两个不同的多层感知器,即NvfutN_v^{fut}NvfutNvpastN_v^{past}Nvpast。在每一个信息传递步骤lll,对于每一个节点i∈Vi\in ViV,我们首先对iii分别计算来自过去和未来的所有邻域节点的边临时嵌入m(i,j)m_{(i,j)}m(i,j)
m(i,j)(l)={Nvpast([hi(l−1),h(i,j)(l),hi(0)])ifj∈NipastNvfut([hi(l−1),h(i,j)(l),hi(0)])ifj∈Nifutm_{(i,j)}^{(l)}=\{ \begin{aligned} &N_v^{past}([h_i^{(l-1)},h_{(i,j)}^{(l)},h_i^{(0)}])\quad if \quad j\in N_i^{past}\\ &N_v^{fut}([h_i^{(l-1)},h_{(i,j)}^{(l)},h_i^{(0)}])\quad if \quad j\in N_i^{fut} \end{aligned} m(i,j)(l)={Nvpast([hi(l1),h(i,j)(l),hi(0)])ifjNipastNvfut([hi(l1),h(i,j)(l),hi(0)])ifjNifut其中初始嵌入h(i)(0)h_{(i)}^{(0)}h(i)(0)被添加到计算之中。我们根据这些节点是节点iii的过去节点还是未来节点来分别合并这些临时嵌入:hi,past(l)=∑j∈Nipastm(i,j)(l)h_{i,past}^{(l)}=\sum_{j\in N_i^{past}}m_{(i,j)}^{(l)}hi,past(l)=jNipastm(i,j)(l)

hi,fut(l)=∑j∈Nifutm(i,j)(l)h_{i,fut}^{(l)}=\sum_{j\in N_i^{fut}}m_{(i,j)}^{(l)}hi,fut(l)=jNifutm(i,j)(l)
获得了过去特征嵌入hi,past(l)h_{i,past}^{(l)}hi,past(l)和未来特征嵌入hi,fut(l)h_{i,fut}^{(l)}hi,fut(l)之后,我们将其进行连接,然后输入到最后一个多层感知器NvN_vNv中,获得最终的更新后的节点特征嵌入:
hi(l)=Nv([hi,past(l),hi,fut(l)])h_i^{(l)}=N_v([h_{i,past}^{(l)},h_{i,fut}^{(l)}])hi(l)=Nv([hi,past(l),hi,fut(l)])

跟踪轨迹推理

  1. 将最后一个信息传递步骤LLL后的边嵌入输入到分类网络NeclassN_e^{class}Neclass中得到边对应的二元变量值,即这个边是否被激活。
  2. 因为NeclassN_e^{class}Neclass的输出是一个sigmoid节点的结果,即输出值在0和1之间,我们能够利用简单的舍入策略或者使用一个简单的线性程序来获得二元结果。

个人看法

  1. 该论文利用了改进的能够感知时间的图神经网络中的信息传递步骤,提高了边捕获信息的范围,在确定边是否被激活时,能够考虑一定帧范围内的节点信息,因此能够准确地匹配检测对。
仅依据现有的引用内容,无法直接提供《SU - YOLO: Spiking Neural Network for Efficient Underwater Object Detection》论文的下载途径。可以通过以下常见方式查找该论文下载: - **学术数据库**:利用知网、万方、维普、IEEE Xplore、ACM Digital Library、ScienceDirect等学术数据库,通过输入论文标题进行精确搜索。 - **预印本平台**:像arXiv、bioRxiv等预印本平台可能会有该论文的预印本版本可供下载。 - **论文作者个人主页**:在谷歌学术等平台查找论文作者,访问其个人主页,看是否有论文的公开下载链接。 以下是使用Python的`selenium`库在谷歌学术中搜索该论文的示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By import time # 设置Chrome浏览器驱动路径 driver_path = 'path/to/chromedriver' driver = webdriver.Chrome(executable_path=driver_path) # 打开谷歌学术 driver.get('https://scholar.google.com/') # 定位搜索框并输入论文标题 search_box = driver.find_element(By.NAME, 'q') search_box.send_keys('SU - YOLO: Spiking Neural Network for Efficient Underwater Object Detection') # 提交搜索 search_box.submit() # 等待页面加载 time.sleep(5) # 获取搜索结果 results = driver.find_elements(By.CSS_SELECTOR, 'h3.gs_rt') for result in results: print(result.text) # 关闭浏览器 driver.quit() ``` 注意将`'path/to/chromedriver'`替换为你本地Chrome浏览器驱动的实际路径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值