2013-01-17 106 views
8

我想從靜態圖像中識別車輛(汽車,自行車等)。 我正在考慮使用SURF讓我有用關鍵點描述符然後訓練一個MLP(多層感知器)神經網絡。然而,我不知道輸入到神經網絡的輸入是什麼,它會輸出什麼,以便我可以識別車輛所在圖像的哪個部分(可能是圍繞它繪製的矩形)。 我知道SURF可以返回圖像中有用的關鍵點以及它們的描述符(我已經完成了這個)。關鍵點有角度,每個關鍵點對應於一個64或128長的矢量作爲描述符。 我不知道的是這些關鍵點究竟是什麼以及它們如何被用作神經網絡的輸入。OpenCV結合SURF和神經網絡

我正在使用OpenCV Python

我是使用SURF和其他特徵提取方法的新手。任何與此有關的幫助將非常好。

回答

8

如果使用衝浪功能,這就是意味着浮子掀起矢量[128]或[64]取決於你衝浪配置你將被設定的神經網絡作爲遵循

- 創建與模型數據的基礎上:

-bikes 
-cars 
-autobus 
-truck 

-Take diferents照片每種類型的像10張照片diferents的模型關車,10張照片diferents的模型關閉自行車10張型動物模型關車......等對象的,每張照片關閉每個對象類提取它的衝浪特徵向量。

- 每種類型的對象都會代表神經網絡中的一類對象,像這樣;

-car ;object class 1 =binary representaation in 4 bits= 0 0 0 1 
-bikes ;obejct class 2 =binary representaation in 4 bits= 0 0 1 0 
-truck ;obejct class 3 =binary representaation in 4 bits= 0 0 1 1 
-ball ;obejct class 4 =binary representaation in 4 bits= 0 1 0 0 
二進制repesentacion

- 每個位將被對應於一個神經元在網絡的輸出層和代表一類對象的要被識別

現在神經網絡的配置將基於該要以這種方式識別的特徵向量的大小和對象的類型的數量;

在輸入層nuerons的數目; 64或128根據大小關衝浪特徵矢量的所配置和使用

在神經網的輸出層nuerons的數量將是在這個例子中你想識別的對象類數4

每個神經元的激活函數都是sigmoid函數或tanh函數(http://www.learnartificialneuralnetworks.com/),因爲如果你使用畸形的fayures或另一個二進制局部特徵描述符(Brisk,ORB,BRief),那麼你將對每個神經元使用二進制激活函數,如step函數o sigm fun ction

用來訓練網絡的algoritm是反傳

之前繼續,您必須設置和準備數據集訓練神經網絡

例如

-all feature vector extracted from picture belong a car will be label or asociated to class 1    
-all feature vector extracted from picture belong a bike will be label or asociated to class 2 
-all feature vector extracted from picture belong a truk will be label or asociated to class 3 
-all feature vector extracted from picture belong a ball will be label or asociated to class 4 

這個例子中,你輸入層將有4個神經元,輸入層有128個或64個神經元。

-識別模式下的神經網絡輸出將是這4個nueron中具有最高值的神經元。

因爲神經網絡的輸出是輸入向量屬於的概率,所以在開始訓練階段之前,其需要在區間[0,1]中對數據集中的所有特徵進行歸一化數據集中的一類對象。

數據集訓練網絡已被分割爲:

-70% off the data used to train 
-15% off the data used to validate the network arquitecture (number of neurons in the hidden layyer) 
-15% off the data used to test the final network 

神經網絡訓練時,停止標準是recognittion率,它是接近85-90%

爲什麼使用神經網絡而不是svm機器,svm機器工作正常,但它不能在這樣的線性分類問題中做出最好的分離類映射,或者當您有很多diferents對象類或對象類型時,在識別階段的結果是預測

我recomended你讀一些有關神經網絡理論,瞭解它們是如何工作

http://link.springer.com/chapter/10.1007%2F11578079_10

OpenCV的具有機器學習類神經網絡MLP模塊

希望這可以幫助你

+0

感謝您向我解釋如何使用神經網絡進行物體識別。 但是,在我的情況下可能不得不處理彼此接近的類似對象(例如,兩個相鄰的出租車)。我需要能夠單獨識別它們。神經網絡能夠幫助我解決這個問題嗎? 我覺得使用你提到的技術可以讓我識別車輛,但不能單獨分開它們(就像在兩輛出租車周圍畫一個矩形一樣) –

2

我的建議是觀察BOW而不是神經網絡。請參閱此處使用SURF與Bag Of Words模型進行對象分類的示例(first part,second part)。爲了提高分類性能,您可以嘗試用SVM替換樸素貝葉斯分類器。 另外,作者提供了很好的source code example。我認爲這是一個很好的開始。

+0

我檢出了您指定的BOW技術。看起來很有前途,但是我正在尋找一個可以從磁盤保存和加載的學習過程(繼續學習),就像神經網絡一樣。 我設法使用衝浪提取特徵描述符,但是,數據是多維的('N'關鍵點對128個特徵向量)我的新問題是如何將多維數據輸入到神經網絡? –

2

的簡單的方法來檢測檢測到的物體是在輸入圖像中運行輪廓檢測器 ,如that

它可以用X,Y COORDS從每個關鍵點聯想到由神經網絡識別每個特徵向量,並檢查有多少這些關鍵點都在側面每個對象的每個輪廓後,

同時它讓你設置一個門限來驗證一個正確的汽車檢測,例如,如果你有兩輛出租車;每輛車有兩個輪廓,並檢查每個輪廓有多少個關鍵點;

  • 輪廓屬於出租車1具有內
  • 輪廓20個鍵ponits屬於出租車1有5個關鍵ponits內

爲對象的認可

上,您可以給出租車1臺O車1當你有一個驗證對象被識別和它的輪廓,你可以計算關閉對象的bouding框

另一種方法是每次訓練圖像提取其輪廓屬於每個對象,計算其邊界框使用這個像純粹的圖像提取的功能,並使其對al picures en訓練集