標籤:

Fisher Vector

簡介

模式識別的方法可以分為生成式模型(Generative Model)和判別式方法(Discrimitive Model),前者注重類條件概率密度函數的建模(Naive Bayes、Gaussians),後者則直接關注問題本身——更聚集於分類(SVM、Logistic Regression、Nearest Neighbor)。具體來說,對於輸入x和類別標籤y:產生式模型估計它們的聯合概率分布P(x,y);判別式模型估計條件概率分布P(y|x)。更詳細地大家可以參考判別式模型與生成式模型、判別式模型和產生式模型 (discriminative model and generative model)。兩者更有優劣,而Fisher Kernel方法則同時具備兩種方法的優點,當然Fisher Kernel和Fisher Vector是不同的,但Fisher Vector+線性分類器可以等價於Fisher Kernel分類器。

Fisher Kernel

說到Fisher Vector,就必須先講解一下Fisher Kernel。Fisher Kernel相當於基於訓練一個Hidden Markov Model(HMM)(產生式模型),並為SVM(判別式模型)衍生出Fisher Kernel。Fisher Kernel從數據潛在的概率分布來評價其相似程度,假設數據項是一個序列,每個數據訓練一個HMM模型並構建Global HMM模型,計算new data項對當前模型「stretch」的程度。這個「stretch」的程度可以通過比較數據項關於給定參數下模型的log-likelihood的梯度來計算。

Definitions:假設P(x|	heta)是一個概率模型,其中x表示數據,	heta表示參數向量。Delta_	heta表示關於參數	heta的梯度操作符,log_eP(x|	heta)表示數據x關於參數	heta下模型的log-likelihood。Fisher scoreU_x就是數據x關於參數	heta下模型的log-likelihood的梯度:

U_x=Delta_	heta log_eP(x|	heta)

Fisher score給出一種嵌入特徵空間Re^N的方法,Fisher Kernel指的是這個空間下的inner product:

K(x_i,x_j)=U_{x_i}^TI^{-1}U_{x_j}

其中,I表示Fisher Information Matrix。Fisher Kernel提出了一種數據項x_ix_j相似度的度量方法,而且可以應用於任何kernel-based分類器,比如支持向量機。

Fisher Vector

Fisher vector本質上是用似然函數的梯度向量表示一幅圖像。梯度向量的物理意義就是描述能夠使模型更好地適應數據的參數變化方向,也就是數據擬合中參數調優的過程。那麼似然函數是如何生成的?

對於一幅圖像,假設有T個描述子(比如SIFT),那麼圖像I可以表示為X={x_t,t=1,...,T}。而且假設特徵的每個維度x_t符合一定的分布而且這些分布之間相互獨立,也就是i.i.d(獨立同分布)。假設獨立同分布的一個重要原因:可以將一個樣本(或圖像)的概率分布表示為各個維度上概率分布的乘積。那麼圖像I的概率分布表示:P(X|lambda)=prod_{i=1}^{T}p(x_i|lambda ) ,這裡的lambda表示參數集lambda={w_i,mu_i,Sigma_i,i=1,...,K} ,取對數:

L(X|lambda)=sum_{t=1}^{T}logp(x_i|lambda ) (1)

接下來需要K個高斯分布的線性組合逼近這些i.i.d,假設這些高斯混合分布參數也是lambda,於是:

p(x_t|lambda)=sum_{i=1}^{N}w_ip_i(x_i|lambda) (2)

p_i(x|lambda)=frac{exp{-1/2(x-mu_i)^TSigma_i^{-1}(x-mu_i)}}{(2pi)^{D/2}|Sigma_i|^{1/2}} (3)

其中,p_i表示高斯分布,w表示純屬組合的係數,sum_{i=1}^{N}w_i=1。D表示特徵向量的維度,這裡假設協方差矩陣Sigma_i^{-1}是對角矩陣,也就是特徵的不同維度之間相互獨立。

根據公式(2)、(3)對公式(1)求偏導,也就是梯度作為Fisher Vector。在此之前還需要定義一個變數:gamma_t(i)=frac{w_iu_i(x_t)}{sum_{j=1}^{K}w_ju_j(x_t)},表示Occupancy Probability,也就是特徵x_t由第i個高斯分布生成的概率。

根據公式就可以求出frac{partial L(X|lambda)}{partial mu_i^d}frac{partial L(X|lambda)}{partial sigma_i^d}frac{partial L(X|lambda)}{partial w_i},並對其進行歸一化(因為很多採用內積的判別式分類器要求我們輸入的必須是歸一化的特徵向量),具體計算公式可以參考Fisher Vector 通俗學習。

對偏導統一表示為:統一表示為G_lambda^X=Delta_lambda log u_lambda(X),這樣對數似然函數的梯度描述了模型參數為更好地擬合當前樣本參數應當改變的方向。也就是說,我們將一個長度不定的樣本X轉換成了一個具有固定長度的梯度向量,而梯度微量的維度等於模型參數的個數。由於每個特徵是D維,而需要K個高斯分布的線性組合,公式關於每個高斯模型的參數求導可得2*D+1維向量,而GMM模型可能會之和為1,帶來一維冗餘,則一個Fisher Vector的維數為(2*D+1)*K-1

其歸一化可以利用FIsher信息矩陣:F_lambda=E_{xsim u_lambda}[G_lambda^XG_lambda^{X}]

歸一化的梯度向量表示為:G_lambda^X=F_lambda^{-1/2}G_lambda^X

自然而然地,我們可以採用Fisher Kernel來衡量樣本X和樣本Y之間的距離,即表示為兩樣本之間的相似度:

K(X,Y)=G_lambda^{X}F_lambda^{-1}G_lambda^Y

Fisher Vector和BoW以及VLAD之間的關係,BoW僅僅量化了局部特徵屬於每個Voronoi區域的數量,VLAD則相當於對特徵之間的方法進行量化,而Fisher Vector則量化了更高級的一些統計特徵。可以參考機器學習筆記——Fisher vector coding以及[7]。另外,還有一些論文可以參考[4][5]。

參考:

  1. Fisher Vector 通俗學習
  2. Fisher vector學習筆記
  3. 機器學習筆記——Fisher vector coding
  4. cs.ucl.ac.uk/fileadmin/

  5. Fisher Kernels on Visual Vocabularies for Image Categorization. Florent Perronnin and Christopher Dance. CVPR 2007
  6. Improving the Fisher Kernel for Large-Scale Image Classification. Florent Perronnin, Jorge Sanchez, and Thomas Mensink. ECCV 2010
  7. cs.ucf.edu/courses/cap6
  8. people.rennes.inria.fr/

推薦閱讀:

TAG:模式識別 |