1. 程式人生 > >機器學習筆記:Fisher Vector基本原理與用法

機器學習筆記:Fisher Vector基本原理與用法

近期在看的動作識別相關的工作中fisher vector及其改進版本被廣泛的應用,因此打算從Fisher Vector開始入手整理相關知識。

參考的部落格內容:

完整介紹Fisher Vector方法的論文

"ImageClassification with the Fisher Vector: Theory and Practice"


    Fisher Vector的詳細概念可以見以上的幾篇博文(或是直接看論文)。下面主要從FV的計算步驟的角度進行介紹。首先給出以上的論文中的演算法步驟做參考:

 

對於一副影象,提取T個描述子(比如SIFT,比如iDT),每個描述子是D

維的,那麼可以用 X={xt , t= 1…T}來描述這張圖片。這裡做一個假設,假設這t個描述子獨立同分布(i.i.d)。那麼則有:


取對數後可以得到:


此處的lamda為描述獨立同分布的引數。現在要用一組K個高斯分佈的線性組合(即GMM混合高斯模型)來逼近這個分佈,其引數即為lamdaGMM模型可以用下式描述:


其中pi為第i個高斯分佈

   

以下引數lamda注意此處的lamda在計算FV時是已知量,是預先通過GMM求解得到的先驗值


wi為係數,wi>=0,sum(wi)=1。另外兩個引數為高斯分佈中的平均值和標準差。

在計算之前先定義佔有概率,即特徵xt由第i個高斯分佈生成的概率:


對各個引數求偏導可以得到


注意此處的i是指第i個高斯分佈,d是指xt的第d維,因此得到的結果數目為 w:K-1個;均值:K*D個;標準差K*D個。因此共有(2D+1*K-1個偏導結果,這裡的-1是由於wi的約束。

在計算完之後,還需要進行歸一化。對三種變數分別計算歸一化需要的fisher matrix的對角線元素的期望:


此處T為最開始的描述子的數目。最終歸一化後的fisher vector的結果為:


在上面提及的”Image Classification with the Fisher Vector: Theory andPractice“一文中,對最後的歸一化步驟進行了改進。先對

fisher vector中的每個值做功率歸一化,再對fisher vectorL2正則化得到最後的結果。

綜上所述,基於Fisher Vector的影象學習的完整過程應該描述為下面幾個步驟。

1.選擇GMMK的大小

1.用訓練圖片集中所有的特徵(或其子集)來求解GMM(可以用EM方法),得到各個引數;

2.取待編碼的一張影象,求得其特徵集合;

3.GMM的先驗引數以及這張影象的特徵集合按照以上步驟求得其fv

4.在對訓練集中所有圖片進行2,3兩步的處理後可以獲得fishervector的訓練集,然後可以用SVM或者其他分類器進行訓練。

經過fisher vector的編碼,大大提高了影象特徵的維度,能夠更好的用來描述影象。FisherVector相對於BOV的優勢在於,BOV得到的是一個及其稀疏的向量,由於BOV只關注了關鍵詞的數量資訊,這是一個0階的統計資訊;FisherVector並不稀疏,同時,除了0階資訊,Fisher Vector還包含了1階(期望)資訊、2階(方差資訊),因此FisherVector可以更加充分地表示一幅圖片。

相關推薦

機器學習筆記Fisher Vector基本原理用法

近期在看的動作識別相關的工作中fisher vector及其改進版本被廣泛的應用,因此打算從Fisher Vector開始入手整理相關知識。 參考的部落格內容: 完整介紹Fisher Ve

行為識別筆記Stacked Fisher Vector基本原理

 Stacked Fisher Vector是Xiaojiang Peng在“Action Recognition with Stacked Fisher Vectors”一文中提出的用於動作識別的

學習筆記矩陣的基本運算的實現

for int size data stdin mat 轉置 span font 2017-09-05 21:33:33 writer:pprp 昨天開始就上課了,沒有整天整天的時間去編代碼了,充分抓住每天晚上的時間吧, 今天下午預習了一下線性代數中矩陣最基本的運算,今晚就

Python機器學習筆記利用Keras進行多類分類

名稱 encoder 創建 numeric 種類 deep ast 4.0 允許   Keras是一個用於深度學習的Python庫,它包含高效的數值庫Theano和TensorFlow。   本文的目的是學習如何從csv中加載數據並使其可供Keras使用,如何用神經網絡建立

軟件工程學習筆記——軟件工程基本原理

基本 建議 軟件質量 數據 工具 進度 劃分 控制 項目 美國著名的軟件工程專家B.W.Boehm於1983年提出了軟件工程的7條基本原理: 用分階段的生命周期計劃嚴格管理 這條基本原理意味著:應該把軟件生命周期劃分成若幹個階段,並相應地制定出切實可行的計劃,然後嚴格按

機器學習筆記正則化

有這麼幾個問題:1、什麼是正則化?2、為什麼要用正則化?3、正則化分為哪幾類?       在機器學習中我們經常看到在損失函式後會有一個正則化項,正則化項一般分為兩種L1正則化和L2正則化,可以看做是損失函式的懲罰項。懲罰項的作用我認為就是對模型中的引數限制,從而防止

機器學習筆記Overview

1)機器學習筆記(1):Introduction 2)機器學習筆記(2):單變數線性迴歸 3)機器學習筆記(3):線性代數回顧 4)機器學習筆記(4):多變數線性迴歸 5)機器學習筆記(五):邏輯迴歸 6)機器學習筆記(六):正則化 7)機器學習筆記(七):神經網路:表示

機器學習筆記各種熵

在機器學習中通常會使用各種熵來描述分佈與分佈之間的關係,如條件熵和交叉熵等,也有直接優化熵的模型,如最大熵模型。 這篇文章簡單總結一下之前見到過的一些熵相關的概念。 資訊量 定義 假設有離散隨機變數 XXX 滿足分佈 P(X=xi)=piP(X = x_{i}

機器學習筆記之十二——SVM原理及推導

svm(support vector machine)是一種二分類演算法,它的目標在於尋找一個能將兩種點分離的直線或平面或超平面。 如圖(來自wiki): 圖中的紅線將兩邊資料點分開,這條線就是分割直線,同樣的,在三維座標軸中,將兩邊資料點分開的平面,稱為分割平面;更高維的空間座標軸,

機器學習筆記之九——決策樹原理以及舉例計算

  決策樹是機器學習最基本的演算法之一,它本身作為一顆樹而言,十分簡單。   就是將特徵屬性放在結點的未知,按照特徵屬性將樣本分類,放在左子樹和右子樹。   而在左子樹和右子樹,繼續使用其他的特徵屬性作為結點,向下分類。   學習決策樹複雜的部分在

機器學習筆記之四——線性迴歸原理以及推導

一元線性迴歸:   對於樣本[(x1,y1),(x2,y2),……(xn,yn)],xi為特徵,yi為標籤。(字幕i代表下標)   假定y與x有:                 

Fisher Vector 基本原理分析

1.背景介紹 Fisher Vector是一種編碼方式,它和Bag-of-Words一樣,都能夠實現對於不等長特徵矩陣的歸一化。例如,對於一段語音訊號,每幀上可以提取MFCC特徵(假設有13維),由於每段語音訊號的長度不等,導致每段語音的總幀數不等,得到的特徵向量可能是這樣

Python機器學習筆記sklearn庫的學習

  網上有很多關於sklearn的學習教程,大部分都是簡單的講清楚某一方面,其實最好的教程就是官方文件。   官方文件地址:https://scikit-learn.org/stable/ (可是官方文件非常詳細,同時許多人對官方文件的理解和結構上都不能很好地把握,我也打算好好學習sklearn,比較這可

spark機器學習筆記(三)用Spark Python構建推薦系統

輸出結果: [[Rating(user=789, product=1012, rating=4.0), Rating(user=789, product=127, rating=5.0), Rating(user=789, product=475, rating=5.0), Rating(us

機器學習筆記tensorflow實現卷積神經網路經典案例--識別手寫數字

從識別手寫數字的案例開始認識神經網路,並瞭解如何在tensorflow中一步步建立卷積神經網路。 安裝tensorflow 資料來源 kaggle新手入門的數字識別案例,包含手寫0-9的灰度值影象的csv檔案,下載地址:https://www.

機器學習筆記正則化項

在機器學習演算法中如果只使用經驗風險最小化去優化損失函式則很可能造成過擬合的問題,通常我們要在損失函式中加入一些描述模型複雜程度的正則化項,使得模型在擁有較好的預測能力的同時不會因為模型過於複雜而產生過擬合現象,即結構風險最小化 正則化項一般是模型複雜程度的單調

Python機器學習筆記深入理解Keras中序貫模型和函式模型

  先從sklearn說起吧,如果學習了sklearn的話,那麼學習Keras相對來說比較容易。為什麼這樣說呢?   我們首先比較一下sklearn的機器學習大致使用流程和Keras的大致使用流程: sklearn的機器學習使用流程: 1 2 3 4

[機器學習]機器學習筆記整理08- SVM演算法原理及實現

<html> 1 背景 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出 目前的版本(so

spark機器學習筆記(六)用Spark Python構建迴歸模型

博主簡介:風雪夜歸子(英文名:Allen),機器學習演算法攻城獅,喜愛鑽研Meachine Learning的黑科技,對Deep Learning和Artificial Intelligence充滿興趣,經常關注Kaggle資料探勘競賽平臺,對資料、Machi

spark機器學習筆記(二)用Spark Python進行資料處理和特徵提取

下面用“|”字元來分隔各行資料。這將生成一個RDD,其中每一個記錄對應一個Python列表,各列表由使用者ID(user ID)、年齡(age)、性別(gender)、職業(occupation)和郵編(ZIP code)五個屬性構成。4之後再統計使用者、性別、職業和郵編的數目。這可通過如下程式碼