Fisher vector學習筆記

1,背景

     現有的模式分類方法主要分爲兩類,一類是生成式方法,比如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。


2,fisher kernel

     核方法可以定義一種基於核函數的判別式分類器,可表示如下:

Snew=sign(iSiλiK(Xi,Xnew))

     Xi,Si 是訓練集中樣本i的值和它的label值,label值只能取+1和-1,也就是分成兩類,λi 是樣本i在訓練集中所佔的權重;
     XnewSnew 是一個新來的樣本值和分類器預測出得它的label值;
     這裏的K(Xi,Xnew) 是一個核函數,度量新樣本Xnew 和訓練集樣本Xi 之間的相似度。

     所以需要確定λ 和核函數K(Xi,Xj) 就可以確定一種基於核的分類方法。其中λ 可以通過做一些優化得到,而在fisher kernel中,就是利用fisher信息矩陣得到一個核函數來度量樣本相似度。

     對於一個核函數,有如下的形式:

K(Xi,Xj)=ϕTXiϕXj.

     這裏是一個內積的形式,我們將一幅圖片的特徵們X映射到一個新的特徵向量,也就是ϕX ,那麼這個內積就是這兩個新特徵向量ϕXi,ϕXj 的歐式距離,很直觀地反映了樣本i,j之間的相似度。

     這個ϕX 就是fisher kernel中的樣本表示方法,它就是fisher vector,它由fisher score歸一化得到,Fλ 是fisher信息矩陣:

ϕX=F12λUx.

     定義fisher score:
     

Ux=λlogp(X|λ).

     X服從分佈p,p的參數是λ ,在fisher kernel中,p是一個GMM,X=x1,...xT 是一幅圖片的特徵集合(可以用sift特徵),λ ={wi,μi,i,i=1...N },它是GMM的模型參數,wi 是GMM中第i個component的權重,μi,i 是均值和協方差,由高斯模型的原理可知這兩個都是向量,且和特徵向量xt 的維度一致,都是D維(如果xt 是一個sift特徵向量,那麼它們就是128維)。
     這個log似然函數對λ 的梯度,描述了參數λ 在p生成特徵點集合X的過程中如何作用,所以這個fisher score中也包含了GMM生成X的過程中的一些結構化的信息。

     F12λ 是用來對Ux 做歸一化的,所以Fλ=UXUTX ,這裏來證明一下這個歸一化,記V=UX :

[(VVT)12V]T[(VVT)12V]=VT[(VVT)12]T(VVT)12V=VT(VVT)1VVTV=1

     所以核函數就有了如下分解形式:

K(Xi,Xj)=UTXiF1λUXj

     這裏要求F1λ 是半正定的,所以給F求期望:Fλ=Ex(UXUTX).

     至此,我們就能對一幅圖片的特徵點集合計算出fisher vector了。


3,計算fisher vector

     首先定義:

L(X|λ)=logp(X|λ)=t=1Tlogp(xt|λ).

     由於一幅圖片中的特徵點是相互獨立的,所以:
p(xt|λ)=i=1Nwipi(xt|λ).

     pi 是GMM中第i個component的pdf,wi 是其權值,Ni=1wi=1.
component pi 的pdf是多元高斯函數,如下:
pi
     再定義特徵xt 由第i個Gaussian component生成的概率:
gamma ti
     首先對參數求偏導可得到:
UX=[L(X|λ)wi,L(X|λ)μdi,L(X|λ)σdi]T,i=1...N.

     其中
piandao
     注意這裏i是指第i個component,d是指特徵xt 的第d維,偏導是對每個component,對特徵每個維度都要計算,所以此時UX 的維度是(2D+1)*N,D是xt 維度,N是component個數。又由於wi 有約束iwi=1 ,所以會少一個自由變量,所以UX 最終的維度是(2D+1)*N-1.

     求得UX 後,就可以求Fλ ,設F中對角線上的元素可以表示爲fwi,fμdi,fσdi , 通過簡單的求期望運算就可以得到它們的值:
f
     這裏算得的矩陣F兩個維度都是(2D+1)*N-1.

     所以fisher vector

ϕX=[Xw,d,i,Xμ,d,i,Xσ,d,i]=[f1/2wiL(X|λ)wi,f1/2μdiL(X|λ)μdi,f1/2σdiL(X|λ)σdi].

     維度和UX 一樣,也是(2D+1)*N-1.

4,總結

     fisher vector的結果是對原圖像特徵升維了(從D到(2D+1)*N-1),它從圖像的一種特徵向量中挖掘了出更豐富的信息,最終對 ϕX 我們可以算得對均值和協方差的梯度:
g

     可以看到,D維向量xt 中的每一個值,都與均值和方差做運算,並加上權重,fisher vector中包含了原特徵向量每一維的值,並且包含了生成式建模過程的結構性信息,對圖片的表達更加細緻。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章