目标追踪论文之狼吞虎咽(1):VITAL算法

VITAL: VIsual Tracking via Adversarial Learning

参考:https://blog.****.net/aiqiu_gogogo/article/details/79982210
代码:https://github.com/ybsong00/Vital_release

一、摘要

当前已有的基于神经网络的目标追踪算法大都是基于这样一个两阶段框架:

  1. 先是在目标可能出现的位置附近找出一系列样本;
  2. 然后对这些样本进行分类,判断是属于目标还是背景。

由此会导致追踪算法在以下两个层面受到限制:

  1. 每一帧上的正样本在空间上高度重叠,难以捕获到大规模形变;
  2. 类不均衡:正样本数远远小于负样本。

为了解决上述两个问题,作者提出了基于对抗学习的VITAL算法:

  1. 为了增强正样本数据,使用一个生成对抗式网络(GAN)随机产生遮罩mask,这些mask作用在输入特征上来捕获目标物体的一系列变化。在对抗学习的作用下,作者的网络能够识别出在整个时序中哪一种mask保留了目标物体的鲁棒性特征。
  2. 为了解决类不均衡问题,作者提出了一个高阶的代价敏感损失函数,用于降低简单负样本的影响力,促进网络的训练。

二、VITAL算法

2.1 对抗学习

GAN原理:在训练过程中,生成网络G的目标是尽量生成真实的图片去欺骗判别网络D,而D的目标是尽量把G生成的图片和真实的图片区分开来。通过使用标准的交叉熵代价函数,模型的损失函数定义为:

L=minGmaxDV(D,G)

V(D,G)=ExPdata(x)[logD(x)]+EzPnoise(z)[log(1D(G(z)))]
式(1)

公式说明:

符号 含义
x 真实图片
z 随机噪声
D(x) 判别网络D判断真实图片x是否真实的概率
G(z) 生成网络G通过随机噪声z生成的伪造图片
D(G(z)) 判别网络D判断伪造图片是否真实的概率

(1)对于判别网络D而言,D(x)越接近于1越好,说明判别网络D明辨是非的能力越强,所以目标是使得V(D,G)变大;
(2)对于生成网络G而言,D(G(z))越接近于1越好,说明生成网络G以假乱真的能力越强,所以目标是使得V(D,G)变小。

作者指出传统的GAN并不适合于直接用在目标跟踪任务中,主要有以下三点原因:
Ⅰ、在目标跟踪中,输入网络的数据不是随机噪声,而是一个从实际图片中采样得到的图像区域块;
Ⅱ、在目标跟踪中,我们需要有监督的训练分类器,而不是像传统GAN一样做无监督的训练;
Ⅲ、在目标跟踪中,我们最终的目的是获得分类器D,而不是像传统GAN一样最终目的是获得G。

为了将GANs应用到检测追踪tracking-by-detection框架上,
目标追踪论文之狼吞虎咽(1):VITAL算法

作者在VGG-M网络的基础上设计了这样一个网络:在最后一个卷积层和第一个全连接层之间增加了一个生成式网络,从而达到在特征空间增强正样本的目的。具体的,生成式网络输入为目标特征,输出为一个mask矩阵,该mask矩阵作用于目标特征后表示目标的一种外观变化。通过对抗学习,该生成式网络可以产生能保留目标特征中最鲁棒部分的mask矩阵(说白了就是自动判断特征中哪部分是目标的鲁棒表达,哪部分对目标变化不鲁棒,干掉后者保留前者的智能mask矩阵)。最终,训练得到的生成式网络生成的mask矩阵可以对判别力强的特征进行削弱,防止判别器过拟合于某个样本。
(这里,可能会有人提出疑问,削弱有判别力的特征?有没有搞错?当然没有~听我解释:首先,我们要知道判别力强的特征和鲁棒性强的特征是不一样的,打个比方——假设我们要跟踪一个人脸,一开始都是正常的人脸,然后我突然在第100帧的时候往人脸上贴一个小的暴走漫画!那么,对于100帧来说,这个暴走漫画就属于判别力强的特征,因为他相对人脸其他部分来说边缘性强,而且只有人脸这里有这个漫画,其他地方都没有,在第100帧可以合理的认为有漫画的地方就是人脸,这就是判别力强的特征。而什么是鲁棒性强的特征呢?当然是眼睛,眉毛,鼻子,嘴之类的,因为他们始终属于人脸,并且大部分时候都是可见的,我们根据他们来判断一个目标框是不是人脸,从长远角度看是更可靠的,毕竟第150帧你可能撕掉了暴走漫画,但是你撕不掉鼻子吧~所以,我们希望判别器关注鲁棒性强的特征(因为它具有一般性),削弱判别力强的特征(因为它具有偶然性))

网络分成三大部分:
1. 特征提取器:VGG-M网络提取多通道的特征
2. 对抗特征生成器:产生能保留目标特征中最鲁棒部分的mask矩阵
3. 判别分类器:与GAN不同,本文的目的在于获得一个对目标变化鲁棒的判别器。

类似上面的损失函数,这里的损失函数定义为:

LVITAL=minGmaxDV(D,G)

V(D,G)=E(C,M)P(C,M)[logD(MC)]+ECP(C)[log(1D(G(C)C))]+λE(C,M)P(C,M)||G(C)M||2
式(2)

公式说明:

符号 含义
M 在特征C下理论上最优的mask矩阵(让判别器犯错越明显就越优)
C 目标经过VGG-M网络后得到的多通道的特征
对输入特征C做dropout
G(C) 生成网络G作用于输入特征C生成的mask矩阵

上式的训练目的可以描述为:G想得到C后尽力生成mask矩阵,使得D很难判断M⋅C和G(C)⋅C的区别,所以G的目的是生成靠近于M的mask矩阵,于此同时,D又想,即使在C上增加了M⋅C和G(C)⋅C干扰,我也要努力的区分出他们的不同,这样,有干扰的我都不怕,我还会怕你没干扰的吗?明显又是一个G和D相爱相杀的过程;

网络运行简述:当训练分类器D的时候,提取目标特征C后,不直接将C送给分类器进行训练,而是先使用G网络生成mask,mask作用于C后在送到分类器D中进行分类器学习。值得一提的是,最初G根据C生成随机的mask矩阵(因为初始状态下G是随机的),且每一个mask矩阵都对应目标的一种外观变化,希望多个mask可以尽量覆盖目标的各种变化。通过对抗训练后,G会学会如何根据C产生最难为最不利于分类器D分类的mask(这个时候就很6了),这个时候的G就是一个相对智能的了。当然~不要忘记了我们的D,D发现:我凑~G变聪明了,那我也不能水了,我也要学一些鲁棒的特征来对抗G了~就这样,D和G就既像一对好基友相互促进,又像一对敌人相互为难。

通过上述对抗学习,结果是分类器会更加关注鲁棒的特征,而对有判别力的特征关注较少;为了形象说明,以下图为例:目标追踪论文之狼吞虎咽(1):VITAL算法
对于视频帧(a),不使用对抗学习(GAN)的图(b)的熵分布和(c)很相似。然而,如视频帧(d),当目标经过部分遮挡和平面外旋转后,不使用GAN的图(e)的熵变大,意味着这时候的分类器对目标周围区域的判别变得很模糊了。这是因为训练器训练时专注于历史帧中有判别力的特征,当目标在测试帧中发生变化后,这些有判别力的特征将大大降低分类器的准确度。
而对比图(f),其熵分布就没有像(e)一样变化得很明显了,这是因为分类器是通过上述对抗学习,会更加关注鲁棒的特征,而对有判别力的特征关注较少;

2.2 代价敏感损失

首先让我们一起来回顾一下二分类中交叉熵(cross entropy,简称CE)损失的概念。记y{0,1}作为类标,p[0,1]是估计样本是正类(y=1)的概率,则样本是负类(y=0)的概率为1-p。交叉熵损失的公式为:
L(p,y)=(ylog(p)+(1y)log(1p))
交叉熵损失一个显著的问题是简单负样本,例如当p<<0.5且y=0时计算的损失值尽管小,但是如果存在很多简单负样本的话,最后累加起来还是会超过稀缺的正样本的损失值。在目标追踪中,由于正样本少,单简单负样本很多,就会出现类不平衡问题。简单负样本占据了交叉熵损失的绝大部分,主宰着梯度。
目前这个问题的解决方法包括复杂负样本挖掘、训练数据重赋权。想让一个分类器能够对代价敏感,最简单的方法是调整类的重要性。举个栗子,当正负样本数之比为1:100时,则设负类的重要性为0.01。注意到简单地加一个调整因子来平衡正负类的重要性并不能看出每个样本的简单或复杂程度。于是,作者引入了focal loss,在交叉熵损失中根据神经网络输出的概率p加了一个调整因子,改进后的损失函数为:
L(p,y)=(y(1p)log(p)+(1y)plog(1p))
有了上述公式后,作者又重新定义了模型总的误差函数为:

LVITAL=minGmaxDV(D,G)

V(D,G)=E(C,M)P(C,M)[K1logD(MC)]+ECP(C)[K2log(1D(G(C)C))]+λE(C,M)P(C,M)||G(C)M||2
其中,K1=1D(MC)K2=D(G(C)C)正是用来平衡训练样本误差的调整因子。

那些明明很容易被分类正确的负样本其实在训练过程中也会产生损失,然而不希望网络关注这些损失,因为关注他们反而会使得网络性能变差,实验证明,本文提出的新的损失函数不但可以提升精度,同时可以加速训练的收敛。