本文概览

本文是一篇很不错的关于目标跟踪算法的文章,收录于CVPR2018。

论文链接:https://arxiv.org/pdf/1804.04273.pdf

本文主要分析了现有的检测式跟踪的框架在模型在线学习过程中的两个弊病,即:
①、每一帧中正样本高度重叠,他们无法捕获物体丰富的变化表征;
②、正负样本之间存在严重的不均衡分布的问题;
针对上述问题,本文提出 VITAL 这个算法来解决,主要思路如下:
①、为了丰富正样本,作者采用生成式网络来随机生成mask,且这些mask作用在输入特征上来捕获目标物体的一系列变化。在对抗学习的作用下,作者的网络能够识别出在整个时序中哪一种mask保留了目标物体的鲁邦性特征;
②、在解决正负样本不均衡的问题中,本文提出了一个高阶敏感损失来减小简单负样本对于分类器训练的影响。

个人评价:本文思路明确,解决问题的方法新颖且有效,实验效果好,不愧是通过残酷的CVPR2018筛选后的精品文章!

GAN

①、既然本文是基于GAN思想的一篇文章,然而考虑到有些读者只是听说过GAN怎么怎么火,怎么怎么牛,其实并不太了解GAN是个什么东西,我就尽量简单通俗的说一下我对GAN思想的理解,用来理解这篇文章应该是够了(我也是现学现卖~为了看懂本文,特意去看了一下什么是GAN,已经懂GAN的大神请自动飘过这一段~~~)。

②、什么是GAN?
首先,假设我们有一个非常先进的测谎仪,这个测谎仪很强大,我们一说谎,它就能“哔~”一声,然而它不是完美的,他也是有漏洞的,只是我们难以发现。现在,我们的目标是做一个“说谎仪”,虽然我们本人没办法骗过测谎仪,但是我们可以通过训练一个说谎仪来说谎,并且希望这个说谎仪的谎话能骗过测谎仪就OK了。既然测谎仪很强大,那么我们在训练过程中就使用测谎仪,说谎仪没骗过测谎仪我们就fine-tune说谎仪,直到它战胜了测谎仪为止。
上述说谎仪和测谎仪博弈的过程就是GAN的主要思想。GAN有两个组件,分别为:生成器和判别器,这里,生成器就相当于刚刚说的说谎仪,判别器就相当于测谎仪。我们训练GAN的主要目的就是想在判别器足够强大的前提下,训练生成器让判别器认为生成器生成的样本就是“真”样本,也就是让说谎仪说一句谎话,希望测谎仪误认为这是真话,那么我们认为这个生成器(说谎仪)就训练成功或者说足够强大了。

③、一般GAN的数学表达:
(不要一看到公式就怂哈!放轻松,不复杂的~)
符号解释:GGG代表一个生成器,z" role="presentation" style="position: relative;">zzz是一个服从Pnoise(z)Pnoise(z)P_{noise}\left ( z \right )分布的随机噪声,自然G(z)G(z)G\left ( z \right )代表生成器GGG对随机噪声z" role="presentation" style="position: relative;">zzz的处理,D是一个判别器,xxx是一个服从Pdata(x)" role="presentation" style="position: relative;">Pdata(x)Pdata(x)P_{data}\left ( x \right )分布的真实样本;
解释:上述公式是一个损失函数,如果觉得minGmaxDminGmaxD\min_{G}\max_{D}难以理解,那我们就先去掉minGminG\min_{G},当只有maxDmaxD\max_{D}的时候,上式可以理解为我要得到一个判别器DDD使得后面那一坨最大,后面那一坨什么时候最大呢?当然是当D(x)" role="presentation" style="position: relative;">D(x)D(x)D\left ( x \right )和D(G(z))D(G(z))D\left ( G\left ( z \right ) \right )差异最大的时候,所以综上所述,当只有maxDmaxD\max_{D}时该损失函数的实际意义就是:我们希望得到一个DDD,得到一个强大的最能区分x" role="presentation" style="position: relative;">xxx和G(z)G(z)G\left ( z \right ) 的DDD。当然~上述公式就像人生一样,总需要一个强有力的对手G" role="presentation" style="position: relative;">GGG,打破了原本安逸的DDD的美梦,minG" role="presentation" style="position: relative;">minGminG\min_{G}的出现的实际意义是:即使在DDD最牛的情况下,我也要得到一个G" role="presentation" style="position: relative;">GGG来最小化上述损失,也就是尽量让xxx和G(z)" role="presentation" style="position: relative;">G(z)G(z)G\left ( z \right ) 在面对强大的DDD的时候也会看上去很相似!!从而~在这个公式中D" role="presentation" style="position: relative;">DDD和GGG就像太极中黑和白一样,相爱相杀,相互促进,谁也不服谁;
训练目的:D" role="presentation" style="position: relative;">DDD和GGG相互博弈的最终结果就是,G" role="presentation" style="position: relative;">GGG能将服从Pnoise(z)Pnoise(z)P_{noise}\left ( z \right )分布的随机噪声近似转换为服从Pdata(x)Pdata(x)P_{data}\left ( x \right )分布的真实样本xxx,只有这个时候D" role="presentation" style="position: relative;">DDD再强也没什么办法了~~~;
结果:训练结束后,我们扔掉DDD,剩下的G" role="presentation" style="position: relative;">GGG就是想要的东西了~他的作用就是给一个随机噪声zzz,把它经过变换后与x" role="presentation" style="position: relative;">xxx非常相似,以至于我们很难分辨一个图片imageimageimage是xxx还是G(z)" role="presentation" style="position: relative;">G(z)G(z)G\left ( z \right ) ;

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

Motivation

①、由于基于检测式跟踪的框架存在每一帧中正样本高度重叠的现象,所以他们无法捕获物体丰富的变化表征,之前的基于深度学习的跟踪器们在丰富训练样本多样性上突出的工作较少。一般来说,分类器在学习过程中更加关注距离分类面较近的样本,也就是更具有判别力的样本。然而,(※※※INSIGHT※※※)在目标跟踪中,目标在各帧之间变化迥异,在当前帧认为最有判别力的样本,在后续帧中未必是最有判别力的,所以用当前帧训练的模型在后续帧中泛化能力可能较差,因此一些目标短暂的的部分遮挡或者平面外旋转可能造成模型更新漂移。所以,如何在特征空间中对正样本进行增强,从而在丰富目标的变化以更好更鲁棒的更新跟踪器模型,是跟踪器设计过程中的重要问题。(这一段不知道说明白没有~)

②、在目标跟踪问题的模型更新过程中存在明显的正负样本比例失调的问题(这个很好理解),因此如何使得跟踪器的更新更关注有判别力的样本,削弱那些很简单的负样本对跟踪器更新的影响,对跟踪器的鲁棒性至关重要!

本文方法概述

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

②、本文提出了一个高阶敏感损失来减小简单负样本对于分类器训练的影响,这个道理很简单,那些明明很容易被分类正确的负样本其实在训练过程中也会产生损失,然而不希望网络关注这些损失,因为关注他们反而会使得网络性能变差,实验证明,本文提出的新的损失函数不但可以提升精度,同时可以加速训练的收敛。

本文方法——对抗学习in目标跟踪

①、先上网络结构图吧:

②、在解释网络结构之前先翻译几句作者对方法的重要阐述:
Ⅰ、我们将分类层看作为一个判别器,并且提出了一个用来进行对抗学习的生成器;
Ⅱ、一般来说,已有的GAN都是目的得到一个生成器,用来将一个随机分布转换为一个指定分布,不像已有的GAN方法,本文的目的在于获得一个对目标变化鲁棒的判别器;

③、网络简析:在特征提取和分类器之间增加了一个生成式网络GGG,被用来产生加权的作用于目标的特征的mask矩阵(目的就是为了在特征层面丰富目标的多样性),mask矩阵为单通道的和特征分辨率相同的矩阵,与特征通道做点乘操作;

④、本文核心损失函数(坚持一下,快结束了):

符号解析:C" role="presentation" style="position: relative;">CCC代表目标经过VGG-M网络后得到的多通道的特征,GGG代表用于产生mask的生成式网络,G(C)" role="presentation" style="position: relative;">G(C)G(C)G\left ( C \right )代表作用于CCC后产生的mask矩阵,M" role="presentation" style="position: relative;">MMM代表在特征CCC下理论上最优的mask矩阵(什么是最优?当然是让判别器犯错越明显就越优了!!!嗨~这个M" role="presentation" style="position: relative;">MMM好坏啊~~~);
公式解析:上式的训练目的可以描述为:GGG想得到C" role="presentation" style="position: relative;">CCC后尽力生成mask矩阵,使得DDD很难判断M⋅C" role="presentation" style="position: relative;">M⋅CM⋅CM\cdot C和G(C)⋅CG(C)⋅CG\left ( C \right )\cdot C的区别,所以GGG的目的是生成靠近于M" role="presentation" style="position: relative;">MMM的mask矩阵,于此同时,DDD又想,即使在C" role="presentation" style="position: relative;">CCC上增加了M⋅CM⋅CM\cdot C和G(C)⋅CG(C)⋅CG\left ( C \right )\cdot C干扰,我也要努力的区分出他们的不同,这样,有干扰的我都不怕,我还会怕你没干扰的吗?明显又是一个GGG和D" role="presentation" style="position: relative;">DDD相爱相杀的过程;

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

⑥、训练D" role="presentation" style="position: relative;">DDD:参考⑤中描述;

⑦、训练GGG:D" role="presentation" style="position: relative;">DDD训练过后,给定输入图片,随机生成过个mask矩阵对输入图片特征进行干扰,使用DDD对干扰图特征进行判别,选择损失最大的(即:干扰性最强的特征),设置该mask为④中的M" role="presentation" style="position: relative;">MMM,有了MMM和D" role="presentation" style="position: relative;">DDD就可以训练④中损失啦;

⑧、再次强调:通过上述对抗学习,结果是分类器会更加关注鲁棒的特征,而对有判别力的特征关注较少;

⑨、(行啦行啦,完事儿啦~后面的仅供参观,不费脑筋了)
上个图欣赏一下本文作者对抗学习的成果:

在这个图中,偏向蓝色表示分类器很确定这里是啥,偏向红色表示分类器有点懵。从第二列可以看出,不经过对抗学习的结果,当这个脸转动了一下以后,分类器表示大部分地方他都很迷惑,相比之下,第三列可以看出,经过对抗学习的结果,即使目标平面外旋转了一下,分类器相比不经过对抗学习的结果更加确信目标区域是什么!

⑩、没了~损失函数太简单,不是本文的精髓~不讲

运行细节

①、模型初始化:分两阶段
Ⅰ、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网络——这是个常规操作;

②、在线监测:这里没啥好说的,一般基于检测的跟踪框架怎么做他就怎么做,唯一值得注意的是,检测过程中GGG是不参与的,要明白,G" role="presentation" style="position: relative;">GGG只是为了更好的训练DDD而存在的,检测过程你还来个G" role="presentation" style="position: relative;">GGG污染我的检测样本,是要闹哪样?

③、在线更新:没啥好说的,从前一帧采集样本,GGG和D" role="presentation" style="position: relative;">DDD相互玩耍~

实验

①,OTB2013和OTB2015结果,去年还说ECO已经把这两个库做到了极致,现在有对手了:

②、速度:1.5fps,这还是在Tesla K40c GPU下(腾讯有钱啊!),幸亏没有实时,否则目标跟踪到此为止了~~~;

③、VOT2016结果:

太好了,没超过ECO和CCOT,否则做跟踪的可以考虑转行了;

VITAL: Visual Tracking via Adversarial Learning 阅读笔记相关推荐

  1. VITAL: VIsual Tracking via Adversarial Learning论文笔记

    本文是一篇很不错的关于目标跟踪算法的文章,收录于CVPR2018. 论文链接:https://arxiv.org/pdf/1804.04273.pdf 本文主要分析了现有的检测式跟踪的框架在模型在线学 ...

  2. 论文笔记VITAL: VIsual Tracking via Adversarial Learning

    论文笔记VITAL: VIsual Tracking via Adversarial Learning 1. 论文标题及来源 2. 拟解决问题 3. 解决方法 3.1 算法流程 4. 实验结果 4.1 ...

  3. CVPR 2018 VITAL:《VITAL: VIsual Tracking via Adversarial Learning》论文笔记

    理解出错之处望不吝指正. 本文模型叫做VITAL.作者提到,当前使用DNN的trackers的性能受限于两方面:(1).每一帧中的positive sample在空间上高度重叠,模型不能和好的捕获较好 ...

  4. CVPR2018跟踪算法VITAL的配置(VITAL: VIsual Tracking via Adversarial Learning)

    工程介绍地址: VITAL 代码下载地址: https://github.com/ybsong00/Vital_release 一.跟踪测试 1.运行compile_matconvnet.m编译mat ...

  5. 目标跟踪:VITAL: VIsual Tracking via Adversarial Learning代码运行

    代码地址:https://github.com/ybsong00/Vital_release 程序入口:demo_tracking.m 主要问题: github上给出的matconvnet是作者修改过 ...

  6. Ranked List Loss for Deep Metric Learning | 阅读笔记

    Ranked List Loss for Deep Metric Learning | 阅读笔记 这是CVPR2019上一篇度量学习的论文. 摘要 深度度量学习(DML)的目的是学习可以捕获数据点之间 ...

  7. Bayesian Compression for Deep Learning 阅读笔记

    Bayesian Compression for Deep Learning 阅读笔记 一.论文摘要 二.模型介绍 2.1 概述 2.2 变分贝叶斯和最小描述长度 2.2.1 变分推断 2.2.2 最 ...

  8. BEGAN: Boundary Equilibrium Generative Adversarial Networks阅读笔记

    BEGAN: Boundary Equilibrium Generative Adversarial Networks阅读笔记 摘要 我们提出了一种新的用于促成训练时生成器和判别器实现均衡(Equil ...

  9. T-PAMI-2021论文Semi-Supervised Multi-View Deep Discriminant Representation Learning阅读笔记

    提示:文 0.论文信息 题目:Semi-Supervised Multi-View Deep Discriminant Representation Learning 期刊: IEEE Transac ...

最新文章

  1. Hinton等人新研究:如何更好地测量神经网络表示相似性
  2. jQuery事件2——off取消事件绑定
  3. heroku_WhateverOrigin –与Heroku和Play对抗原产地政策! 构架
  4. linux 更改配置文件 禁止ssh,配置linux用户实现禁止ssh登陆但可用sftp登录
  5. 相等运算符重载中的问题
  6. html区域背景,保存/恢复HTML5 Canvas的背景区域
  7. yolov5环境配置-Anaconda3 + Pytorch1.8 + Cuda10.2 + cuDnn8.2.0 + opencv3.2.0
  8. cad2010多个文件并排显示_cad多窗口显示插件(docbar)
  9. 判断推理——逻辑判断
  10. css怎么设置鼠标手势?
  11. 十六进制 转 二进制方法汇总
  12. perfmon 端口修改_Windows操作统的性能监控工具――Perfmon.doc
  13. ssh登录极路由后台_使用SSH来远程使用服务器上的可视化软件
  14. MicrosoftExcel函数
  15. 支持WIN7的VSCode版本
  16. AVPro Video 插件在unity中动态播放视频
  17. 使用Docker搭建大数据Hadoop环境
  18. python因子分析 ic值 函数_Python——因子分析(KMO检验和Bartlett's球形检验)
  19. KMPlayer播放m2ts 格式文件
  20. SAP那些事-理论篇-2-企业信息化的本质

热门文章

  1. python汉字同义词替换_python同义词替换
  2. STM32F103以SPI 驱动128*128的TFT彩屏,LCD驱动为ST7735s,程序使用CubeMX的HAL库开发方式,另外也做了标准库的程序移植
  3. 看了《疯狂的石头》后总结的教训
  4. 线上课程直播平台做推广的方式有哪几种?
  5. 容联?融云?环信?开发者怎么选
  6. qpython 3h怎么使用_上海玫瑰整形医院双眼皮双眼皮多少钱?怎么样?
  7. H3C——杭州华三通信技术有限公司
  8. 一图看懂yolov3网络
  9. OpenCV图像矫正
  10. 2021.11.20关于用递归来解决进制转换