我試圖使用Python實現人臉識別算法。我希望能夠接收圖像目錄,並計算它們之間的成對距離,當短距離應該有希望對應於屬於同一個人的圖像。最終目標是對圖像進行聚類並執行一些基本的人臉識別任務(無監督學習)。使用本地描述符實現人臉識別(無監督學習)
由於無監督設置,我對該問題的處理方法是計算「臉部簽名」(R^d中的某個向量,用於某些int d),然後計算出兩個屬於同一個人的距離確實很近。
我有一個人臉檢測算法,它可以檢測人臉,裁剪圖像並執行一些基本的預處理,因此我提供給算法的圖像是灰色和均衡的(見下文)。
對於「臉部簽名」的一部分,我已經試過,我在一些出版物閱讀兩種方法:
- 將全部的LBP(局部二元模式)的直方圖(處理)圖片
- 計算SIFT描述符在7個臉部界標點(嘴巴,嘴巴左邊等),我使用外部應用程序識別每個圖像。簽名是描述符的平方根的連接(這導致更高的維度,但是現在性能不是問題)。
對於兩個簽名,我使用的OpenCV的compareHist功能(參見here),嘗試了幾種不同的距離度量(智廣場,歐式等)的比較。
我知道人臉識別是一項艱鉅的任務,更不用說沒有任何訓練,所以我並不期待好的結果。但目前爲止,我看起來似乎完全是隨機的。例如,計算最右側圖像與圖像其餘部分的距離時,我發現她最接近4個比爾克林頓(...!)。
我在this偉大的演示,它的普及開展對測試集,這應該顯著改善結果的「度量學習」程序讀取。然而,它在演示文稿和其他地方也說過,「常規」距離測量也應該可以得到好的結果,所以在我嘗試這個之前,我想明白爲什麼我所做的一切都讓我無所適從。
總之,我的問題,我很想得到任何形式的幫助:
一個改進我的,雖然是隻對實際執行臉LBP,而不是角落以及可能會將噪音插入簽名的所有內容。在計算LBP之前,如何掩蓋不是臉的部分?我也爲這部分使用OpenCV。
我對計算機視覺相當陌生;我如何去「調試」我的算法,找出出現問題的地方?這可能嗎?
在無人監督的設置中,是否有任何其他方法(這不是局部描述符+計算距離)可以工作,以聚類面孔的任務?
OpenCV模塊中還有其他什麼,也許我沒有想到這可能會有所幫助嗎?看來所有的算法都需要訓練,並且對我而言並不有用 - 算法需要處理完全新的圖像。
在此先感謝。
感謝您的回覆。我實際上有一個我可以使用的Caffe框架。你會建議開發一個大型的預處理人臉訓練集,並通過CNN運行它以獲得每個圖像的更好表示,然後計算圖像之間的距離?你認爲如果代表性足夠好,簡單的歐幾里德距離應該足夠好嗎? – galoosh33
是的,這正是我的想法。如果CNN學習的功能很好,那麼簡單的歐式距離就足夠了。 –