FV算法

Fisher Vector(FV)是一种图像/视频feature encoding和pooling的算法;

1.算法

(1)对图像提取T个descriptor,每幅图像可以表示为:

                                                                                                             

(2)假设所有图像的descriptor都满足独立等同分布,且为高斯混合模型分布(GMM),则每个descriptor满足以下的概率密度函数:

其中:

FV算法_第1张图片

PS:N是高斯分布个数;分别是每个高斯分布的权重,均值以及协方差矩阵;D是每个descriptor的维数;

        为了计算方便,设定协方差矩阵为对角矩阵,也就是

(3)从得到的所有的descriptor中选取部分进行GMM的训练,得到模型参数,维数为,减1是因为

(4)根据已经得到训练好的GMM模型参数,我们就可以求出每幅图像的概率密度函数:


(5)对参数进行求梯度求解,每一幅图像都可以得到维数为的梯度向量;

(6)标准化:为了避免不同维度的梯度变化范围不一致,需要进行normalization;

PS:1)在实际应用中,所求得的梯度向量中对高斯分布权重的维度给识别效果没有带来明显的提升,因此一般不考虑,也就是说最终的fisher vector只有2*D*N维;

        2)每幅图像的概率密度函数关于T的累加其实可以看成是一个全局pooling的操作;

2.实现

(1)假设有i = 1,2,...N个descriptor;每个descriptor有j = 1,2,...D个维度;全部有k = 1,2,...K个高斯分布;

(2)求出第i个descriptor满足第k个分布的后验概率:


(3)求出关于均值与方差的梯度:

FV算法_第2张图片

因此FV可表示为:

FV算法_第3张图片

PS:对于fisher vector目前已经有现成的工具包VLFeat可以使用了;

你可能感兴趣的:(计算机视觉)