5

我正在關注的編碼是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的。

如果我只是對測試圖像進​​行編碼,由於尺寸不匹配,我無法在分類器中使用它們。

也許我沒有正確地選擇這個或做出一些愚蠢的錯誤,有可能得到一個簡單的例子,通過它我可以理解工作。

非常感謝

回答

3

你必須在這個過程分爲兩個階段:
(1)培訓在您使用學習域的一些統計特性,並
(2)測試在您使用學習的表示/模型並將其應用於新樣本。

因此,你應該將功能集分成兩個「分裂」一個學習的GMM費希爾編碼(一訓練集),而另一個分裂的編碼申請(一測試集) 。

通常情況下,您會抽取大量能夠很好地表示您感興趣的域名的圖像(例如,如果您對人們感興趣,應該考慮許多室內和室外人物照片,特寫和合影照片等)。許多SIFT描述這些訓練圖像,你可以用它們來學習之典範:

numClusters = 30 ; 
[means, covariances, priors] = vl_gmm(TrainingData, numClusters); 

一旦你有了這個模型保存,那麼你可以將其應用到照片它們編碼

encoding = vl_fisher(TestData, means, covariances, priors); 

注意,儘管TrainingData是一般非常大的,並且可以從圖像的幾十個(或甚至數百)收集,TestData可以是顯著更小,甚至是來自單個圖像採集的描述符。

+0

謝謝您的回覆。所以如果我有1000張圖片,並且使用600進行訓練,其餘的進行測試,那麼我如何比較這兩張圖片呢?我的意思是,在這種情況下,訓練將根據''gmm''參數進行,而測試將根據''fisher vectors''進行,使用分類器將如何進行比較?這不就像比較一種功能類型(訓練)和另一種功能類型(測試)?對不起,也許我不能正確理解你的解釋,如果可能的話,請你提供一個這樣的例子嗎?非常感謝 – StuckInPhD

+0

@FarazKhan你不假設比較訓練集 - 這將是「作弊」。您可以使用600張照片來學習模型,然後將400張圖片的漁夫向量與自己進行比較:找到相似的圖片等。例如,您可以從400張圖片中選擇一張圖片,然後搜索最近的10張圖片矢量 - 即找到10個最相似的圖像。 – Shai

+0

這裏寫的太多了,所以我更新了我原來的問題,你可以看看它。非常感謝 – StuckInPhD