??我對于Fisher Vector的理解主要來自對論文Fisher Kernels on Visual Vocabularies for Image Categorization的閱讀。之所以想要了解下FV是因為之前做YouTube 8M短視頻理解時查看他人的論文發(fā)現(xiàn)這個方法僵朗。那篇論文主要是對VLAD和FV進行了吗氏,其中對VLAD的改進進行了詳細(xì)的講解谢床,但是并沒有對FV進行清晰的闡述蓖扑。因此我并不太清楚那篇文章是如何對FV進行改進伴鳖。所以我選擇這篇文章來了解下FV的思路摊聋,希望能更好的理解那篇文章是如何將FV和神經(jīng)網(wǎng)絡(luò)結(jié)合的晦炊。
??所有的講Fisher Vector的資料都先講了下Fisher kernel,我的理解是Fisher kernels對輸入向量進行了編碼蕊苗,以一個新的梯度向量來表示原輸入向量沿后,這個新的梯度向量就是Fisher Vector,編碼方式如下:
這樣編碼的好處在于可以將任意長度的輸入向量轉(zhuǎn)換成定長向量朽砰。這個梯度向量就可以作為分類器的輸入尖滚,完成圖像分類等任務(wù)喉刘。但是對于用到內(nèi)積的判別分類器來說,輸入變量的標(biāo)準(zhǔn)化是很有必要的漆弄,因此引進了一個新的概念——Fisher information matrix睦裳,定義如下:
那么標(biāo)準(zhǔn)化后的梯度向量就可以表示為
這個公式就可以認(rèn)為是Fisher Vector了。
??首先我們假設(shè)visual word vocabulary(這里我是這樣理解visual word vocabulary的撼唾,比如在短視頻理解中l(wèi)abel就是一個vocabulary)是由一個GMM(高斯混合模型)表征的廉邑。假設(shè)vocabulary中的單詞數(shù)量為N,也就是一個N分類問題倒谷,那么GMM中高斯模型的數(shù)量也可以設(shè)置為N個蛛蒙。假設(shè)輸入向量,將似然函數(shù)作為模型的損失函數(shù)渤愁,即
牵祟,而每個特征
的似然函數(shù)是
,其中有
抖格。然后定義一個新的變量——占有概率(occupancy probability)
诺苹,表示特征
屬于第i個高斯模型的概率。利用目標(biāo)損失函數(shù)
對模型參數(shù)求導(dǎo)就有
計算完損失函數(shù)關(guān)于參數(shù)的梯度后就需要對這些梯度值進行標(biāo)準(zhǔn)化了雹拄,中間的推導(dǎo)過程我不會收奔,直接貼上論文推出的最后結(jié)果:
對于每個高斯模型而言,可得到1個與權(quán)重相關(guān)的值滓玖,D個與高斯模型均值相關(guān)的值
和D個與高斯模型方差相關(guān)的值
坪哄。而一個GMM有N個高斯模型,所以得到的向量維度是
呢撞,但是由于所有權(quán)重之和為1损姜,所以只需要知道N-1個權(quán)重就可以了饰剥,所以最終的Fisher Vector的維度是
殊霞。
??講了FV,順便講講BOV汰蓉,全稱是bag of visual word绷蹲,是受到自然語言處理中BOW的啟發(fā)。前面不是提出了占有概率顾孽,表示特征
屬于第i個高斯模型的概率祝钢,在BOV表示中,第i個高斯模型出現(xiàn)次數(shù)(可以理解為T個特征屬于第i個高斯模型的概率之和)可以表示為
每個高斯模型對應(yīng)一個值若厚,那么BOV表示就可以將輸入向量變成一個新的基于出現(xiàn)次數(shù)的N維向量拦英。
BOV和FV的對比:
??BOV得到的是個極其稀疏的向量,因為BOV只關(guān)注了關(guān)鍵詞(理解為單個的高斯模型)的數(shù)量信息测秸,這是個0階的統(tǒng)計信息疤估;
??但是FV并不稀疏灾常,除了0階信息,F(xiàn)V還包括1階(期望)信息和2階(方差)信息铃拇。
2018.12.18補充:
??最初是看這篇文章Learnable pooling with Context Gating for video classification才直到Fisher Vector這個概念钞瀑,為了更好地理解NetFV,所以我將傳統(tǒng)的FV好好的學(xué)了下慷荔,但是經(jīng)過對比發(fā)現(xiàn)雕什,NetFV其實和FV還是有很大不同的,NetFV的編碼方式如下:
其中显晶,需要學(xué)習(xí)的參數(shù)是
贷岸,
和
。
相當(dāng)于原始FV中的1階(期望)信息磷雇,而
相當(dāng)于原始FV中的2階(方差)信息凰盔。這跟上文最終得到公式還是有一定差別的,文中也很明確地說了NetFV中的參數(shù)和GMM是沒有聯(lián)系的倦春,相反是一種判別的方式進行訓(xùn)練户敬。我的理解就是除了
是FC層的輸出,
和
就是直接隨機初始化2個參數(shù)表睁本,然后在后續(xù)的訓(xùn)練中不斷更新這2個表中的參數(shù)值尿庐。NetFV最終得到的編碼特征就是將
和
拼接起來。