前面的博文Deformable Parts Model (DPM) 检测加速算法简介中已经提到过,
[1] ECCV 2012 Exact Acceleration of Linear Object Detectors
一文借助FFT,将模型与HOG特征在空域中的卷积计算,转化为频域中对应位置元素的乘法运算,实现了DPM检测的加速。另外,这篇论文给出了整个DPM检测算法的C++实现,称为Fast Fourier Linear Detector,简称FFLD(点击下载代码),参考价值非常大。本文将对DPM算法检测流程进行简要回顾,然后简述[1]中采用FFT对卷积运算进行加速的方法FFLD,最后阐述如何在FFLD代码的基础上进行进一步的加速。
算法回顾
首先对DPM检测流程进行回顾,如图1所示。
图1 DPM检测标准流程
FFLD:采用FFT对卷积运算进行加速
[1]中对于为何FFT能够对模型与HOG特征的卷积计算进行加速做了较为详细并且浅显易懂的解释说明,这里不再重复。下面采用一维信号距离简单说明。
假设有两个长度为n的一维向量x和y,我们要在时域上直接计算这两个向量的卷积z,那么计算的复杂度是O(n*n)的。但是转换到频域计算就不一样了。时域上的卷积对应于频域上的相乘。对x和y进行FFT,得到X和Y,复杂度是O(nlogn)的,在频域上X和Y两个序列对应位置元素做复数乘法,得到频域序列Z,其复杂度是O(n)的,再将频域上的Z进行IFFT得到时域的z,复杂度是O(nlogn)的,所以利用FFT计算卷积能够将总的复杂度从O(n*n)降至O(nlogn),并且序列长度越大,降低的程度就越多。
假设我们有模型F和三个HOG特征层HOG0,HOG1和HOG2,F和这三个HO