Hierarchical convolutional Features for visual tracking
Hierarchical convolutional Features for visual tracking
算法概要
这篇文章所提出的算法在本质上还是cf那一套框架,作者着重改变的是目标的特征描述。在以往的cf中,大家用的都是常用的物体特征描述,比如HOG,但是这种特征毕竟是manual的,当目标本身的appearance发生较大的改变时,manual型的特征不能很好的适应。注意到在物体检测识别领域中,采用CNN提取的物体特征,具有很好的鲁棒性。因此将CNN引入到tracking领域中。
算法总体流程:
1、在第t帧目标中心位置(x_{t-1},y_{t-1})附近确定searching window,用CNN获取searching window的特征,用双线性插值算法对特征进行upsample。
2、对用到的CNN的3、4、5层,都构造一个cf,由后向前,将每一层的特征与对应的cf进行卷积,计算confidence scoref_l,确定new center position(x_{t},y_{t})。
3、在新的中心位置周围提取CNN特征,用以跟新cf参数。
算法实现细节
一、用CNN提取convolutional features
作者采用已经用CNN训练好的卷积特征图(convolutional feature map),来对目标的appearance进行编码。其使用的CNN框架是目前效果很好的
随着CNN的前向传播,不同物体的semantic区别就会越明显,但同时会造成空间分辨率的降低和空间位置的模糊,如图:

这幅图指示了CNN层数与semantic和spatial detail的关系。可看出,在靠前的layer中,图像的空间信息有较好的保留,但是semantic却比较少,这有点类似于对图像进行Gabor滤波;在靠后的layer中,图像的语义信息较为丰富,但是空间信息却又缺失了很多。
在跟踪中,我们既希望特征能够有很好的semantic表达,又能保留准确的空间信息,因此作者想了个折衷的办法,即在用CNN提取目标特征时,不仅保留其最后一层输出结果,同时中间层的输出也保留下来,作者具体保留的是3、4、5三个layer。至于三种特征的使用,其实结合CF进去的,后面会再做介绍。
二、双线性插值进行upsample
在CNN中,由于pooling operation的存在,使得随着layer深度的增加,特征的spatial resolution(空间分辨率)会逐渐减小。比如,对于size为224x224的图像,在VGG-Net的第五层,其输出size只有7x7。这样的特征图太小,没法对目标进行精确的定位,因此需要对特征进行升采样,升采样的方式为:
这里 x代表升采样后的特征图,h代表升采样前的特征图, i代表位置(location),k代表 领域的特征向量。\alpha是插值的权值。
三、构造correlation filte
对于每一层的输出特征,(其size为M\times N\times D,M,N代表图像特征的width和height,D代表特征的channel,注意这里的channel不是咱们普通意义上的图像通道,这指的是特征的通道数,特征的通道数可以有很多,未必是1或者3)作者均构造了CF,构造CF的目标函数为:
上式中,y(m,n)代表在(m,n)处像素的标签,标签并不是二类标签,而是符合二维高斯分布:
将目标函数用FFT变换转换到频域,可以得到目标函数的最优解为:
其中 Y是y的傅里叶变换, \odot代表Hadamard Product。
当给定下一帧图像的searching region后,提取区域的特征( M\times N \times D),则相关性滤波的响应图为:
相关性滤波器的跟新策略:
四、coarse-to-fine translation estimation
上文说过CNN提取的特征,随着深度的增加,特征的语义信息增强,空间信息减少。所以作者采用CNN的3、4、5层的输出作为特征,并对每各层的输出均构造一个独立的CF:

由上图可知,首先求出第五层的最高响应位置:
然后根据下列关系求出前一层的最高响应位置:
即后一层的response影响前一层的response,并且其影响的范围是在后一层最高响应点的附近。
