现有的模式分类方法主要分为两类,一类是生成式方法,比如GMM,这类方法主要反映同类数据之间的相似度;一类是判别式方法,比如SVM,主要是反映异类数据之间的差异。fisher kernel是想要结合二者的优势(1,生成式方法可以处理长度不一的输入数据,2,判别式方法不能处理长度不一的数据但是分类效果较好。),将生成式模型用于判别式分类器中。
关于处理长度不一的数据,举例说明如下:
我们要对一个图片集 I=X1,X2... 中的图片做分类,考虑生成式的方法,GMM,是对每一幅图片 Xi=x1,...xT 的特征 xi 建模(每个 xi 是D维特征向量),T代表一幅图片中提取的特征点个数,所以T的大小变化,不影响GMM建模。但是判别式分类器如SVM中是要计算样本X之间的距离,如果每个X的特征点个数T不一样,那么他们的维度也就不一样,无法计算他们之间的距离。
论文《Exploiting generative models in discriminative classifiers》中对fisher kernel进行了理论上的一系列推导和阐述。论文《Fisher Kernel on Visual Vocabularies for Image Categorization》中fisher kernel被应用于图像分类,本文主要参考这篇。论文《Improving the Fisher Kernel for Large-Scale Image Classification》中对fisher vector做改进。
fisher kernel被应用于图像分类的主要思路是,用生成式模型(GMM)对样本输入进行建模,进而得到样本的一种表示(fisher vector),再将这种表示(fisher vector)输入判别式分类器(SVM)得到图像分类结果。fisher vector是fisher kernel中对样本特征的一种表示,它把一幅图片表示成一个向量。
本文主要关注fisher vector。
核方法可以定义一种基于核函数的判别式分类器,可表示如下:
所以需要确定 λ 和核函数 K(Xi,Xj) 就可以确定一种基于核的分类方法。其中 λ 可以通过做一些优化得到,而在fisher kernel中,就是利用fisher信息矩阵得到一个核函数来度量样本相似度。
对于一个核函数,有如下的形式:
这个 ϕX 就是fisher kernel中的样本表示方法,它就是fisher vector,它由fisher score归一化得到, Fλ 是fisher信息矩阵:
定义fisher score:
F−12λ 是用来对 Ux 做归一化的,所以 Fλ=UXUTX ,这里来证明一下这个归一化,记 V=UX :
所以核函数就有了如下分解形式:
至此,我们就能对一幅图片的特征点集合计算出fisher vector了。
首先定义:
求得 UX 后,就可以求 Fλ ,设F中对角线上的元素可以表示为 fwi,fμdi,fσdi , 通过简单的求期望运算就可以得到它们的值:
这里算得的矩阵F两个维度都是(2D+1)*N-1.
所以fisher vector
fisher vector的结果是对原图像特征升维了(从D到(2D+1)*N-1),它从图像的一种特征向量中挖掘了出更丰富的信息,最终对 ϕX 我们可以算得对均值和协方差的梯度:
可以看到,D维向量 xt 中的每一个值,都与均值和方差做运算,并加上权重,fisher vector中包含了原特征向量每一维的值,并且包含了生成式建模过程的结构性信息,对图片的表达更加细致。