菜鸟实习日记~day24(KCF)
今天终于狠下心把KCF看了。。。
科研:
我自己理解,论文的本意并不是在CF的基础上进一步扩展,而是做出结果后发现恰好与CF的形势相同,并且利用了kernel,所以将方法命名为KCF.
首先作者提出,更多的negative samples是非常必要的,所以本文采用了循环平移,以便获得更多的负样本。
1.初始方法 preliminary version
It demonstrated, for the first time, the connection between Ridge Regression with cyclically shifted samples and classical correlation filters. 它首次证明了岭回归与循环移位样本和经典相关滤波器之间的联系。另外,它提出了封闭形式的解决方案来计算所有循环移位的内核。
This enabled fast learning with O(nlogn) Fast Fourier Transforms instead of expensive matrix algebra. The first Kernelized Correlation Filter was also proposed, though limited to a single channel。但是限制在single channel内。
2.优化方法
mutiple channels:矩阵对角化
better than a linear filter:不进行特征的提取,(KCF) tracker based on Histogram of Oriented Gradients (HOG) features instead of raw pixels.
3.岭回归
岭回归的目标:The goal of training is to find a function f(z) =wTzthat minimizes the squared error over samples xi and their regression targets yi:
到傅里叶域中:
循环矩阵样本
后续变换部分详见论文或者KCF目标跟踪
最终得到
成功将矩阵相乘转化为点积。
多通道问题:
那么,按照传统的方式一张图像就提取出一个向量,但是这个向量怎么用啊?我们又不能通过该向量的移位来获得采样样本,因为,你想啊,把直方图的一个bin循环移位有什么意义啊?
所以论文中Hog特征的提取是将sample区域划分成若干的区域,然后再每个区域提取特征
提取了31个特征(最后一个0不考虑)之后,不是串联起来,而是将每个cell的特征并起来,那么一幅图像得到的结果就是一个立体块,假设划分cell的结果是,那么fhog提取结果就是,我们成31这个方向为通道。那么就可以通过cell的位移来获得样本,这样对应的就是每一通道对应位置的移位,所有样本的第i通道都是有生成图像的第i通道移位获得的。
所以分开在每一个通道上计算,就可以利用循环矩阵的性质了。
4.总结
KCF相对于其他的tracking-by-detection方法速度得到了极大的提升,效果也相对较好,思想和实现十分简单。
借上图来总结下KCF的过程,左图是刚开始我们使用红色虚线框框定了目标,然后红色实线框就是使用的padding了,其他的框就是将padding循环移位之后对齐目标得到的样本,由这些样本就可以训练出一个分类器,当分类器设计好之后,来到了下一帧图像,也就是右图,这时候我们首先在预测区域也就是红色实线框区域采样,然后对该采样进行循环移位,对齐目标后就像图中显示的那个样子 了,(这是为了理解,实际中不用对齐。。。),就是周围那些框框啦,使用分类器对这些框框计算响应,显然这时候白色框响应最大,因为他和之前一帧红色框一样,那我们通过白色框的相对移位就能推测目标的位移了。
然后继续,再训练再检测。。。。
------------------论文中还说到几点------------------------------
~对特征图像进行cosine window加权,这主要是为了减轻由于边界移位导致图像不光滑。
~padding的size是目标框的2.5倍,肯定要使用padding窗口,要不然移位一次目标就被分解重组合了。。。效果能好哪去。。
~对于标签使用了高斯加权
~对前后帧结果进行了线性插值,为了让他长记性,不至于模型剧烈变化。