2011-12-29 89 views
1

我在圖像處理方面非常新穎,我的第一項任務是製作一個可識別人臉和他們名字的工作程序。 到現在爲止,我成功地做出了一個項目來檢測,裁剪檢測到的圖像,使其成爲sobel並將其轉換爲浮點數組。 但是,我很困惑如何實施Backpropagation MLP來學習圖像,以便它可以識別檢測到的臉部的正確名稱。使用反向傳播神經網絡的人臉識別?

對於所有的stackoverflow專家來說,我非常榮幸能夠給出一些例子來說明如何通過反向傳播學習Image數組。

+0

那麼,你的問題是什麼:特徵提取,MLP的實現,人臉識別? – moooeeeep 2011-12-29 16:02:09

+1

你問的是一個算法的細節非常具體。最好的方法是在網上搜索與反向傳播相關的材料。 – blueskin 2011-12-29 22:18:21

+0

@moooeeeep:我的問題是插入從索貝爾圖像中提取的浮點數組,用反向傳播進行處理,所以反向傳播可以學習我的圖像並以正確的名稱識別它。 – anarchy99 2011-12-31 10:51:56

回答

0

您是否嘗試過寫你的特徵向量到arff文件和養活他們weka,只是爲了看看你的方法可能會在所有工作? Weka擁有很多分類器,包括MLP。 據我瞭解,到目前爲止,我懷疑你選擇的功能和分類器不工作。

回答您的原題:您是否嘗試過自己實現神經網絡?如果是這樣,你卡在哪裏?請注意,這不是要求觀衆完整實施的地方。

提供有關一般問題的一般答案: 通常,您在MLP中有節點。具體輸入節點,輸出節點和隱藏節點。這些節點嚴格按層組織。輸入層位於底部,輸出層位於頂部,隱藏層位於其間。節點以簡單的前饋方式連接(輸出連接僅允許到更高層)。 然後,您將每個float連接到單個輸入節點,然後將這些特徵矢量提供給您的網絡。爲了反向傳播,您需要提供您爲輸出節點指定的錯誤信號。因此,如果您有n名稱可以區分,則可以使用n輸出節點(即每個名稱一個)。例如,讓他們返回1匹配的情況和0其他。您可以很好地使用一個輸出節點,並讓它返回不同的名稱值。可能最好使用完全不同的感知器,即每個名稱一個,以避免一些副作用(災難性干擾)。

請注意,每個節點的輸出是一個數字,而不是名稱。因此,您需要使用某種閾值來獲取數字名稱關係。 另請注意,您需要很多訓練數據來訓練大型網絡(即服從curse of dimensionality)。知道您的float陣列的大小會很有趣。 事實上,對於一個複雜的決策,您可能需要更多的隱藏節點或隱藏層。 此外請注意,您可能需要進行大量評估(即cross validation)才能找到最佳配置(層數,每層節點數),或查找任何工作配置。

祝你好運,任何方式!

+0

非常感謝您的解釋,我將首先嚐試使用arff和weka功能來確保其工作。 也許我只是過度集中尋找方法來面對使用反向傳播進行識別而無需用簡單的數據學習反向傳播。 截止日期讓我感到噁心。順便說一句,我非常感謝你的努力幫助我。 對不起,我的語法錯誤。 – anarchy99 2011-12-31 15:29:38

1

這是標準的機器學習算法。您有許多浮點數(ML中的實例或統計術語中的觀察值)以及相應的名稱(標籤,類標記),每個數組一個。這足以用於大多數ML算法。特別是在ANN中,數組的元素(即特徵)是網絡的輸入,標籤(名稱)是其輸出。

如果您要查找反向傳播的理論描述,請查看Stanford's ml-class lectures(ANN部分)。如果您需要準備好實施,請閱讀this question

您尚未指定數組的元素。如果你只使用原始圖像的像素,這應該工作,但不是很好。如果您需要生產級系統(儘管仍然使用ANN),請嘗試提取更多高級功能(例如OpenCV使用的Haar-like features)。

+0

哇,謝謝,準備實施是我真正需要進一步工作的。非常感謝你。 – anarchy99 2011-12-31 15:38:09