今年暑假在北京自動化所做“大學生研究計划”,從7月7號-8月20號。導師和師兄人都很nice,度過了一個有收獲的暑假吧!
我對人臉識別的理解:比較兩個人臉是不是相似,而圖片的存儲是矩陣,那我們就是比較這兩個矩陣有多近,如果“很近”,那就是同一個人嘛,相反,如果相差很大,那就不是一個人。如何來判斷兩個矩陣離得“近”呢,答案是豐富多彩的嘛,所以有各種各樣的方法。
然后說下人臉識別的整個過程:樣本——提取特征——訓練——得到分類器——測試
1 樣本,我用的LFW(Labeled Face in Wild)數據庫,點擊LFW可以下到,一共13233幅圖片,對應5749個人。
2 提取特征,我用的LBP方法,另外由於提的特征過大,如果直接訓練,成本太高,建議進行壓縮,我在這里用的是cai deng的PCA方法,小伙伴們可以直接從這里下工具箱,很方便。
3 訓練過程,我在這里是用的metric learning
這里參考了cao qiong的Similarity Metric Learning for Face Recognition和Jason V. Davis的Information Theoretic Metric Learning他們都是有完整代碼貼出來的,可惜都是matlab的。
前面說到怎么找一個合適的距離能夠“恰好”的把同一個人和不同的人分開,我們當然可以用我們熟悉的歐式距離,d1=(X-Y)’(X-Y)(X,Y是兩個人臉的矩陣),但是效果不好,這個時候大家就想辦法了,還有什么距離的,通常,馬氏距離d=(X-Y)‘G(X-Y),這個時候我們通過訓練找到一個合適的G,這個G能使在X和Y相近時,得到一個很小的值;cao qiong還引入了另一個距離,d2=XMY,這個距離,當X和Y靠近時,會很大,而遠離時,d的值很小。cao xiong綜合以上兩點,d=d2-d1。而Jason V. Davis只使用了d1。
metric learning本質上就是要找一個合適的矩陣G。
感覺這是轉化為一個最優化問題,我們肯定是最優某一項指標,然后給出一些限制條件,這樣就變成我們熟悉的運籌學的問題了。
4 得到分類器,有了G以后分類就簡單了,可以采用KNN分類,也可以給個簡單的閾值,如果d大於某個值就不是同一個人,如果小於某個值就是一個人。
5 訓練的結果:我用400維的數據測試下來識別率是89.7%