2016-06-07 40 views
2

我不確定這是否是適合此問題的正確論壇,否則我很抱歉。功能包如何工作?

我對Bag of Features模型很陌生,我試圖實現爲了通過矢量(用於CBIR項目)表示圖像。

從就我的理解,給定一個訓練集n圖像0​​,並假定我們想通過大小k的矢量來表示圖像,這些都爲實現使用BoF步驟:

  1. 對於每個圖像i,計算關鍵點集合並從中計算描述符集合i-D
  2. 把所有圖像中的描述符集合放在一起,所以現在我們有D
  3. D上運行k表示(其中k定義如上)算法,所以現在我們有k簇,每個描述符向量完全屬於一個簇。
  4. 將相對於圖像i的結果BoF矢量(尺寸爲k)定義爲iv。每個維度被初始化爲0
  5. 對於每個圖像i,和用於屬於i-D每個描述符d,找出d所有k簇之間所屬羣集。假設d屬於j集羣,那麼vi[j]++

什麼是我不明白的是如何落實第5點,那麼我們該如何理解到集羣中的描述屬於,特別是如果我們試圖計算轉爐矢量圖像是查詢圖像(不屬於初始數據集)?我們是否應該找到最近鄰居(1-NN)以便了解查詢描述符屬於哪個羣集?

爲什麼我需要這個 - 應用程序:

爲了實現CBIR我實現鍊鋼模型:給定一個查詢圖像q,找到q最相似的圖像i中的數據集圖片。爲了做到這一點,我們需要解決1-近似最近鄰問題,例如使用LSH。問題在於LSH中的每個圖像的輸入都表示爲一個矢量,所以我們需要BoF才能做到這一點!我希望現在它更清楚爲什麼我需要它:)

請讓我知道,如果我在上述程序中犯了一些錯誤。

回答

1

你的算法正在做什麼是爲圖像生成等價的單詞。這套「單詞」並不意味着是最終結果,而只是簡單的用於其他機器學習技術。

在此設置中,您將從初始特徵(來自點1的關鍵點)生成一組k個聚類。 然後,通過每個集羣中關鍵點的數量來描述每個圖像(就像您有一個由長度爲k的字典中的單詞構成的文本一樣)。

點3表示您從traing set images中獲取所有關鍵點,並運行k-means algorithm,找出點之間的合理間隔。這基本上確定了這些詞是什麼。

因此,對於新圖像,您需要像計算訓練集一樣計算關鍵點,然後使用已在訓練中計算出的集羣計算出新圖像的特徵向量。那就是你將你的圖像轉換成你所創建的字典中的單詞。

這是從圖像中生成合理特徵向量的一種方法(如果需要,也可以是部分結果)。這不是一個完整的機器學習算法。要完成它,你需要知道你想要做什麼。如果你只是想找到最相似的圖像,那麼是的最近鄰居搜索應該這樣做。如果要標記圖像,則需要從特徵向量中訓練分類器(如樸素貝葉斯),並使用它來計算查詢的標籤。

+0

我太如此如此抱歉,我很愚蠢!這不是第3點(它只是k-均值),而是第5點(我們通過將每個描述符關聯到一個聚類並定義直方圖來定義結果向量)。 – justHelloWorld

+0

因此,仍然不清楚的是「給出圖像查詢,我們如何獲得最終的BoF矢量」?我們必須爲每個描述符找到數據集中的1-NN描述符,並將其與相對集羣關聯起來?告訴我,如果我不清楚 – justHelloWorld

+0

是的,要分配一個描述符,你可以得到最近的鄰居。您可以根據您的訓練數據計算每個聚類的半徑,只有當查詢點位於該半徑範圍內時(如果您開始獲得與訓練數據非常不同的查詢)纔可以分配它。 – Sorin