Dense Structural Learning for Infrared Object Tracking

来源:互联网 发布:linux nginx开机启动 编辑:程序博客网 时间:2024/06/05 22:45

   

    在刚刚过去的VOT-TIR2017红外目标跟踪挑战赛中,我们的DSLT跟踪算法获得了冠军。为此,VOT组委会副主席Michael Felsberg教授邀请我去参加10月28日ICCV上举办的VOT-Workshop并作12分钟的报告另加3分钟的问答,但是因为没有来得及办下签证导致此次威尼斯旅行计划泡汤,有点可惜。

    由于组委会认为去年的TIR比赛结果并没有达到令人满意的高度,因此今年的TIR比赛依然沿用了去年的红外图像数据集,在比赛一开始官方就贴出了这样的通知:


    VOT-TIR2017竟然把SRDCFir作为baseline,确实有点吓人。看看VOT-TIR2015和VOT-TIR2016的比赛结果就知道了,SRDCFir老大的地位一直没人能撼动得了。。。所以这届的TIR比赛注定是寂寞的:相较于前两年20多个参赛算法,以及VOT2017(可见光(彩色)图像目标跟踪挑战赛)50多个参赛算法,今年的TIR比赛仅有10个参赛算法,而且其中有4个跟踪算法:EBT、SRDCFir、BST、LTFLO是参加过VOT-TIR2016的,因此今年TIR比赛新加入的算法只有6个。有点意思的是,上述4个算法在TIR2016和TIR2017的评分(EAO)不尽相同,这有多种可能的原因:(1)由于数据精度丢失或者一些因素的存在,导致不同的电脑运行相同的程序可能会给出不同的结果,但是这种变化应该是非常细微的;(2)今年的评测方法与往年有了些调整,vot-toolkit程序有了一些修改;(3)一些算法是有随机性的,结果无法完全复制,但是好的算法在不同时刻运行的结果应该相差不大;(4)各个参赛者可能会对以往的代码进行某些细微调整,比如调了参数、换个feature或者解决了一些程序上的bug等。

    我们拿到了今年的winner,但是并不是太值得高兴的事,因为参赛算法少,而且我们的综合评分并没有显著高于SRDCFir。比赛后我改掉了代码中的一个小小的bug,把EAO提高到了0.4018,即使如此,也没有太大意思。

    只是我参加VOT-TIR比赛并不是瞄着第一去的,我的目的原本是跟踪效果前三即可,然速度要做到最快。可惜今年的VOT比赛取消了往年常用的速度度量EFO,理由是官方认为EFO受到硬件性能的影响。我使用vot-toolkit的过程中,发现EFO确实与平台性能有关,但是EFO仍然具有借鉴意义:我在2.3GHz的笔记本上得出某个跟踪器的EFO为35,在一个4.2GHz的台式机上得到对应的EFO为50+,虽然有明显差别,但是仍然在1倍以内。我们在提交完比赛结果的第二天就把DSLT算法写成论文投给了PRLetter,现在已经在线出版了:Dense Structural Learning for InfraredObject Tracking at 200+ Frames Per Second. 我们在4.2GHz的win10台式机上进行试验,vot-toolkit给出的EFO是110,对比VOT-TIR2016的结果,我们的速度显然已经远远超出大部分跟踪算法了。然后我们在vot-tir2016所有序列上跑一遍,给出的平均跟踪速度是215FPS(单线程,没有omp,没有gpu)。最近,我们对代码进行了一些优化,EFO已经达到了160了。我们在论文中指出,DSLT平均每帧的计算量大概是DCF(使用线性核的KCF)的1.5倍,前提是二者使用相同大小的training/detection image以及相同的特征表示。

   参赛用的DSLT算法的Matlab mex文件(Ubuntu x64 & Windows 7/10 x64)已经上传到了我的csdn资源了:http://download.csdn.net/download/yu_xianguo/10142414。第三方依赖库只有FFTW(一个Fortran语言写的开源傅里叶变换库)。代码是工程用的,暂无开源打算。(ps:今天才发现csdn资源已经没有0分的选项了,最少下载分是2分,其实我要这分数没啥用,但是想下载资源的童鞋还是要搞点资源分才行。。。)


    下面介绍一下DSLT的基本原理:

    (1)结构学习建模跟踪问题

    跟踪算法分成generative和discriminative,2012年以后人们普遍认为判别性方法更适合解决跟踪问题,它把跟踪问题建模为前景&背景的分类问题。最开始人们将传统的学习方法在线化,从而可以进行模型的迭代更新。这些方法一般是基于一个binary classifier,比如SVM、boosting、forest等,它们将目标看成1,将背景看成0,然后学习分类器,由此带来一个问题——对于那些与目标有一定重叠率的样本,不知道如何定义其标签。为了解决这个问题出现了MIL(多实例学习),但是解决得比较好的还是相关滤波器(CF)和结构学习方法(以Struck为例)。CF使用连续标签,每个样本对应0~1之间的一个实数(一般用高斯函数生成),所以可以按照样本与目标中心的远近随意分配标签。Struck则是将样本位置作为样本的标签,这就是说我们不再需要labeling这个过程了。综合来看,Struck与CF都解决了labelingnoise问题,但是Struck把样本位置纳入到待优化的目标函数中,相比CF,Struck的问题建模方式与跟踪问题的本质(寻找正确的目标位置)更加契合。    

    (2)使用密集特征地图进行训练和检测

    在线跟判别学习面临的一个主要问题是计算量受限,因此导致样本数量少和特征维度低,而密集特征地图(比如一副HOG图像)的使用很容易使得样本个数和特征维度都能达到较高的水平。相关滤波器(CF)将密集特征地图用于跟踪问题,取得了非常好的效果,但是人们应该意识到,常见的CF其实是非常简单的岭回归器,一个老早就有的简单的学习算法如今能够光彩照人,就是因为使用了密集特征表示。

    CF假设目标就是一个密集特征地图,而所有的训练样本都是由目标进行循环位移而得到,这就带来了boundary effect问题:一方面循环位移产生的样本不能代表真实的图像信息;另一方面,循环样本假设等同于将目标图像的上边缘和下边缘连接起来,将左边缘和右边缘连接起来,为了使得这些连接处过度平滑,必须要将边缘像素0化处理,这就是为什么使用余弦窗对目标图像加权,因此目标图像中仅仅只有中间一部分是有效的,这也是CF采集的样本比目标本身要大一些的原因之一,而扩大目标框又导致了背景噪声的引入,为了防止分类器过于偏向背景,CF中padding的大小设置必须十分谨慎。CF还有搜索范围小的问题,虽然这些问题陆陆续续得到了解决,但是新的解决方案无不牺牲了CF应有的令人羡慕的跟踪速度。在此,我还想说说CF另一个常被忽视的缺陷,这也是(据我所知)到目前为止未被解决的问题:CF不管是训练还是检测,采集样本图像时需要将目标至于样本框的中心,如果目标靠近图像的边界,则需要对超出图像范围的像素进行virtual padding,一般是用图像边界位置的像素值来代替。Virtual padding不仅产生了更假的样本,还将计算资源浪费在无意义的图像位置上,甚至缩小了实际的目标搜索范围。

    基于Structural-SVM(SSVM)的方法可以有效避免CF的诸多尴尬,但是只有一个问题:如何保证计算效率?Struck使用LaRank来求解,我发现LaRank确实是个好东西:第一收敛速度非常快,不需要迭代很多次;第二它将一个大的SVM学习问题分解为很多小的二次优化问题,二次优化是有解析解的,因此求解起来很方便。决定LaRank计算量的主要因素就是难样本挖掘过程(hard-negative-mining),如同Deformable Part-based Models(DPM)里的优化过程一样,难样本挖掘是要找到最难分类的那个样本,在跟踪问题中,这就意味着我们要将一个图像中所有的样本过一遍,找到每个样本的得分,从而发现谁是那个最难分样本。我发现在使用密集特征表示和线性核函数的情况下,该过程等同于一次图像滤波操作,可以借助FFT快速求解。由此,问题就解决了大半了。

    由于ssvm的学习不像CF那样每次更新时要求目标位于样本框正中间,所以检测时候用到的特征地图可以直接用于更新阶段,而检测过程得到的分类器响应地图可以用于LaRank第一步的hard-negative-mining,这又帮我省了好多计算量。另外,我们对LaRank的优化过程进行细化,发现里面很多变量的更新都可以用迭代的方式来解决,而不是每当分类器系数发生一点变化就要从头算起。

    总而言之,我们将密集特征表示高效率地融入到在线结构学习跟踪框架中。

    (3)对目标样本进行空间加权


    我们先回顾一下SIFT描述子的建立过程,如图所示:(i)以特征点为中心选取一个图像区域;(ii)计算每个像素位置的图像梯度(幅值+方向);(iii)使用一个高斯函数对每个梯度幅值进行加权;(iv)统计各个subregin里的梯度方向直方图。文章Distinctive Image Features from Scale-InvariantKeypoints(IJCV04)中对高斯权值的描述是这样的:


    简言之,边缘像素更易受到背景的污染,高斯加权可以减少边缘像素的影响,降低描述子对特征点定位精度的敏感性。

    在另外一些工作中,我也看到了对样本进行空间加权所带来的好处,受此启发,我提出了一个加权核函数的概念:


    对两个样本向量 和 求(线性)内积,相当于是逐元素相乘然后求和。我们引入一个权值矩阵 ,将它插入到内积的公式里去,如图所示。可以证明当 的所有元素都非负时,K是一个有效的核函数。

    我们用一个与样本相同大小的2D高斯函数来生成空间权重,高斯方差设置为跟样本的尺寸成正比,经验来说,对于HOG特征,这个比例系数设置在0.2~0.5之间都OK。然后把该二维权重复制扩展到D个平面,使得权值矩阵与样本大小一致。

    很多人用SVM,一般要么选线性核(快),要么选高斯核(好),在跟踪问题中我们优先使用更快的方法,但是线性核的表达能力较弱,对于非线性分布的数据建模能力差。我们提出的加权核可以直接替换掉原来的线性核,在代码实现上基本没有变动,计算效率上也是跟线性核一样快,而实验结果表明使用加权核可以大大改善跟踪器的鲁棒性(精度没有明显变化)。注:鲁棒性指跟踪失败的次数;精度指跟踪成功时跟踪框与groundtruth的重叠率。

    (4)特征

    在CF(~2013年)以前,很多人觉得跟踪问题是检测问题的一个子问题,那时候人们喜欢把目标检测中常用的方法往跟踪领域搬,比如各种学习算法,各种特征表示。CF的流行给人耳目一新,因为这个方法并没有先在目标检测领域里面火起来,CF是先在跟踪领域大放异彩的,算是一个比较纯正的跟踪算法。但是长期以来,跟踪算法中使用的特征表示仍然是从检测领域拿过来的,比如HOG,比如CNN features。最近的CFNet(End-to-end representation learning for Correlation Filter basedtracking,CVPR17)在这方面做出了突破,它使用一个端到端的训练方法来同时学习特征和相关滤波器(个人理解,如有错误,请指正)。

    DSLT要做到high FPS,我首先想到的还是传统特征表示,浏览一遍跟踪方面的论文,发现基本上用的都是HOG和Color Names,因为要做红外图像,所以Color Names就不用考虑了,剩下的HOG,那是经典的密集形状描述子,从05年的Histograms of Oriented Gradients for Human Detection(CVPR05)开始,就在目标检测领域一统江湖了。HOG代码我写过N个版本,我觉得它非常像CNN features的计算方式,比如其中计算完图像梯度以后要做spatial pooling,通过累加的方式得到每个cell的梯度方向直方图,再比如用block normalization来消除图像亮度不均匀带来的影响等。HOG特征可以用于进行category level的检测,说明它对各种各样的类内变化是鲁棒的。而跟踪问题中我们需要做的是instance level的检测,所以直接用HOG来表示目标是不够合理的。而且红外图像与可见光图像有很多不同:(i)红外图像中没有阴影;(ii)噪声水平更高;(iii)文理信息偏少;(iv)没有锐利的边缘。其中第(iii)和第(iv)是因为红外图像主要受到物体热辐射的影响,而物体的辐射特性以及热量分布一般是沿着物体表面缓慢变化的。要做好红外跟踪,显然不应该毫不修改地选择传统的手工特征来用。

   我设计特征的出发点就是FHOG,这也是跟踪算法中用的最多的特征,最早来自于DPM(From Rigid Templates to Grammars: Object Detection with StructuredModels, Ross Brook Girshick的博士论文,2012),其中的F来自于芝加哥学的Felzensberg教授的名字的首字母,他是R.B.G.大神的博导。下面简单介绍一下FHOG:

    在HOG的计算过程中,一个梯度幅值M和对应的梯度方向θ∈[0,360),将θ离散化成nOrients*2个值,可以得到nOrients*2个特征平面,这些特征叫作contrast-sensitive features;将所有的θ(θ>180)映射为θ-180,则的θ范围变成[0,180),再将θ离散化成nOrients个值,可以得到nOrients个特征平面,这些特征叫作contrast-insensitive features。HOG把sensitive与insensitive特征合在一起,然后每个特征用相邻的4个block的能量(normalization factors)去归一化,最终得到3*nOrients*4个特征平面,当nOrients=9时,HOG有108层特征。为了减少计算量和增强抗干扰能力,很多应用都对HOG特征进行PCA降维。PCA算法确实可以减少计算量,但是PCA投影过程需要一次大矩阵乘法运算,这其实也是很耗时的。在DPM中,作者对PASCAL-VOC数据集包含的各种图像分别计算HOG-36(HOG-108中的contrast-insensitive部分),然后对所有的特征向量进行PCA,得到的特征向量和特征值如Fig.2.2所示,每个36维特征向量都重排成4*9的矩阵,使得每一行对应同一个normalization factor,每一列对应同一个orientation。注意其中前11个主方向,这些向量要么沿着行方向保持不变,要么沿着列方向保持不变。由此作者提出一个PCA-HOG的解析近似算法:将HOG特征沿着各个orientation和各个normalization分别进行求和,则HOG-36就压缩成nOrients+4=13维,类似地可以将HOG-108压缩成3*nOrients+4=31维。

    我去年7月曾花了一些时间去测试不同的手工设计特征在跟踪中的表现,用的基准跟踪算法是DCF,测试数据集是OTB50. 最后我发现:(i)RGB值和Gray值不稳定,会降低跟踪性能,Color Names则能改善跟踪性能;(ii)梯度特征以及在图像梯度上进行各种再处理、再组合得到的特征,都能提升跟踪器性能. 当时一时兴起造了个120维的特征表示(所有特征的计算均用到了spatial pooling技巧),将DCF在OTB50上的评分刷到了接近SRDCF的水平,要知道DCF是不带尺度的。

    在进行红外特征设计时,我有几个思路:(i)将梯度幅值信息纳入到特征中来。短时目标跟踪不像类别检测问题,目标的梯度强度是不会剧烈变化的;(ii)仅仅用contrast-sensitive HOG就够了。在跟踪过程中,目标区域内以及背景中各个梯度的方向不会忽然从θ变成θ+π所以HOG中contrast-insensitive部分是没有太大作用的。我通过在OTB50和TIR2016上的实验验证了这两点;(iii)我在一般的图像梯度(向右为+x轴,向下为+y轴)之外还计算了另一组图像梯度(向右下角方向为+x轴,向左下角方向为+y轴),然后分别计算HOG,同样地我在OTB50和TIR2016上验证了增加的一组HOG可以提高跟踪器性能。

    特征是物体的稳定外观描述。正是因为图像的像素值不够稳定,所以我们把样本变换到特征空间,然后在特征空间进行分类、聚类等各种操作会简单得多。在HOG的计算中有一个truncation过程,当某个特征量超出0.2时,就把它赋为0.2,这么做可以抑制特征空间里的噪声。类似地,我将跟踪算法最终用的特征进行了一次开根号处理,这么做虽然降低了特征的辨识度,但是能较好地抑制噪声。

    与检测问题不一样,跟踪问题中不需要特征具有那么高的鲁棒性,这是因为跟踪算法要处理的是连续图像序列,图像内容是连续缓慢变化的,而且检测问题中分类器一般是不更新的,而跟踪问题分类器需要在线调整,足够应对目标外观的变化。使用鲁棒性更好的特征肯定会提高跟踪器性能,但是复杂的高维的特征设计会造成额外的计算负担。DSLT使用的特征有28维,如果启用了motion channel(由相邻帧之间的绝对差计算而来,对静态背景图像非常有效),则是29维。我们从特征设计的一开始,就是希望能找到维度低、计算简单且跟踪效果好的特征表示。

    (5)部分实验结果

    这是论文里贴的图,是vot-toolkit给出的DSLT在vot-tir2016数据集上的评测结果:


    最近我将DSLT与DSST里的尺度滤波方法结合起来(Tracker称为DSLS,最后那个S表示Scale),将DSLT的motionchannel特征去掉,其它28维特征不变,然后跑了UAV123_10fps数据集(A Benchmark and Simulator for UAV Tracking,ECCV16),实验是由tracker_benchmark_v1.1执行的,结果如下图所示:


    Why UAV123_10fps?UAV123是一个包含~110个低空无人机航拍序列的集合,其中标注的跟踪目标共123个。我一直没有系统测试DSLT在彩色数据集上的表现,最近为了去国外参加一个不咋地的会议,我一拍脑袋决定把DSLT和DSST结合用一下。我觉得DSLT的强项在于搜索范围大,所以对于low framerate数据集应该会表现得更好,另外, UAV序列里目标尺度变化较大,这样能凸显DSST的尺度估计的作用。在跑这个数据集的时候,我没有任何调参,就那么一遍下来,结果还可以。。。


原创粉丝点击