1,背景
現有的模式分類方法主要分爲兩類,一類是生成式方法,比如GMM,這類方法主要反映同類數據之間的相似度;一類是判別式方法,比如SVM,主要是反映異類數據之間的差異。fisher kernel是想要結合二者的優勢(1,生成式方法可以處理長度不一的輸入數據,2,判別式方法不能處理長度不一的數據但是分類效果較好。),將生成式模型用於判別式分類器中。
關於處理長度不一的數據,舉例說明如下:
我們要對一個圖片集I = X 1 , X 2 . . . 中的圖片做分類,考慮生成式的方法,GMM,是對每一幅圖片X i = x 1 , . . . x T 的特徵x i 建模(每個x i 是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
核方法可以定義一種基於核函數的判別式分類器,可表示如下:
S n e w = s i g n ( ∑ i S i λ i K ( X i , X n e w ) )
X i , S i 是訓練集中樣本i的值和它的label值,label值只能取+1和-1,也就是分成兩類,
λ i 是樣本i在訓練集中所佔的權重;
X n e w , S n e w 是一個新來的樣本值和分類器預測出得它的label值;
這裏的
K ( X i , X n e w ) 是一個核函數,度量新樣本
X n e w 和訓練集樣本
X i 之間的相似度。
所以需要確定λ 和核函數K ( X i , X j ) 就可以確定一種基於核的分類方法。其中λ 可以通過做一些優化得到,而在fisher kernel中,就是利用fisher信息矩陣得到一個核函數來度量樣本相似度。
對於一個核函數,有如下的形式:
K ( X i , X j ) = ϕ T X i ϕ X j .
這裏是一個內積的形式,我們將一幅圖片的特徵們X映射到一個新的特徵向量,也就是
ϕ X ,那麼這個內積就是這兩個新特徵向量
ϕ X i , ϕ X j 的歐式距離,很直觀地反映了樣本i,j之間的相似度。
這個ϕ X 就是fisher kernel中的樣本表示方法,它就是fisher vector,它由fisher score歸一化得到,F λ 是fisher信息矩陣:
ϕ X = F − 1 2 λ U x .
定義fisher score:
U x = ∇ λ l o g p ( X | λ ) .
X服從分佈p,p的參數是
λ ,在fisher kernel中,p是一個GMM,
X = x 1 , . . . x T 是一幅圖片的特徵集合(可以用sift特徵),
λ ={
w i , μ i , ∑ i , i = 1... N },它是GMM的模型參數,
w i 是GMM中第i個component的權重,
μ i , ∑ i 是均值和協方差,由高斯模型的原理可知這兩個都是向量,且和特徵向量
x t 的維度一致,都是D維(如果
x t 是一個sift特徵向量,那麼它們就是128維)。
這個log似然函數對
λ 的梯度,描述了參數
λ 在p生成特徵點集合X的過程中如何作用,所以這個fisher score中也包含了GMM生成X的過程中的一些結構化的信息。
F − 1 2 λ 是用來對U x 做歸一化的,所以F λ = U X U T X ,這裏來證明一下這個歸一化,記V = U X :
[ ( V V T ) − 1 2 V ] T [ ( V V T ) − 1 2 V ] = V T [ ( V V T ) − 1 2 ] T ( V V T ) − 1 2 V = V T ( V V T ) − 1 V V T V = 1
所以核函數就有了如下分解形式:
K ( X i , X j ) = U T X i F − 1 λ U X j
這裏要求
F − 1 λ 是半正定的,所以給F求期望:
F λ = E x ( U X U T X ) .
至此,我們就能對一幅圖片的特徵點集合計算出fisher vector了。
3,計算fisher vector
首先定義:
L ( X | λ ) = l o g p ( X | λ ) = ∑ t = 1 T l o g p ( x t | λ ) .
由於一幅圖片中的特徵點是相互獨立的,所以:
p ( x t | λ ) = ∑ i = 1 N w i p i ( x t | λ ) .
p i 是GMM中第i個component的pdf,
w i 是其權值,
∑ N i = 1 w i = 1.
component
p i 的pdf是多元高斯函數,如下:
再定義特徵
x t 由第i個Gaussian component生成的概率:
首先對參數求偏導可得到:
U X = [ ∂ L ( X | λ ) ∂ w i , ∂ L ( X | λ ) ∂ μ d i , ∂ L ( X | λ ) σ d i ] T , i = 1... N .
其中
注意這裏i是指第i個component,d是指特徵
x t 的第d維,偏導是對每個component,對特徵每個維度都要計算,所以此時
U X 的維度是(2D+1)*N,D是
x t 維度,N是component個數。又由於
w i 有約束
∑ i w i = 1 ,所以會少一個自由變量,所以
U X 最終的維度是(2D+1)*N-1.
求得U X 後,就可以求F λ ,設F中對角線上的元素可以表示爲f w i , f μ d i , f σ d i , 通過簡單的求期望運算就可以得到它們的值:
這裏算得的矩陣F兩個維度都是(2D+1)*N-1.
所以fisher vector
ϕ X = [ X w , d , i , X μ , d , i , X σ , d , i ] = [ f − 1 / 2 w i ∂ L ( X | λ ) ∂ w i , f − 1 / 2 μ d i ∂ L ( X | λ ) ∂ μ d i , f − 1 / 2 σ d i ∂ L ( X | λ ) ∂ σ d i ] .
維度和
U X 一樣,也是(2D+1)*N-1.
4,總結
fisher vector的結果是對原圖像特徵升維了(從D到(2D+1)*N-1),它從圖像的一種特徵向量中挖掘了出更豐富的信息,最終對 ϕ X 我們可以算得對均值和協方差的梯度:
可以看到,D維向量x t 中的每一個值,都與均值和方差做運算,並加上權重,fisher vector中包含了原特徵向量每一維的值,並且包含了生成式建模過程的結構性信息,對圖片的表達更加細緻。