原文链接
论文地址:https://arxiv.org/pdf/1904.07…
代码:pytracking 中有 dimp 的代码
摘要
与大多数其余视觉问题相比,跟踪须要在推理阶段在线学习鲁棒的特定于指标的外观模型。为了可能进行端到端的培训,指标模型的在线学习因而须要本身嵌入到跟踪体系结构中。因为这些艰难,风行的孪生网络仅预测了指标特色模板。然而,这种模型因为无奈集成背景信息而具备无限的判断能力。
咱们开发了一种端到端的跟踪体系结构,可能充分利用指标和背景外观信息来进行指标模型预测。通过设计专用的优化过程(仅需几次迭代即可预测功能强大的模型),咱们的体系结构源自有区别的学习损失。此外,咱们的办法可能学习判断损失自身的要害方面。咱们的跟踪器在 6 个跟踪基准上设置了最新技术,在 VOT2018 上 EAO 得分 0.440,运行 40FPS。
1. 简介
目前孪生网络学习框架仍受到重大限度。首先,孪生网络跟踪者仅在推断模型时利用指标外观。这齐全疏忽了背景外观信息,这对于将指标与场景中的类似对象辨别开来至关重要(请参见图 1)。其次,所学习的相似性度量对于未蕴含在离线训练集中的对象不肯定是牢靠的,从而导致没有泛化能力。第三,大部分孪生网络不能更新模型,有更新的算法求助于简略的模板均匀(DA-SiamRPN,烦扰物感知模型,到跟踪帧时,模板 z 和以后地位 $p_k$ 计算类似度之后,减去以后地位与检测帧中其余地位的类似度的加权和,能够更新模型进步精度)。与其余最新跟踪办法相比,这些局限性导致鲁棒性较差。
在这项工作中,咱们引入了一种以端到端的形式训练的代替跟踪体系结构,该体系结构间接解决了所有上述限度。在咱们的设计中,咱们从判断性学习(Discriminative Learning Loss)过程中吸取了灵感。咱们的办法基于指标模型预测网络,该网络是通过利用迭代优化过程从判断性学习损失中得出的。该体系结构能够进行无效的端到端训练,同时最大水平地进步预测模型的判断力。通过确保通过两个要害设计抉择起码的优化步骤来实现这一指标。
首先,咱们采纳基于最速降落法的办法来计算每次迭代的最佳步长。其次,咱们集成了一个模块,该模块能够无效地初始化指标模型。此外,咱们通过学习判断损失自身,将极大的灵活性引入了最终的架构。
咱们的整个判别式跟踪体系结构,以及骨干特征提取器,都通过标注正文的跟踪序列来进行训练,办法是将将来帧的预测误差降至最低。
2. 相干工作
RPN 具体介绍:https://mp.weixin.qq.com/s/VX…
SiamFC 具体介绍:https://mp.weixin.qq.com/s/kS…
SiamRPN 具体介绍:https://mp.weixin.qq.com/s/pm…
SiamRPN++ 具体介绍:https://mp.weixin.qq.com/s/a9…
孪生网络办法的一个要害限度是它们无奈将背景区域或先前跟踪的帧中的信息合并到模型预测中。
3. 办法
与在孪生网络跟踪器中一样,咱们的办法得益于端到端培训。然而,与 Siamese 不同,咱们的体系结构能够充分利用背景信息,并提供无效的伎俩来用新数据更新指标模型。
咱们的模型预测网络来自两个次要原理:(1)一个判断力强的损失函数能够领导网络学到鲁棒的特色;(2)一个 powerful 的优化器能够放慢网络收敛。
咱们的架构仅需几次迭代即可预测指标模型,而不会侵害其判断能力。在咱们的框架中,指标模型形成卷积层的权重,提供指标分类分数作为输入。
咱们的模型预测体系结构通过将一组带 bb 正文的图像样本作为输出来计算这些权重。模型预测器包含一个初始化程序网络,该初始化程序网络仅应用指标外观即可无效提供模型权重的初始预计。而后由优化器模块解决这些权重,同时思考指标样本和背景样本。通过设计,咱们的优化器模块简直没有须要学习的参数,以防止在离线训练期间过分适应某些类别和场景。因而,咱们的模型预测变量能够泛化到其余的对象,这在通用对象跟踪中至关重要。
图 2. 咱们的跟踪架构概述。给定带正文的训练集(左上),咱们应用骨干网络提取深度特色图,而后再附加卷积块(Cls Feat)。而后将特色图输出到由初始化器(initializer)和循环优化器模块(optimizer)组成的模型预测器 D。模型预测器输入卷积层的权重,该卷积层对从测试帧中提取的特色图执行指标分类。为了分明起见,此处未显示边界框回归分支。
咱们的最终跟踪架构如图 2 所示。咱们的网络包含两个分支:分类和回归。两个分支都从通用骨干网输出深层性能。
指标分类分支蕴含一个卷积块,提取出分类器对其进行操作的特色。给定一组训练样本和相应的指标框,模型预测器将生成指标分类器的权重。而后将这些权重利用于从测试帧中提取的特色,以计算指标置信度分数。
对于 bb 框预计分支,咱们利用基于重叠最大化(就是在指标检测网络上减少了一个 IoU 分支,用于预测 bb 与 gt 的 IoU,应用最大化 IoU 来调整 bb)的体系结构。它能够预测指标和一组 proposal boxes 之间的 IoU。
整个跟踪网络,包含指标分类,bb 预计和骨干模块,都在跟踪数据集中进行了离线培训。
3.1 Discriminative Learning Loss
判断性学习损失
论文提出了一个概念,就是单纯以图片对形式训练,传统的办法只会让网络过分留神于优化负样本的影响,而疏忽了学到的正样本的特色自身的判断能力。为了解决这个问题,他们用了 SVM 中应用的 hinge-like 损失,就是不仅将前景背景离开,更加使得两类之间有肯定的间隔,使得分类后果更好。
在本节中,咱们形容用于推导模型预测体系结构的判断性学习损失。咱们的模型预测器 D 的输出由特征提取器网络 F 生成的深度特色图 $x_j \in X$ 训练集 $S_{train}=(x_j,c_j)^n_{j-1}$ 组成。每个样本与相应的指标核心坐标 $c_j \in R^2$ 对。有了这些数据,咱们的指标是预测指标模型 $f=D(S_{train})$。模型 $f=D(S_{train})$ 定义为卷积层的滤波器权重,该卷积层的特色是辨别特色空间 x 中的指标外观和背景外观。
$$
L(f)= \frac{1}{|S_{train}|} \sum_{(x,c) \in S_{train}} ||r(x*f,c)||^2+||\lambda f||^2\tag{1}
$$
在这里,*
示意卷积,$\lambda$ 为正则化因子。函数 $r(s,c)$ 依据指标置信度得分 $s=x*f$ 和 gt 核心坐标 c 计算每个空间地位的残差。最常见的抉择是 $r(s,c)=s-y_c$,其中 $y_c$ 是每个地位的冀望指标分数,通常设置为以 c 为核心的高斯函数。然而,简略地求差通常会使模型对所有负样本回归校准的置信度得分为零,这须要学习将重点放在负面数据样本上,而不是获得最佳的判断能力。简略的差别并不能解决指标与背景之间数据不均衡的问题。
为了解决数据不均衡的问题,咱们应用空间权重函数 $v_c$。下标 c 示意指标的核心地位的依赖性,如 3.4 节所述。为了适应第一个问题,咱们依照反对向量机的原理批改了损失。咱们采纳 hinge-like loss,用 $max(0,s)$ 将背景区域中的负分数取零。因而,该模型能够自在地为背景中的简略样本预测较大的负值,而不会减少损失。另一方面,对于指标区域,咱们发现增加相似的 hinge-like loss $max(0,1-s)$ 是不利的,因为指标类和背景类之间的根本不对称,数值上不均衡。此外,在跟踪状况下,例如准确校准的指标置信度的确是无利的。
为了兼顾最小二乘回归和 hinge loss 的长处,咱们定义了残差函数:
$$
r(s,c)=v_c *(m_cs+(1-m_c)max(0,s)-y_c)\tag{2}
$$
指标区域 mask 由 $m_c$ 定义,其值在每个空间地位 $t \in R^2$ 有 $m_c(t) \in[0,1]$,即正样本就用正样本的 score,负样本的话就用大于零的。同样,下标 c 示意对指标核心坐标的依赖性。上式可能依据绝对于指标核心 c 的图像地位间断地将损失从规范最小二乘回归更改为 hinge loss。将 $m_c \approx 1$ 设置为指标,将 $m_c \approx 0$ 设置为背景会产生上述所需的行为。然而,如何最佳设置 $m_c$ 尚不分明,特地是在指标和背景之间的过渡区域。只管经典策略是应用试错法手动设置 mask 参数,但咱们的端到端公式容许咱们以数据驱动的形式学习 mask。实际上咱们的办法都是网络中本人学到的,并不是人工指定的:指标 mask $m_c$,空间权重 $v_c$,正则化因子 $\lambda$。
3.2 Optimization-Based Architecture
基于优化的架构
作者示意应用固定的学习率不仅会导致模型迭代次数多,取得的精度也不够现实,所以作者本人设计了一个梯度降落的形式,自适应的学到学习率。这里的策略就是心愿梯度降落沿着最陡的方向走。
咱们得出网络架构 D,它通过公式(1)最小化误差来预测滤波器 $f=D(S_{train})$。该网络是通过制订优化程序来设计的。从等式(1)和(2)咱们能够得出损耗 $\nabla L$ 绝对于滤波器 $f$ 的梯度的表达式。间接的抉择是应用步长来梯度降落。
$$
f^{i+1}=f^i-\alpha \nabla L(f^i) \tag{3}
$$
梯度降落的迟缓收敛次要是因为步长不变,所以步长不依赖于数据或以后模型预计。咱们通过推导应用了更简单的优化办法来解决此问题,该办法仅须要进行几次迭代即可预测出弱小的判断滤波器 $f$。核心思想是基于最速降落法计算步长,这是一种常见的优化技术。咱们首先在以后估计值 $f^i$ 处用二次函数来估算损失:
$$
L(f)\approx \tilde{L}(f)=\frac 1 2 (f-f^i)^TQ^i(f-f^i)+(f-f^i)T\nabla L(f^i)+L(f^i) \tag{4}
$$
在这里,滤波器变量 $f$ 和 $f_i$ 被视为向量,而 $Q^i$ 是正定方阵。而后,通过找到使梯度方向上的近似损失最小的步长来进行最陡的降落:
$$
\alpha=\frac{\nabla L(f^i)^T \nabla L(f^i)^T}{\nabla L(f^i)^TQ^i \nabla L(f^i)} \tag{5}
$$
在最速下降时,公式(5)用于计算滤波器更新的每次迭代中的标量步长。
二次模型(4)以及因而失去的步长(5)取决于 $Q^i$ 的抉择。例如,通过应用缩放的单位矩阵,咱们以固定步长来从新获取规范梯度降落算法。对于咱们的最小二乘公式(1),Gauss-Newton 办法提供了一个弱小的代替办法,因为它仅波及一阶导数,因而具备显著的计算劣势。因而,咱们设置 $Q^i=(j^i)^T J^i$,其中 $J^i$ 是 $f^i$ 处残差的雅可比行列式。实际上,矩阵 $Q^I$ 和 $J^i$ 都不须要显式结构,而是实现为一系列神经网络操作。
3.3 Initial filter prediction
初始过滤器预测
这个模型初始化就是将所有的 bbox 外面的货色取均匀,就像原始的 Siamese 网络一样,只不过在这里只用于初始化,前面还会训练更新。
为了进一步缩小预测模块 D 中所需的优化递归次数,咱们引入了一个经过训练的小型网络模块以预测初始模型评估 $f^0$。咱们的初始化器网络由一个卷积层和一个准确的 ROI 池化层组成。ROI 池化层从指标区域中提取特色并将其合并为与指标模型 f 雷同的大小。而后将合并的特色图对 $s_{train}$ 中的所有样本求平均值,以取得初始模型 $f^0$。与孪生网络跟踪器一样,此办法仅利用指标特色。然而,咱们的初始化程序网络仅负责提供初始估计值,而不是预测最终模型,而后由优化程序模块进行解决以提供最终的判断模型。
3.4 Learning the Discriminative Loss
学习判断性损失
这个局部就解释了刚刚公式 2 和其中的参数是如何学习的,$y_c$,$v_c$ 和 $m_c$ 都是依据与指标核心间隔决定的,通过转化到对偶空间求的。
在这里,咱们形容了如何学习残差函数(2)中的自在参数,这些参数定义了判断损失(1)。咱们的残差函数包含标签置信度 $y_c$,空间权重函数 $v_c$,和指标 mask $m_c$,此类变量通常是在以后的判断跟踪器中手动构建的,但本文的办法是从数据中学习这些性能的。咱们依据与指标核心的间隔对它们进行参数化。这是由问题的径向对称性引起的,其中绝对于指标的样品地位的方向意义不大。另一方面,到样品地位的间隔起着至关重要的作用,特地是在从指标到背景的过渡中。
因而,咱们应用径向基函数 $ \rho_k$,对 $y_c$,$v_c$ 和 $m_c$ 进行参数化,并学习它们的系数 $ \phi _k$。例如,地位 $t \in R^2$ 处的标签 $y_c$ 为:
$$
y_c(t)=\sum^{N-1}_{k=0}\phi^y_k\rho_k(||t-c||) \tag{6}
$$
咱们应用函数:
$$
\rho_k(d)= \begin{cases} max(0,1-\frac{|d-k\Delta|}{\Delta}), & \text {k<N-1} \\ max(0,min(1,1+\frac{d-k\Delta}{\Delta})), & \text{k=N-1} \end{cases} \tag{7}
$$
上述公式对应于结节位移为∆的间断分段线性函数。留神最终状况 $k=N-1$ 示意远离指标核心的所有地位,因而能够同等对待。咱们应用一个较小的值来实现目标背景过渡时回归标签的精确示意。相似地,别离应用系数 $v_k$ 和 $m_k$ 在(6)中对函数 $v_c$ 和 $m_c$ 进行参数化。对于指标 mask $m_c$,咱们通过 Sigmoid 函数将值限度为距离 [0,1]。
图 3. 学习的回归标签,指标 mask 和空间权重的图。每个数量的初始化以虚线显示。
3.5 离线训练
训练的时候是用多个图片对训练的 $(M_{train},M_{test})$,这些样本是从同一个序列中抽样进去的,对于给定的样本对,先是用特征提取网络提取到对应的特色 $(S_{train},S_{test})$,失去的特色输出到 D 网络中失去滤波器 f,这个文章的目标就是学到一个能够推广到没见过帧的特色。而后在 $S_{test}$ 上测试,而后计算一个损失:
$$
l(s,z)= \begin{cases} s-z, & \text {z>T} \\ max(0,s)), & \text{z<T} \end{cases} \tag{8}
$$
这里就是之前提到的 Hinge-like 损失函数,T 示意前景和背景,所以这里只惩办背景样本。这里他们为了晋升模型鲁棒性,对每次迭代的损失都做束缚,这就相当于一个两头的监督:
$$
L_{cls}=\frac{1}{N_{iter}} \sum^{N_{iter}}_{i=0} \sum_{(x,c) \in S_{test}} ||l(x*f^i,z_c)||^2 \tag{9}
$$
迭代次数也不是指定的,而是自适应的。上述公式中 $z_c$ 是一个 mask 核心位于 bb 的核心的高斯函数,在 bb 回归的中央,他们用了 IOUNet 来做。最终的损失函数为:
$$
L_{tot}=\beta L_{cls}+L_{bb} \tag{10}
$$
3.6 在线追踪
对于给定的第一帧,他们用数据加强形式增加了 15 个样本,而后用 10 次梯度降落来学习 f,在模型更新过程中,他们放弃最新的 50 个样本,每 20 帧更新一次。
给定带有正文的第一帧,咱们采纳数据加强策略来构建蕴含 15 个样本的初始汇合 $S_{train}$。而后应用咱们的判断模型预测架构 $f=D(S_{train} )$。得指标模型。对于第一帧,用 10 次梯度降落来学习。只有有足够的置信度预测指标,咱们的办法就能够通过向 $S_{train}$ 增加新的训练样本轻松地更新指标模型。通过抛弃最早的样本,放弃最新的 50 个样本。在跟踪过程中,咱们通过每 20 帧执行两次优化器递归实现更新,或在检测到烦扰波峰时执行一次递归来更新指标模型。
咱们的办法是应用 PyTorch 在 Python 中实现的。在单个 NVidia GTX 1080 GPU 上,当应用 ResNet-18 作为骨干时,咱们的跟踪速度为 57 FPS,对于 ResNet-50 为 43 FPS。
学习更多编程常识,请关注我的公众号:
代码的路