DAT(NIPS 2018)视频目标跟踪论文笔记
1. 论文基本信息
- 论文标题:Advanced Attention-Based Deep Mutual Adjustment for Target Tracking
- 论文作者:Shi Pu from Beijing University of Posts and Telecommunications, along with other co-authors.
- 论文出处:NIPS 2018
- 在线阅读:https://arxiv.org/pdf/1810.03851.pdf
- 源码链接:https://github.com/shipubupt/NIPS2018
2. 概述
该研究在构建深度学习损失函数时引入了注意力正则化机制(attention regularization),并采用reciprocal learning方法进行反向传播训练以获得attention map。其生成的attention map将对跟踪过程中的分类得分产生影响,并最终构建出一种更加鲁棒的跟踪算法。
3. 研究动机
某些跟踪算法基于固定形态的空间加权构建注意力机制存在局限性,在应对目标显著运动时表现不佳
传统的视觉注意力跟踪算法采用特定形态的空间加权策略(例如:CF2采用了余弦窗函数策略,SRDCF采用了高斯函数策略), 这些传统的算法通常赋予中心区域较高的权重, 而将周边区域较低的权重分配给他们. 这一点可以通过以SRDCF为例来具体说明: 其空间加权策略如图所示(注释:由于SRDCF内部采用了惩罚权重策略, 所以图中的数值越高表示对应的惩罚值越大)

推测,在该种注意力机制下,在目标物体发生显著位移时会影响其跟踪效果(由于若目标发生显著位移,则会位于采样区域的边缘位置;当权重降低后就容易导致其被识别为背景区域)
一些跟踪算法通过引入额外的注意力机制来完成单一视频帧特征加权的任务,并在时间维度上表现出一定的局限性。
例如在STAM和HART跟踪算法中采用了额外注意力机制用于计算特征权重。然而在目标物体运动过程中这些权重主要基于当前帧的画面进行学习时侯难以聚焦稳定可靠的特征信息并且这些权重若出现轻微偏差可能导致分类错误。
4. 提出的方法
不同现有的注意模型通过额外组件生成关注数据。论文采用模型计算输入图像梯度信息作为注意力图。该研究将attention map用作训练阶段的正则化手段以增强分类器对外观变化适应的能力(这些区域被称为注意力)。在测试阶段主要依据深度网络输出得分进行目标定位。研究整体架构如图所示

论文提出的方法总体上可以分为四个步骤 :
输入一张训练图像后,在随后的过程中通过前向传播机制计算分类得分。
依据这些分类得分值,并采用反向传播法计算出针对输入图像的梯度信息以生成注意力图谱(其中,在此过程中反向传播并未更新模型参数仅用于生成注意力图谱)。
将上述注意力图谱设定为深度学习模型损失函数中的正则化项并持续进行模型优化(在此过程中反向传播操作会更新模型参数)。
在测试环节直接应用经过优化后的模型架构完成正向传递以实现目标物体检测任务
4.1 Attention Exploitation(对应总体步骤1 - 2)
基于一阶泰勒展开的方法可以用来描述CNN网络的前向传播过程
从公式(1)可以看出:
输入图像I在类别c中的得分与其对应的矩阵A_c中的元素值存在显著关联。
矩阵A_c中的元素值反映了输入图像I_0中各像素点对目标类别得分的具体贡献程度(其中目标区域像素点对得分提升贡献较高,而背景区域像素点则相对影响较小)。
这样就可以视作一个注意力机制,并且根据对 A_c 的定义分析可知其具有特定性
基于公式(2),该研究论文为了计算输出变量f_c(I)对输入变量I_0的偏导数值从而求得参数值A_c。其中包含两个主要步骤。
输入图像I_0, 经过正向传播过程计算得到预测得分为{f_c}\left( {{I_0}} \right).
基于卷积神经网络的链式法则(即链式法则)执行反向传播过程, 计算出目标函数f_c(I)对输入变量I_0的梯度值为\mathbf{A}_c, 其中\mathbf{A}_c即为目标函数f_c(I)对于输入变量I_0$的梯度值。
4.2 Attention Regularization(对应总体步骤3)
对于每个输入样本I_0来说,在论文中都会计算出两个attention映射:正向注意力映射与负向注意力映射。其中正向注意力映射为{A_p}, 负向注意力映射则为{A_n}. 基于公式(2),我们可以得到以下结论:
\left\{ \begin{gathered} 正向注意力映射{\text{ }}{\kern 1pt} {A_p}{\text{ }} = {\kern 1pt} {{\left. {{\partial {f_p}\left(I\right)} / {{\partial I}}}} \right|_{I={I_0}}}\\ 负向注意力映射{\text{ }}{\kern 1pt} {A_n}{\text{ }} = {{\left. {{\partial {f_n}\left(I\right)} / {{\partial I}}}} \right|_{I={I_0}}}\\ \end{gathered} \right.\tag{{3}}$
公式(3)对应的代码存在于官方源码中的run_tracker.py文件的train函数中,请具体参见以下内容。
...
posguided_grads=forwordgradients(model,batch_posimgids,batch_possamples,GBP,[0,10])
sumposguided_grads= torch.sum(torch.abs(posguided_grads) ** 2, 1)
...
negguided_grads=forwordgradients(model,batch_negimgids,batch_negsamples,GBP,[10,0])
sumnegguided_grads=torch.sum(torch.abs(negguided_grads) ** 2, 1)
...
针对正类样本(分类标签为y=1),论文中的注意力正则化方法可表示为:
R_{(y=1)} = \frac{\sigma_{A_p}}{\mu_{A_p}} + \frac{\mu_{A_n}}{\sigma_{A_n}} \tag{4}
其中\mu表示数据集的均值计算值,
\sigma表示标准差,
而\frac{\sigma_{A_p}}{\mu_{A_p}}
这一项即为positive attention map A_p
的标准差与均值之比(coefficient of variation, CV)。
这一指标反映的是数据分布的离散程度,
其数值越大则数据分布越分散。
基于此,
我们期望公式(3)中
positive attention map A_p
具有较低的标准差与均值之比,
而negative attention map A_n
则应具有较高的该指标值。
类似地,
针对负类样本(分类标签为y=0),
其注意力正则化方法可表示为:
R_{(y=0)} = \frac{\mu_{A_p}}{\sigma_{A_p}} + \frac{\sigma_{A_n}}{\mu_{A_n}} \tag{5}
论文源代码中的train函数采用了八个变量来进行表示:具体包括posgradmean, posgraddelta, posgradmean_1, posgraddelta_1以及neggradmean, neggraddelta, neggradmean_1, neggraddelta_1等。这一设计的原因在于:两个公式中的{\mu _{{A_p}}}并不相同(相应地,
\sigma _{{A_p}}也不同),这一点可以从以下推导中得到证实:对于A_n的情况则完全类似
...
posgradmean=torch.nn.functional.avg_pool2d(sumposguided_grads,[sumposguided_grads.size(1),sumposguided_grads.size(2)])
posgraddelta=(sumposguided_grads-posgradmean)**2
posgraddelta=torch.sqrt(torch.nn.functional.avg_pool2d(posgraddelta,[posgraddelta.size(1),posgraddelta.size(2)]))
...
posgradmean_1 = torch.nn.functional.avg_pool2d(sumposguided_grads_1, [sumposguided_grads_1.size(1), sumposguided_grads_1.size(2)])
posgraddelta_1 = (sumposguided_grads_1 - posgradmean_1) *
posgraddelta_1 = torch.sqrt(torch.nn.functional.avg_pool2d(posgraddelta_1, [posgraddelta_1.size(1), posgraddelta_1.size(2)]))
...
基于上述公式(4)与公式(5),论文提出了一种融合了注意力正则项的损失函数:
...
loss = criterion(pos_score, neg_score)
...
spaloss=(1e10*posgraddelta.sum())/(1e10*posgradmean.sum())+(1e10*neggraddelta.sum())/(1e10*neggradmean.sum())\
+(1e10*posgradmean_1.sum())/(1e10*posgraddelta_1.sum())+(1e10*neggradmean_1.sum())/(1e10*neggraddelta_1.sum())
...
thelamb=5
finalloss=thelamb*spaloss+loss
...
4.3 Reciprocative Learning(对应总体步骤3)
针对这一部分,在论文中所提出的往复学习(reciprocative learning)理论及其应用研究中
通过递归学习过程不断更新后端模型参数,在每一步迭代中使用当前迭代后的模型参数来预测当前帧的后续帧。
网络通过训练图像计算注意力映射。
在损失函数中引入了注意力正则化项后,在理想情况下使分类器能够更加关注目标区域的关键点区域特征。
论文以 Car4 视频为例进行实验对比分析:
与递归学习相比,在没有递归学习的情况下(即传统方法),两者之间存在显著差异性表现(如下图所示):

从上图可见可知,在论文研究的过程中,默认采用了reciprocative learning这一方法,在网络迭代更新的过程中其attention maps comprehensively span覆盖了目标区域的所有部分。Reciprocative learning的具体实现细节则体现在官方源码run_tracker.py文件中的train函数模块中,请参考以下代码片段:
...
finalloss.backward()
...
4.4 Tracking过程(对应总体步骤1 - 4)
论文的tracking过程主要包括预热阶段、实时检测以及优化过程三个部分。
(1) 模型初始化
在初始帧中,在围绕目标区域获取了包含有正类样例和负类样例的总计N₁=5,500个样本(其中判别标准是IoU值需超过或达到阈值)。接着将迭代次数设定为H₁=50次。对于每个样本的每次迭代过程均采用公式(6)所定义的损失函数进行训练。
(2) 在线检测(testing)
当视频捕捉到下一帧画面时,在上一帧确定的目标区域附近提取N_2=256个候选区域,并将这些候选区域依次输入至预训练好的CNN模型中进行前向推断。论文所描述的正向传播过程并未采用任何正则化技术。随后系统会计算每个候选区域对应的分数值,在所有这些分数值中选取最大的那个作为目标物体在当前帧中的定位依据。
(3) 模型更新
在完成上一阶段的在线检测流程后,
基于论文中采集的数据,
我们已经获得了目标在当前帧中的位置信息,
从而能够基于这些信息对这N₂=256个候选样本进行分类(采用IoU指标区分正负样本)。
在此基础上,
设定迭代次数为H₂=15,
并采用公式(6)对CNN网络进行训练工作。
值得注意的是,
在模型更新的过程中并非每一帧都需要执行该操作;
论文中规定每隔T=10帧才会进行一次参数更新。
该论文对相互学习法在跟踪效果方面的表现进行了深入探讨,并通过如图1所示的实验数据进行验证。

上图中,请注意:该矩形框以绿色显示代表ground-truth;另一个以红色显示的矩形框则表示算法估计的位置。通过观察该图可知:采用reciprocal learning方法后;跟踪器能够有效地在干扰场景下生成更为精确的响应图谱。
5. 总结
本文探讨了将注意力机制嵌入深度网络损失函数的可能性,并通过互惠学习(reciprocal learning)方法实现网络的全连接训练过程。该研究提供了基于注意力机制的新框架来优化目标跟踪系统,并实验结果表明该方法实现了良好的性能。
