Exploiting the Circulant Structure of Tracking-by-detection with Kernels [paper] [code]
目标跟踪CSK代码出自ECCV2012,其主要的贡献是在MOSSE的基础上使用了核函数,同时证明了核函数是循环矩阵,通过循环矩阵可以实现密集采样。
预备知识
- MATLAB自带插值方法介绍-MATLAB的imresize函数就使用双三次方插值方法实现的图片缩放。
- MATLAB自带插值方法基本使用方法
- imshow函数几个特殊参数
- 实循环对称矩阵性质-几个关于对称的知识是因为论文中提到核矩阵具有对称性
- 傅里叶变换的一些对称性质
- 傅里叶变换的对称性证明
- 实对称矩阵正定的一个充要条件
- 正定矩阵
- 酉矩阵
- 理解图像的傅里叶变换-下面这几个知识都是探究为什么fft之后图像的能量集中到了四个角。
- 傅里叶变换应用于图像处理
- 傅里叶变换在图像处理中的应用
- 二维傅里叶变换是怎么进行的
- 二维快速傅里叶变换
- 最小二乘推导
作者给出的整体思路
这张图片已经对CSK的整个思路梳理的很清晰。
几点理解
- 为什么说循环矩阵就可以实现在一张图片上对在搜索区域内的所有子窗口进行密集采样呢?
我的理解是:循环位移相当于目标框(上一帧得出的以目标中心范围,也可以理解为框的范围)不动,而在当前帧截取的图片(也就是搜索区域)动,每移动一次就可以求出目标框与搜索区域重叠部分的互相关值即C(x)y,这样互相关值越大,就说明越有可能是目标所在位置,这样就可以得出目标框与搜索区域每一部分的互相关值。 - 代码dense_gauss_kernel.m文件中有将零频分量移到频谱中心的操作,做以下说明:
通过输出mesh(x)与mesh(xf)可以看到x的能量集中在中心位置(其已经进行过加余弦窗处理),而xf的信号能量将集中在系数矩阵的四个角上。
这是由二维傅里叶本身性质决定的:若变换矩阵原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅里叶变换矩阵的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。表明了图像能量集中低频区域。
而MATLAB的fft函数进行傅里叶变换时,其变换矩阵原点就在左上角,因此造成了形成的傅里叶域内的图像能量集中在四角.这就导致了傅里叶变换后频谱图上的各点与图像上各点并不存在一一对应的关系,因此要将其对应回来(MATLAB官方说法是零频分量移到频谱中心),MATLAB官方给出的是使用fftshift函数,而本文作者在下面使用了circshift(ifft2(xyf),floor(size(x)/2))操作,实质上也是将零频分量移到频谱中心。只是fftshift更像是执行块操作(如果 X 是矩阵,则 fftshift 会将 X 的第一象限与第三象限交换,将第二象限与第四象限交换.),而circshift更像是一位一位的移动,直到移动到满足需要移动的位移数为止。 - 论文P11的Algorithm1的第三个函数function k = dgk(x1, x2, sigma)对于k的求解时除以了numel(x1),这是高斯核,而对于论文中求解的高斯核并没有这一项,论文中也没有解释为什么存在这一项,这里写下自己的理解:
首先要看到的一点是numel(x1)=numel(x2).
再就是解释这里为什么除以numel(x1):通过将除numel(x1)和不除两种情况下的mesh(k)输出和查看k的值分析,如若不除以numel(x1),那么除了中心点外在其他位置的k_i都无限趋近于0,k的输出值直接取了0,这就导致了核k会认为除了正好截取到目标,其他情况都认为目标出图找不到了,通俗解释就是跟踪中心点偏一点都不可以,鲁棒性太差。而除以numel(x)后,会将所有的值都在一个很小的范围内,k值输出更平滑,鲁棒性更好。使用dog1数据集进行测试验证了分析,可以看到,当dog1中dog移动不大时,都可以跟踪到,稍微有点偏移就跟踪丢失了。 - 由论文Eq.4可知C(u)v=
F
−
1
F^{-1}
F−1(
F
∗
(
u
)
F^*(u)
F∗(u)
⨀
\bigodot
⨀F(v)),也就是说C(y)x=ifft(F(xy))=ifft(F(x) .* F*(y)),可以看到只要执行ifft(F(x) .* F*(y)),就是对y进行了循环矩阵操作,同时求得y进行循环后其与x的互相关性,因为C(y)x是将y进行循环后求其与x的互相关性。
这在给出的源码中就是直接使用的频域内的公式,在时域内就相当于已经进行了循环位移,将时域的循环转至频域内实现。 - 此算法的重要参数求解都是在傅里叶领域内,是本文的创新点,也是速度快的一个原因。
- 相关滤波的循环矩阵密集采样缺点:在搜索半径很大时非常慢,因此不适用于很大的采样空间。总的来说,tracking-by-detection类的局部搜索有很缺点,尤其是相关滤波,对快速运动目标很难处理。
自己总结的论文及相关公式推导