作者:Qiang Wang
链接:https://zhuanlan.zhihu.com/p/34222060
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【本文略长】
RASNet网络架构
追逐极限的永远没有尽头。
我从没想过,有人可以超越ECO,但超越早晚会发生。
基于Siamese网络的视觉跟踪算法已经逐步占领跟踪领域。即使,他的性能远不如ECO;即使,他非常依赖于训练过程。但这都不能阻挡这个时代的方向,无休止的正则范式终究是要被数据驱动所取代。我相信,这是整个视觉跟踪的方向之一。简洁优雅的流水线实现,高效稳定的表现为他赢取了无数粉丝(Cited by 139)。或许还有人对相关滤波恋恋不舍,但人们终有一天,将会不再留恋相关滤波。
好啦,煽情结束,直接剖析,到底什么让SiamFC可以work的工作。Siamese类方法的核心是学习到一个可靠的,通用的相似性度量。在训练过程中成对的图像输入Siamese网络,通过训练过程中的监督使得目标物体在不同视角光照变换下取得较为一致的特征,而前景和背景得到较为不同的特征表述。
初识SiamFC
如果不进行深入的研究,你看到的SiamFC是这样的,
或者是这样的,
简直,又快又好有没有,GTX1050都能跑的飞起啊。这个时代,搞深度学习做跟踪肯定跟着这个方向啊。
分析SiamFC:可视化
但很快,我发现,表象之下,SiamFC究竟和我们想的是否一样呢。我们进一步的可视化了SiamFC在跟踪过程中的heatmap,结果令人大跌眼镜。(注意,左边是根据groundtruth选定的patch)
SiamFC在basketball视频中的heatmaps
我gif制作的时候每10帧画一次,有点鬼畜~~
取其中某一帧的结果看下,如果不靠高斯框,基本上无法跟上目标。在bolt和gymnastics系列视频中更为明显。
SiamFC并不能区分不同的物体,周边的具有语义的物体都会得到一个非常大的响应。
那么SiamFC是如何做到较为适宜的跟踪结果呢?
重点竟然在高斯窗上,通过高斯窗的平滑,SiamFC很快抑制了较远的目标。而跟踪库上的目标存在一个对这种算法很有利的分布,目标基本上都是画面中所关心的目标(摄像机追焦的对象)。跟踪的时候运动并不剧烈,周边的干扰物较少,不存在出画面重新搜索等问题。当这几个条件满足的时候,SiamFC的表现还是比较可观的。
总的来说,跟踪的目标不适合背景嘈杂以及剧烈的抖动。
如何改进?
那么摆在我们眼前的道路已经非常明显了,岂不是我们通过改善训练的过程,取得我们想要的好特征不就可以了么。数据量猛增,Data Augmentation猛上,反正别的领域的成功训练经验拿来怼不就可以了么。
但别着急,既然觉得训练的时候有问题,那我们看看训练集上的表现总可以了吧。
然而SiamFC在训练集上也存在同样的问题(训练集可以看做是oracle表现了)。那么很自然的一个推论是,你简单的增大训练集并不能得到更好的结果(要么是模型容量有问题,要么就是训练过程有问题)。
我们分析一下SiamFC训练的过程。原因在于两点。
- 其实你训练的是目标是让网络即对各种光照旋转等各种变化长时间鲁棒,又对不同目标产生较大差异,这本身就很困难,甚至有点矛盾。因为本身这种变化是时序上连续的,而当作为pair训练的时候,两个较远的目标可能本身就差异非常大(甚至单独拿出来根本看不出是一个物体)。整个目标和背景的分布无论是时间上还是空间上的分布都是具有流形分布的。流形的思想。 当大量的数据来的时候,网络干脆说咱们容量就这么点,还是捡着前背景分离来做吧,把前景背景分离开就差不多了,需要细节来比对的又比较少(困难样本比较少,数据均衡的问题,fine-grained的网络方法水一波),所以高层的特征并没有能学习到fine-grained的特征,甚至因为你给了各种光照,它干脆连颜色也丢了吧(疯狂的data argumentation反而会带来坏处),就这样,学习到的特征实际上得到的结果就是上面所看到的(感觉任何图片检索的方式训出来的网络加上高斯窗都可以等效SiamFC)。对于特征表述网络而言,你会让高层特征进行一个抽象,抽象出这个目标最本质的一些因素;同时,又希望目标对细节都有所考虑,例如,两个长得不太像的人(reid倒是通过数据驱动做的很不错),等等。
- 训练数据(训练方式)不均衡问题,这个在新工作中解释。(maybe focal loss水一波)
那么这么说,SiamFC岂不是一无是处,一塌糊涂?但,事实绝不是这样的。它的优势在于它足够的简单,可以说如果不考虑网络的搭建,抽象出来简单到了极致。
基本流程如下:
按照运动学模型提取crop,对其抽取特征,slide window做最近邻搜索(通过卷积实现)。(信息检索的其他方法果断可以拿来试一波)。
为什么和传统的方法相比少了分类器训练这个步骤,是因为算法本身可以从多个角度理解。如果把最近邻搜索的特征当做kernel,这个feature本身就是一个分类器。另一方面,特征足够强大的时候,自带判别效果,俗称万事靠特征。所以,对于SiamFC来说特征网络和判别网络自成一体。
介绍我的工作(RASNet & EDCF)
最近的两个工作就是针对以上问题,从框架的角度进行了改进。因为EDCF的投稿时间在CVPR出结果之前,所以EDCF和投稿CVPR的工作比较独立,耦合的部分比较少。此外,就是随着对问题的认知逐步发生改变,论文解决的问题也不一样。
两个工作分别干了什么事情,各自一句话描述如下。
RASNet使用三个attention机制对SiamFC特征的空间和channel进行加权,分解特征提取和判别性分析的耦合,用来提升判别能力。
EDCF使用自编码网络使得特征网络更多的关注目标的细节表述,结合Context-aware的相关滤波抑制掉周边的干扰,并且使得模型可以在线更新。
总的来说,这两个论文的出现是对SiamFC的问题不断理解的一个过程中。改进网络增加判别性,增加细节描述,和传统方法结合。
RASNet
Learning Attentions: Residual Attentional Siamese Network for High Performance Online Visual Tracking
问题提出
SiameseFC,这篇不用说了,必然是大热。至少我觉得影响力可以在扩展很多,最近我对他的分析表明,这个算法非常适合固定场景下的跟踪,他可以学习到什么是背景。想象一下,那个cross correlation是一种距离度量,在他的嵌入空间内,实际上有上亿张子图像去拉伸这个嵌入空间,得到的很大程度都可以理解为前景metric learning,后景直接剔除。所以感官上认为非常适合固定场景,这也是为什么深度学习不能再类似的库上训练的原因之一吧,你直接记下了哪些是背景,相类似的测试库场景差不多。前景就算有区分,背景都知道了,也算过拟合(对背景的过拟合)。这个算法如果硬要找缺陷,存在几个问题,第一点是网络的结果没有对齐,我不能理解为什么要乘以16,乘以stride是正确的,本身相关操作的起点就不是crop的左上角,真正的起点是以左上角为起点的小区域(exemplar)的中心。 此外就是cross correlation是对于每个位置贡献一样的,例如左上角和右下角以及中心的贡献都是相同的,这就是问题。
上次分析中【Qiang Wang:基于深度学习的目标跟踪算法是否可能做到实时?】,我们提出一个问题,SiamFC在进行交叉相关的时候,每一个位置对于前景的贡献是相同的。这样,对于要匹配的目标,绿色的框和蓝色的框的价值就是一样的了,这必然限制了模型的判别能力。
理论分析
为了印证这个观点(理论上找方法的缺陷),我们首先回顾通用目标跟踪算法(大多数回归或者分类的方法)。大多数的跟踪算法都可以表述为一个简单的核回归问题。
我们通过一些样本A,以及对应的标签y,学习得到分类器w。问题的解也非常容易:
基本上通用的跟踪算法都可以使用这个框架来求解(SGD什么的也都可以用)。而更本质的,我们是在通过标签信息来得到对偶变量 ,KCF只是通过循环移位的样本进行了频域加速。
那么很自然的想法是,这些对偶变量到底有什么含义?这里我可能无法给出非常准确的解答,但是结合SVM等的一些理解。可以给出一个感性认知:对于正样本,对偶变量就设置为正数;如果对于负样本,对偶变量就设置成负数或者0。当然实际的过程会比这个更复杂一些(SVM中需要是支持向量)。
那么转过头来看SiamFC,实际上就是对于所有的正样本,对偶变量均匀设置为1(w=A,判别器 or kernel=训练样本)。这种简单粗暴的方式使得判别性无法再这部分得到体现。KCF是通过一个闭式解去求解这个对偶变量,存在的问题是容易overfitting(因为你的判别性大量的依赖于在线的样本)。既然你一个公式就可以得到的闭式解,那么是否可以通过网络去求解呢?是的,我们要做的工作的本质就是让网络去预测对偶变量。(下面是别人用神经网络去解矩阵的逆,明显要难于跟踪这个解。)
我们将SiamFC的交叉相关详细展开:
对于每个位置的响应,其实是一个标准的相关,从公式对i和j的循环也可以看出,显然该方法无法对于每个位置的权重进行加权,我们提出了带权重的交叉相关(weighted cross correlation):
引入权重 来对位置和channel进行加权。注意到这种加权的方式等同于attention的机制
,所以在文章中将这种权重的学习转换成attention的学习。
具体操作(实验验证)
首先还是从实验分析结果开始。
跟踪问题一般的目标都是crop在中心的。所以最简单的一种方式直接学习一个Spatial Attention,即对于每个位置可以编码一个权重,固定的 (仅引入36个float参数)。
注意epoch(从第0到第50 epoch)
随着训练的进行,attention基本上和预想的一样,中间位置的权重得到提升,边缘的位置有所下降(略兴奋)。然而在线测试的精度却不如预想中有大幅改进。
无奈,为了增加网络的判别能力,一个通用的attention似乎并不够。CF根据每个模板图像进行学习,得到很好的判别器。那么我们也可以模仿这个机制,根据第一帧图像的feature,使用网络学习一个动态的attention。这部分网络设计(暴力实验,并没有什么好的方法论),应该掌握全局的信息,fc和编解码网络都可以实现这样的想法,在GAN-tracker(VITAL)里面貌似使用的是fc。
上述这个Spatial Attention的方法论来自于,预测变换参数要比直接预测输出更容易。同期的LSART中也使用了这个思想,构建了Cross-Patch Similarity ,对每个patch的重要性进行了编码,但是是通过在线优化的方式去做的。我的想法是,能让网络学习的就学习,尽量避免在线学习(aggressively learning the target sequence online )。
至于为什么提出这样一个残差的结构,主要思想来源于Residual Attention Network for Image Classification。补充材料里面有和Residual Attention Network for Image Classification 网络结构的对比。我们所提出的Residual Attention是针对跟踪问题专门设计的。General attention的学习不同于分类问题中的固定的1当偏执,因为分类问题的attention全图分布较为均匀,而跟踪中的attention的先验在中心。
此外是关于残差的理解,我的理解是:残差之所以称为残差,是希望残差学习的部分的均值近似为0。所以我把这种attention的和也称为Residual Attention。
有了上述的实验结果和理论基础,很自然的扩展就是加入channel attention的机制。
Channel attention的思路主要是来自于CSRDCF和SENet,在CSRDCF中就有在线的调整每个通道对于最终结果的权重。不过是通过在线优化的方式去做的,凡是可以在线优化做的必然可以用网络学习啊。
感谢SENet,虽然让他当Best paper似乎不太现实。但我真的觉得他们提出的这个网络部件真的是对于跟踪非常work,无论是解释性方面,还是实际效果(今年CVPR2018跟踪方向有至少3篇都有花一个小节去介绍这个部件RASNet,FlowTrack,Twofold,从流程图看,GAN Tracker应该也利用了这个部件的变种。但显然,每个作者对于问题的认知是不同的,思考的角度也有所不同。)。
关于这个部件的解释性(玄学):
1、这个部件可以理解为特征选择。我论文正文中说的是,如果这个部件输出进行二值化,那么就等同于特征选择。
2、另一个角度,跟踪大多只在网络的最后一层使用SENet模块,可以把每一层特征理解为一个独立的分类器/跟踪器,SENet的scale实际上是通过分析特征后(global pooling+2fc)对这些分类器进行加权ensemble。
最终,通过通过上述部件的结合,得到我们最终的模型。速度上只增加了3个小分支,并没有怎么影响速度,精度提升却很大。更多细节可以从文章中读到。
[2018/3/27] 最近几天看到的文章都是基于SRDCF派系的哈,各种方法肯定还是百花齐放,但基本上的结论是,今年的成绩单是实时算法在OTB2015上得有0.64的AUC,非实时的算法基本上都在0.67的AUC以上了。
EDCF
Do not Lose the Details: Reinforced Representation Learning for High Performance Visual Tracking
问题提出
SiamFC的高层特征只抽取了语义表述,却丢失了细节的表述(很容易漂移到表观差异巨大但属性类似的distractor)。一方面是网络深了之后自然而然的带来的细节的丢失;另一方面,训练的过程中只考虑了判别学习,细节信息本身是否可以保留就没有保障了。
解决方案
为了诱导网络更好的进行学习,我们在SiamFC的特征层后加入反卷积网络,还原原始图像,这样就强迫网络特征层包含底层信息。此外,self-encoder的使用,可以通过大量的图像进行无监督的学习,使得样本更加general(Ps:win神很早就用了这个方法dlt,但是没有在中间加判别监督)。实验也表明,encoder-decoder的结构对于最终的特征有利。
尽管加了这个方法,但,实验的结果还是不能令人满意。OTB上取得了明显的提升(3%),但是OTB的baseline还是太低。这就继续回到RASNet的问题上了,为什么KCF就可以很好地区分要跟踪的目标,而SiamFC就不具备这样好的性质呢。MDNet也可以跟的非常好的呀(判别力表现很好)。问题出在了,你学习到的是general的domain信息,如何迁移到当前video的domain并没有得到重视。
RASNet通过在第一帧图像分析得到适应于当前图像的attention来weight就是一种方式,类似于图像复原等领域的方法论(预测参数比预测输出要容易->所以预测对偶变量要好于直接预测分类器)。那么为了使得模型可以快速进行调整,显然DCFNet是不二选择了。之前VOT2017比赛的时候就有尝试过,使用DCFNet+SiamFC来底层特征的学习过程能取得非常好的结果(SiamDCF),所以之后的结合就从这个角度出发。同时论文中对DCFNet进行了扩展,加入了context-aware的CF(有闭式解,方法论:凡是有闭式解的快速传统算法,全部end2end做一遍)。
科研反思
以上差不多是这两篇文章的思路来源,很多时候,我都很容易只从这些细节入手,从底向上来做工作。这样也许可以做出一两篇文章,但是都不是足够的创新,经常会成为跟风者。跟风者只能喝汤,同时也很快会被淘汰,从更高层次去理解设计跟踪算法才是我们应该追求的目标。感谢我的老师给予我的指导。
未来方向
显然,跟踪会成为各种fancy的新方法(meta-learning,residual,GAN)的试验田。
但这也就带来了一个问题,除了自身的发展,总会落后于其他领域。
今年了解到的有三篇spotlight。其中一篇,3个oral/poster最后被AC定成spotlight,跟踪领域自身的影响力只能说有限了。
Long-term tracking:
long-term的根在哪可能不太清楚。但大名鼎鼎的TLD是不可不提的。虽然做单目标跟踪方向,但是看到他们公司给出的demo还是震惊。(DJI的跟踪也很棒。)
学术界这一两年也更多的关注long-term跟踪。从最初的UAV20L库,到RanTao的Tracking for half an hour,以及VOT组委会邮件通知的比赛预告。都表明,Long-term tracking可能会是下一代的趋势。
一方面是short-term有所饱和,另一方面真正工程使用的时候很多丢失遮挡问题在short-term中并不突出,这影响了实际使用。vot组委会的reset机制经常被别的领域所诟病了,这个自动reset根本无法在实际的跟踪中使用。这就引出了实际跟踪的时候,我们对于算法的期待,我们希望算法可以了解到目标什么时候被遮挡了,什么时候丢失了。丢失之后可以找回,这才是我们想要的跟踪。想要达到这种效果,显然不是目前的跟踪算法可以做到的。
Oxford和RanTao的实验室合作的long-term-tracking-benchmark,也值得关注。
目前项目名称Long-term tracking in the wild: a benchmark,缩写叫LTW,挺好哒。未来跟踪的测试集要是在百万这个级别,基本上速度慢的方法就刷不了了。(1M Frames / 100FPS=10k s≈3h,要是1FPS得跑2周了。)
检测跟踪走向统一
现在detection已经搞video detection了,很多时候检测都比跟踪快,真的比较忧虑啊。Detect to Track and Track to Detect 这样的论文只会越来越多,未来肯定会做成一个闭环。一整个系统才是有价值的。
好消息是,有很多公司开始参与跟踪这个领域,虽然在应用上,大多数都是以MOT形式落地,公司的参与一定程度上会促进跟踪领域的发展。
我了解的Sensetime,目前应该是掌握单目标跟踪领域精度最高,速度最快的算法。这边负责跟踪的leader
,提供的指导非常有价值;公司做的方向也非常前沿;同时这里还有非常多技术很牛的伙伴
and
(今年大四,论文评分3个oral/poster)。
福利环节,算法实现需要注意小细节
- 网络训练的初始化(随机 or pretrained?),想要学习的层的diversity是否大(局部层的学习率是否调大一些?),是否冻结一些层?
- 深度学习的算法,记得务必要写warm up(针对VOT测试而言);
- 跟踪的框请尽快加入回归模型,这是精度提升的巨大来源;
- 用e2e的方法刷OTB,请加入灰度化的数据增强;
- 如果你对算法需要对齐的box,VOT的旋转rect转换的时候并不一定是用对齐的比较好,minmax有时会表现更好(例如对角线的物体,minmax虽然引入背景,但不至于丢失太多信息);
- pytorch用户在做跟踪的时候,一定注意配置好环境,不同的环境跑出的结果可能差距巨大。