正如標題所示,這裡將記錄vlad的一切。vlad本小子雖然也讀過幾篇這方面的*****,不過讀的時候一直理解的很粗糙。所以想藉此機會開個帖子,一方面驅動自己去加深對它的理解,另一方面把這些自己對它的理解記錄下來,方便自己查閱。
在進行理論分析之前,先來看看vlad長個什麼樣子,這裡本小子分步展開vlad是怎麼得來的。
提取sift特徵。對於乙個樣本數為n的資料庫,先對影象庫中的所有影象提取sift描述子,假設提取到了所有sift描述子數目為n,用x來表示的話,x就是乙個n*128的矩陣。
聚類生成詞彙向量。假設要生成k個單詞,對x直接用kmeans聚成k類,類中心即為單詞(也叫碼字)。
生成vlad向量。這一步其實如果對bow的生成過程清楚的話,這一步理解起來就非常簡單了。bow統計的是描述子落入最近單詞裡的數目,而vlad統計的則是這些落入最近單詞裡與該單詞的累積殘差。根據aggregating local image descriptors into compact codes的描述:
by counting the number of occurrences of visual words, bow encodes the 0-order statistics of the distribution of descriptors. the fisher vector extends the bow by encoding high-order statistics (first and, optionally, second order).bow做的是描述子的0階統計分布,而fv則是擴充套件了的bow的高階統計。這裡引出來的fv是什麼呢?vlad是fv的特例,這裡我們先不關注fv,我們只要藉此推得vlad是bow的高階統計就行。
經過上面三個步驟後,一幅影象可以用乙個1*(k*128)維的向量表示。為了初步驗證上面的過程是否正確,來看看上面那篇**中vlad的維數是否如這裡所理解的是乙個1*(k*128)維的向量,直接看實驗表:
上表中fv和vlad的d表示維數,我們看到d=k*64,這裡為什麼不是128呢?原因在於作者對sift進行了pca降維處理,將128維降到了64維。
上面vlad生成過程用文字描述起來不夠簡潔,直接把**裡計算vlad的演算法流圖扒過來了,演算法流圖如下:
在對vlad有了初步的認識後,接下來我們可以動手提取vlad,通過實驗來進一步了解vlad。
(待續)
參考:機器學習筆記——fisher vector coding
large-scale visual recognition novel patch aggregation mechanisms
vlad
from:
VTK教程之五 資料集的型別和資料集
在vtk中資料集的型別主要按構成資料集的幾何資料和單元來劃分,主要的資料集型別包括 結構化網格資料集 非結構化網格資料集 多邊形資料集 結構化點集 線性網格資料集 非結構化點集等幾大類,各類的表現形式如下圖所示 1 結構化網格資料集 結構化網格具有規則的拓撲結構和不規則的幾何結構,但是單元沒有重疊或...
資料和資料型別
一 什麼是資料 二 資料的表現形式 1 十進位制 數碼 指集合論中刻畫任意集合所含元素多少的乙個概念。10 權位 進製中每一固定位置對應的單位值稱為位權 2 二進位制 二進位制是計算技術中廣泛採用的一種數制。二進位制資料是用0和1兩個數碼來表示的數。它的基數為2,進製規則是 逢二進一 借位規則是 借...
演算法和資料操作
掌握常用的二分查詢 快速排序 歸併排序。查詢 順序查詢 二分查詢 雜湊表查詢 二叉排序樹查詢。位運算可以看成是一類特殊的演算法,它是把數字表示成二進位制之後對0和1的操作,共有與 或 異或 左移和右移5種運算。雜湊表最主要的優點是能夠在o 1 時間來查詢某一元素,是效率最高的查詢方式。缺點是需要額外...