Bag of Words模型
這幾天忙里偷閑看了一些關于BOW模型的知識,雖然自己做圖像檢索到目前為止并沒有用到過BOW模型,不過了解一下BOW并不是一件毫無意義的事情。網上關于理解BOW模型也很多,而且也很詳細,再寫一點關于BOW模型的理解,無異于重新造一次輪子,不過我一直堅信重復造輪子并不是完全沒有意義的,重要的是你能夠從中學到很多的知識,如果可能,你甚而再這個重復造輪子的過程中發現新問題,并進行改進。好了,回歸正題。
BOW (bag of words) 模型簡介 Bag of words模型最初被用在文本分類中,將文檔表示成特征矢量。它的基本思想是假定對于一個文本,忽略其詞序和語法、句法,僅僅將其看做是一些詞匯的集合,而文本中的每個詞匯都是獨立的。簡單說就是講每篇文檔都看成一個袋子(因為里面裝的都是詞匯,所以稱為詞袋,Bag of words即因此而來),然后看這個袋子里裝的都是些什么詞匯,將其分類。如果文檔中豬、馬、牛、羊、山谷、土地、拖拉機這樣的詞匯多些,而銀行、大廈、汽車、公園這樣的詞匯少些,我們就傾向于判斷它是一篇描繪鄉村的文檔,而不是描述城鎮的。舉個例子,有如下兩個文檔:
文檔一:Bob likes to play basketball, Jim likes too.
文檔二:Bob also likes to play football games.
基于這兩個文本文檔,構造一個詞典:
Dictionary = {1:”Bob”, 2. “like”, 3. “to”, 4. “play”, 5. “basketball”, 6. “also”, 7. “football”,8. “games”, 9. “Jim”, 10. “too”}。
這個詞典一共包含10個不同的單詞,利用詞典的索引號,上面兩個文檔每一個都可以用一個10維向量表示(用整數數字0~n(n為正整數)表示某個單詞在文檔中出現的次數):
1:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
2:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0]
向量中每個元素表示詞典中相關元素在文檔中出現的次數(下文中,將用單詞的直方圖表示)。不過,在構造文檔向量的過程中可以看到,我們并沒有表達單詞在原來句子中出現的次序(這是本Bag-of-words模型的缺點之一,不過瑕不掩瑜甚至在此處無關緊要)。
為什么要用BOW模型描述圖像 SIFT特征雖然也能描述一幅圖像,但是每個SIFT矢量都是128維的,而且一幅圖像通常都包含成百上千個SIFT矢量,在進行相似度計算時,這個計算量是非常大的,通行的做法是用聚類算法對這些矢量數據進行聚類,然后用聚類中的一個簇代表BOW中的一個視覺詞,將同一幅圖像的SIFT矢量映射到視覺詞序列生成碼本,這樣每一幅圖像只用一個碼本矢量來描述,這樣計算相似度時效率就大大提高了。
構建BOW碼本步驟:
當然,在提取sift特征的時候,可以將圖像打成很多小的patch,然后對每個patch提取SIFT特征。
總結一下,整個過程其實就做了三件事,首先提取對 n 幅圖像分別提取SIFT特征,然后對提取的整個SIFT特征進行k-means聚類得到 k 個聚類中心作為視覺單詞表,最后對每幅圖像以單詞表為規范對該幅圖像的每一個SIFT特征點計算它與單詞表中每個單詞的距離,最近的+1,便可得到該幅圖像的碼本。實際上第三步是一個統計的過程,所以BOW中向量元素都是非負的。Yunchao Gong 2012年NIPS上有一篇用二進制編碼用于圖像快速檢索的文章就是針對這類元素是非負的特征而設計的編碼方案。
from:?http://yongyuan.name/blog/bag-of-word-model.html
總結
以上是生活随笔為你收集整理的Bag of Words模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类 K-Means Using Pyt
- 下一篇: 新的一年,请以这样的标准完善自我