本文是一篇很不错的关于目标跟踪算法的文章,收录于CVPR2018。
论文链接:https://arxiv.org/pdf/1804.04273.pdf
本文主要分析了现有的检测式跟踪的框架在模型在线学习过程中的两个弊病,即:
①、每一帧中正样本高度重叠,他们无法捕获物体丰富的变化表征;
②、正负样本之间存在严重的不均衡分布的问题;
针对上述问题,本文提出 VITAL 这个算法来解决,主要思路如下:
①、为了丰富正样本,作者采用生成式网络来随机生成mask,且这些mask作用在输入特征上来捕获目标物体的一系列变化。在对抗学习的作用下,作者的网络能够识别出在整个时序中哪一种mask保留了目标物体的鲁邦性特征;
②、在解决正负样本不均衡的问题中,本文提出了一个高阶敏感损失来减小简单负样本对于分类器训练的影响。
个人评价:本文思路明确,解决问题的方法新颖且有效,实验效果好,不愧是通过残酷的CVPR2018筛选后的精品文章!
①、既然本文是基于GAN思想的一篇文章,然而考虑到有些读者只是听说过GAN怎么怎么火,怎么怎么牛,其实并不太了解GAN是个什么东西,我就尽量简单通俗的说一下我对GAN思想的理解,用来理解这篇文章应该是够了(我也是现学现卖~为了看懂本文,特意去看了一下什么是GAN,已经懂GAN的大神请自动飘过这一段~~~)。
②、什么是GAN?
首先,假设我们有一个非常先进的测谎仪,这个测谎仪很强大,我们一说谎,它就能“哔~”一声,然而它不是完美的,他也是有漏洞的,只是我们难以发现。现在,我们的目标是做一个“说谎仪”,虽然我们本人没办法骗过测谎仪,但是我们可以通过训练一个说谎仪来说谎,并且希望这个说谎仪的谎话能骗过测谎仪就OK了。既然测谎仪很强大,那么我们在训练过程中就使用测谎仪,说谎仪没骗过测谎仪我们就fine-tune说谎仪,直到它战胜了测谎仪为止。
上述说谎仪和测谎仪博弈的过程就是GAN的主要思想。GAN有两个组件,分别为:生成器和判别器,这里,生成器就相当于刚刚说的说谎仪,判别器就相当于测谎仪。我们训练GAN的主要目的就是想在判别器足够强大的前提下,训练生成器让判别器认为生成器生成的样本就是“真”样本,也就是让说谎仪说一句谎话,希望测谎仪误认为这是真话,那么我们认为这个生成器(说谎仪)就训练成功或者说足够强大了。
③、一般GAN的数学表达:
(不要一看到公式就怂哈!放轻松,不复杂的~)
符号解释: G G 代表一个生成器, z z 是一个服从 Pnoise(z) P n o i s e ( z ) 分布的随机噪声,自然 G(z) G ( z ) 代表生成器 G G 对随机噪声 z z 的处理,D是一个判别器, x x 是一个服从 Pdata(x) P d a t a ( x ) 分布的真实样本;
解释:上述公式是一个损失函数,如果觉得 minGmaxD min G max D 难以理解,那我们就先去掉 minG min G ,当只有 maxD max D 的时候,上式可以理解为我要得到一个判别器 D D 使得后面那一坨最大,后面那一坨什么时候最大呢?当然是当 D(x) D ( x ) 和 D(G(z)) D ( G ( z ) ) 差异最大的时候,所以综上所述,当只有 maxD max D 时该损失函数的实际意义就是:我们希望得到一个 D D ,得到一个强大的最能区分 x x 和 G(z) G ( z ) 的 D D 。当然~上述公式就像人生一样,总需要一个强有力的对手 G G ,打破了原本安逸的 D D 的美梦, minG min G 的出现的实际意义是:即使在 D D 最牛的情况下,我也要得到一个 G G 来最小化上述损失,也就是尽量让 x x 和 G(z) G ( z ) 在面对强大的 D D 的时候也会看上去很相似!!从而~在这个公式中 D D 和 G G 就像太极中黑和白一样,相爱相杀,相互促进,谁也不服谁;
训练目的: D D 和 G G 相互博弈的最终结果就是, G G 能将服从 Pnoise(z) P n o i s e ( z ) 分布的随机噪声近似转换为服从 Pdata(x) P d a t a ( x ) 分布的真实样本 x x ,只有这个时候 D D 再强也没什么办法了~~~;
结果:训练结束后,我们扔掉 D D ,剩下的 G G 就是想要的东西了~他的作用就是给一个随机噪声 z z ,把它经过变换后与 x x 非常相似,以至于我们很难分辨一个图片 image i m a g e 是 x x 还是 G(z) G ( z ) ;
④、作者指出传统的GAN并不适合于直接用在目标跟踪任务中,主要有以下三点原因:
Ⅰ、在目标跟踪中,输入网络的数据不是随机噪声,而是一个从实际图片中采样得到的图像区域块;
Ⅱ、在目标跟踪中,我们需要有监督的训练分类器,而不是像传统GAN一样做无监督的训练;
Ⅲ、在目标跟踪中,我们最终的目的是获得分类器 D D ,而不是像传统GAN一样最终目的是获得 G G 。
①、由于基于检测式跟踪的框架存在每一帧中正样本高度重叠的现象,所以他们无法捕获物体丰富的变化表征,之前的基于深度学习的跟踪器们在丰富训练样本多样性上突出的工作较少。一般来说,分类器在学习过程中更加关注距离分类面较近的样本,也就是更具有判别力的样本。然而,(※※※INSIGHT※※※)在目标跟踪中,目标在各帧之间变化迥异,在当前帧认为最有判别力的样本,在后续帧中未必是最有判别力的,所以用当前帧训练的模型在后续帧中泛化能力可能较差,因此一些目标短暂的的部分遮挡或者平面外旋转可能造成模型更新漂移。所以,如何在特征空间中对正样本进行增强,从而在丰富目标的变化以更好更鲁棒的更新跟踪器模型,是跟踪器设计过程中的重要问题。(这一段不知道说明白没有~)
②、在目标跟踪问题的模型更新过程中存在明显的正负样本比例失调的问题(这个很好理解),因此如何使得跟踪器的更新更关注有判别力的样本,削弱那些很简单的负样本对跟踪器更新的影响,对跟踪器的鲁棒性至关重要!
①,本文在VGG-M模型基础上进行改进,在最后一个卷积层和第一个全连接层之间增加了一个产生式网络,从而达到在特征空间增强正样本的目的。具体的,产生式网络输入为目标特征,输出为一个mask矩阵,该mask矩阵作用于目标特征后表示目标的一种外观变化。通过对抗学习,该产生式网络可以产生能保留目标特征中最鲁棒部分的mask矩阵(说白了就是自动判断特征中哪部分是目标的鲁棒表达,哪部分对目标变化不鲁棒,干掉后者保留前者的智能mask矩阵)。最终,训练得到的产生式网络生成的mask矩阵可以对判别力强的特征进行削弱,防止判别器过拟合于某个样本。
(这里,可能会有人提出疑问,削弱有判别力的特征?有没有搞错?当然没有~听我解释:首先,我们要知道判别力强的特征和鲁棒性强的特征是不一样的,打个比方——假设我们要跟踪一个人脸,一开始都是正常的人脸,然后我突然在第100帧的时候往人脸上贴一个小的暴走漫画!那么,对于100帧来说,这个暴走漫画就属于判别力强的特征,因为他相对人脸其他部分来说边缘性强,而且只有人脸这里有这个漫画,其他地方都没有,在第100帧可以合理的认为有漫画的地方就是人脸,这就是判别力强的特征。而什么是鲁棒性强的特征呢?当然是眼睛,眉毛,鼻子,嘴之类的,因为他们始终属于人脸,并且大部分时候都是可见的,我们根据他们来判断一个目标框是不是人脸,从长远角度看是更可靠的,毕竟第150帧你可能撕掉了暴走漫画,但是你撕不掉鼻子吧~所以,我们希望判别器关注鲁棒性强的特征(因为它具有一般性),削弱判别力强的特征(因为它具有偶然性));
②、本文提出了一个高阶敏感损失来减小简单负样本对于分类器训练的影响,这个道理很简单,那些明明很容易被分类正确的负样本其实在训练过程中也会产生损失,然而不希望网络关注这些损失,因为关注他们反而会使得网络性能变差,实验证明,本文提出的新的损失函数不但可以提升精度,同时可以加速训练的收敛。
②、在解释网络结构之前先翻译几句作者对方法的重要阐述:
Ⅰ、我们将分类层看作为一个判别器,并且提出了一个用来进行对抗学习的生成器;
Ⅱ、一般来说,已有的GAN都是目的得到一个生成器,用来将一个随机分布转换为一个指定分布,不像已有的GAN方法,本文的目的在于获得一个对目标变化鲁棒的判别器;
③、网络简析:在特征提取和分类器之间增加了一个生成式网络 G G ,被用来产生加权的作用于目标的特征的mask矩阵(目的就是为了在特征层面丰富目标的多样性),mask矩阵为单通道的和特征分辨率相同的矩阵,与特征通道做点乘操作;
④、本文核心损失函数(坚持一下,快结束了):
符号解析: C C 代表目标经过VGG-M网络后得到的多通道的特征, G G 代表用于产生mask的生成式网络, G(C) G ( C ) 代表作用于 C C 后产生的mask矩阵, M M 代表在特征 C C 下理论上最优的mask矩阵(什么是最优?当然是让判别器犯错越明显就越优了!!!嗨~这个 M M 好坏啊~~~);
公式解析:上式的训练目的可以描述为: G G 想得到 C C 后尽力生成mask矩阵,使得 D D 很难判断 M⋅C M ⋅ C 和 G(C)⋅C G ( C ) ⋅ C 的区别,所以 G G 的目的是生成靠近于 M M 的mask矩阵,于此同时, D D 又想,即使在 C C 上增加了 M⋅C M ⋅ C 和 G(C)⋅C G ( C ) ⋅ C 干扰,我也要努力的区分出他们的不同,这样,有干扰的我都不怕,我还会怕你没干扰的吗?明显又是一个 G G 和 D D 相爱相杀的过程;
⑤、网络运行简述:当训练分类器 D D 的时候,提取目标特征 C C 后,不直接将 C C 送给分类器进行训练,而是先使用 G G 网络生成mask,mask作用于 C C 后在送到分类器 D D 中进行分类器学习。值得一提的是,最初 G G 根据 C C 生成随机的mask矩阵(因为初始状态下 G G 是随机的),且每一个mask矩阵都对应目标的一种外观变化,希望多个mask可以尽量覆盖目标的各种变化。通过对抗训练后, G G 会学会如何根据 C C 产生最难为最不利于分类器 D D 分类的mask(这个时候就很6了),这个时候的 G G 就是一个相对智能的了。当然~不要忘记了我们的 D D , D D 发现:我凑~ G G 变聪明了,那我也不能水了,我也要学一些鲁棒的特征来对抗 G G 了~就这样, D D 和 G G 就既像一对好基友相互促进,又像一对敌人相互为难。
⑥、训练 D D :参考⑤中描述;
⑦、训练 G G : D D 训练过后,给定输入图片,随机生成过个mask矩阵对输入图片特征进行干扰,使用 D D 对干扰图特征进行判别,选择损失最大的(即:干扰性最强的特征),设置该mask为④中的 M M ,有了 M M 和 D D 就可以训练④中损失啦;
⑧、再次强调:通过上述对抗学习,结果是分类器会更加关注鲁棒的特征,而对有判别力的特征关注较少;
⑨、(行啦行啦,完事儿啦~后面的仅供参观,不费脑筋了)
上个图欣赏一下本文作者对抗学习的成果:
在这个图中,偏向蓝色表示分类器很确定这里是啥,偏向红色表示分类器有点懵。从第二列可以看出,不经过对抗学习的结果,当这个脸转动了一下以后,分类器表示大部分地方他都很迷惑,相比之下,第三列可以看出,经过对抗学习的结果,即使目标平面外旋转了一下,分类器相比不经过对抗学习的结果更加确信目标区域是什么!
⑩、没了~损失函数太简单,不是本文的精髓~不讲
①、模型初始化:分两阶段
Ⅰ、In the first step we offline pretrain the model using positive and negative samples from the training data, which is from MDNet——额~说实话,这句话我没读懂啊~借助MDNet的力量???MDNet当前貌似被认为是犯规的力量啊~
Ⅱ、使用第一帧fine-tune网络——这是个常规操作;
②、在线监测:这里没啥好说的,一般基于检测的跟踪框架怎么做他就怎么做,唯一值得注意的是,检测过程中 G G 是不参与的,要明白, G G 只是为了更好的训练 D D 而存在的,检测过程你还来个 G G 污染我的检测样本,是要闹哪样?
③、在线更新:没啥好说的,从前一帧采集样本, G G 和 D D 相互玩耍~
①,OTB2013和OTB2015结果,去年还说ECO已经把这两个库做到了极致,现在有对手了:
②、速度:1.5fps,这还是在Tesla K40c GPU下(腾讯有钱啊!),幸亏没有实时,否则目标跟踪到此为止了~~~;