我正在關注的編碼是fisher編碼,因爲我已經證明,在我的工作中,編碼效果最好。所以我想測試我提取的(SIFT)特徵上的Fisher編碼,並測試系統的編碼性能或不編碼性能。瞭解提取特徵的編碼
而不是開始新我發現vl_feat有一個內置的庫漁民編碼和他們有,由於很好地鏈接here
現在我已經做了最需要什麼樣的,但究竟是什麼並得到一個教程編碼是混淆我,例如教程清楚地表明,使用諸如[means, covariances, priors]
通過GMM獲得的參數和所述SIFT提取的特徵將被用在這裏GMM具體根據教程進行漁夫編碼:
的費舍爾編碼使用GMM構建一個視覺詞典。以 爲例說明構建GMM,考慮一些二維數據 分。實際上,這些點將是SIFT或其他本地圖像特徵的集合。
numFeatures = 5000 ;
dimension = 2 ;
data = rand(dimension,numFeatures) ;
numClusters = 30 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
然後,一旦我已經完成這一步,我來編碼另一數據集?這讓我感到困惑。我已經使用提取的SIFT特徵生成GMM參數。所以在這裏
encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
encoded
是最終的結果,但WHAT:
接下來,我們創建另一個組隨機向量,它應該用Fisher向量表示編碼 ,只是得到的GMM有編碼嗎?我希望從我的圖像中提取的SIFT特徵能夠被編碼,但是如果我遵循GMM中使用的教程。如果是這樣的話,
datatoBeEncoded
是什麼?我是否再次使用SIFT專長?謝謝
更新:
@Shai
謝謝你,但我相信我一定是做錯了什麼。我不太明白你的意思是「將圖像與自己比較」。我有4班,每班1000張圖片。所以就用從1類第600個圖像學習GMM參數,然後使用這些參數來進行編碼漁民矢量
numClusters = 128 ; [means, covariances, priors] = vl_gmm(data, numClusters);
所以每個
means, covariances
是大小尺寸128 x 128
和先驗的1 x 128
現在,當我使用這些使用功能進行編碼的400個圖像漁民矢量
encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
編碼的大小有很大的不同,沿着大小事。這些不能與生成的模型進行比較。
我已經有一個系統正在處理數據集的非編碼版本,並且運行良好,但我想看看編碼如何起作用,理論上應該改進結果。
我可以在這裏添加代碼,如果需要的話,但它是用於UBM-GMM和我困惑的原因是因爲你提到的訓練方法是我用於UBM的。
如果我只是對測試圖像進行編碼,由於尺寸不匹配,我無法在分類器中使用它們。
也許我沒有正確地選擇這個或做出一些愚蠢的錯誤,有可能得到一個簡單的例子,通過它我可以理解工作。
非常感謝
謝謝您的回覆。所以如果我有1000張圖片,並且使用600進行訓練,其餘的進行測試,那麼我如何比較這兩張圖片呢?我的意思是,在這種情況下,訓練將根據''gmm''參數進行,而測試將根據''fisher vectors''進行,使用分類器將如何進行比較?這不就像比較一種功能類型(訓練)和另一種功能類型(測試)?對不起,也許我不能正確理解你的解釋,如果可能的話,請你提供一個這樣的例子嗎?非常感謝 – StuckInPhD
@FarazKhan你不假設比較訓練集 - 這將是「作弊」。您可以使用600張照片來學習模型,然後將400張圖片的漁夫向量與自己進行比較:找到相似的圖片等。例如,您可以從400張圖片中選擇一張圖片,然後搜索最近的10張圖片矢量 - 即找到10個最相似的圖像。 – Shai
這裏寫的太多了,所以我更新了我原來的問題,你可以看看它。非常感謝 – StuckInPhD