cvml's Blog

Computer Vision and Machine Learning

(ECCV2010)Improving the Fisher Kernel for Large-Scale Image Classification

     一般的图像分类首先要提取局部特征(feature),然后通过合适的方式将整个图像的所有特征表达出来(Representation),再将此表达作为输入给分类器(Classifier)以达到分类的目的,通常所用到的表达为bag-of-visual-words(BOV),有其固有的缺点。这篇文章中使用了Fisher Vector作为Representation,效果并不是很好,经过作者的两种改进方法,能够取得比BOV好的效果(只用SIFT特征和线性分类器)

     通常的BOV:图像的局部描述子提取后,每一个描述子被分配一个离其最近的visual word(存在于visual vocabulary中),这个vv是通过聚类(kmeans)一个很大的描述子集合得到的。初次hard-assignment外,还存在soft-assignment或者sparse coding或者spatial pyramids的分配方式。BOV的一大趋势是,将很多个features联合起来做,使用非线性SVM,这种方法的缺陷是局部特征的提取很耗时,并且非线性SVM比线性SVM慢很多。BOV还有一个缺陷是,描述子量化时的损失(descriptor quantization is a lossy process)。

     Fisher vector相比于BOV的优点,不局限于visual word的出现次数,还包括了其他的信息,描述子的分布。

     令\(X = \{x_t,t = 1,\dots,T\}\)为T个局部描述子(提取自一张图像),假设X服从概率密度函数\(\mu_\lambda\),\(\mu\)代表了所有的参数,所以X可以表达为此梯度向量

\[G_\lambda^X=\frac{1}{T}\nabla_{\lambda}log\mu_\lambda(X)\]

     此向量的维度只与\(\lambda\)中参数个数有关,与T的个数无关,'是转置,常用的kernel为

[tex]K(X,Y)=G_\lambda^X^'F_\lambda^{-1}G_\lambda^Y[/tex]

     \(F_\lambda\)是Fisher Information matrix,

\[F_\lambda=E_{x\sim\mu_\lambda}[\nabla_{\lambda}log\mu_\lambda(x)\nabla_{\lambda}log\mu_\lambda(x)^{'}]\]