由于自己以前發過一篇文章講bow特征的matlab代碼的優化的《Bag-Of-Words中K-Means聚類的效率優化》,其中的代碼也用過Spatial Pyramid Code的代碼里面的幾個函數,不過大部分還是根據本地的需要,根據大數據量計算的需要自己整合修改的,經過不少同學的改錯,現在已經基本沒有錯誤了,注釋沒怎么寫,以后慢慢補上,如果有什么問題可以交流。下載地址是我的實驗室的鏈接,希望不要盜鏈了:
- PG_SPBOW.zip: Matlab code for computing the bag of visual words at different levels of spatial pyramid of images.
下面再次說一下基本的理解:
1、個人感覺Bag of Words/Bag of Features原理都差不多,個人還是當一個概念來理解的,可能bag of features涵蓋的內容更加具體,特征更有代表性吧。
2、聚類的初始點可以自己選取,也可以隨機選取,其實對于聚類的結果雖然有影響,但是最后用于分類的時候影響沒那么明顯。
————-
最初的Bag of words,也叫做“詞袋”,在信息檢索中,Bag of words model假定對于一個文本,忽略其詞序和語法,句法,將其僅僅看做是一個詞集合,或者說是詞的一個組合,文本中每個詞的出現都是獨立的,不依賴于其他詞 是否出現,或者說當這篇文章的作者在任意一個位置選擇一個詞匯都不受前面句子的影響而獨立選擇的。
現在Computer Vision中的Bag of words來表示圖像的特征描述也是很流行的。大體思想是這樣的,假設有5類圖像,每一類中有10幅圖像,這樣首先對每一幅圖像劃分成patch(可以是 剛性分割也可以是像SIFT基于關鍵點檢測的),這樣,每一個圖像就由很多個patch表示,每一個patch用一個特征向量來表示,咱就假設用Sift 表示的,一幅圖像可能會有成百上千個patch,每一個patch特征向量的維數128。
接下來就要進行構建Bag of words模型了,假設Dictionary詞典的Size為100,即有100個詞。那么咱們可以用K-means算法對所有的patch進行聚 類,k=100,我們知道,等k-means收斂時,我們也得到了每一個cluster最后的質心,那么這100個質心(維數128)就是詞典里德100 個詞了,詞典構建完畢。
詞典構建完了怎么用呢?是這樣的,先初始化一個100個bin的初始值為0的直方圖h。每一幅圖像不是有很多patch么?我們就再次 計算這些patch和和每一個質心的距離,看看每一個patch離哪一個質心最近,那么直方圖h中相對應的bin就加1,然后計算完這幅圖像所有的 patches之后,就得到了一個bin=100的直方圖,然后進行歸一化,用這個100維德向量來表示這幅圖像。對所有圖像計算完成之后,就可以進行分 類聚類訓練預測之類的了。
轉自:http://www.shamoxia.com/html/y2010/2362.html
自我整理:
通過與Bingli討論,對LLC (CVPR 2010)已經完全掌握,這個流程,包括coding,pooling再SVM分類就叫Bag of words,他也沒細看,只是組會聽講學到這么多。得到的pooled features,再輸入到SVM或者最近鄰進行分類。