Keras 訓練自己的人臉特征點提取模型的坑


以下是從入坑到脫坑的全過程

本文的目的是什么?

目前,人臉識別的應用已經非常普遍,人臉識別的技術也非常成熟,(想了解人臉識別原理的同學點這里)一般情況我們可以選擇付費的api,如果《窮》就可以選擇一些開源的項目加以改進。但是實際項目如果是牛臉識別,豬臉識別,狗臉識別,貓臉識別呢!這種需求是存在的,但是就不會有那么多資源,甚至沒有資源供我們自己使用,然后我們自然地就想到能否把人臉識別的相關技術用在上面呢!我不知道這個技術是否可行,但人們總會先把過去成功的經驗用在相似的事情上。可以確定的是人臉識別所用到的所有模型不可能拿來直接用,因為它不可能把牛臉當作人臉,但是我們可以用回歸模型訓練的思路,用相對應的數據,去訓練對應的模型。也就是如果一個模型可以通過訓練進行人臉識別,那么只要不改變網絡結構,只是重新訓練模型的權重,那么牛臉識別,貓臉識別也應該能做到。

總結一下本文的目的

最后總結一下就是,我希望可以找到一個模型A,適用於牛臉識別,但苦於沒有數據,我只能用現成的/但又黑盒的人臉識別模型生成人臉特征數據,用這批特征數據去驗證模型A。(如果能找到開源的人臉特征點提取模型(是提取landmark坐標點的模型,不是將人臉圖像降維到一定長度的模型),就不用靠猜的了)

選擇模型

這個實驗我打算用inception-V3作為基礎模型,在后面接上兩層全連接,變成一個新的網絡。(為什么要加兩層全連接,我是猜的,模型搭建經驗不足啊!!!)

為什么用inception呢,因為它已經被大量用到一些分類識別的項目上了,說明它的卷積層還是可以抓到圖像信息的,所以我將它的卷積部分的權重凍結,算上后加上的兩層全連接,這個實驗僅訓練后三層網絡。

數據制作

本次實驗我只想訓練模型能夠提取人臉68個特征點坐標,因此我找到都是人臉圖像(不包含復雜背景,只有頭的那種),作為訓練用到的模型輸入數據,同時也做了圖像增強,旋轉/平移/縮放……

用開源項目把這些人臉圖進行特征點標記,並存起來當作我的labels

模型訓練代碼

 略……

預測結果

模型訓練完,無論給模型輸入什么圖像,輸出都一樣,無論什么圖片,輸出總是在圖片的同一個位置畫出人臉特征點。

分析與再次嘗試

2020-8-19:即便是輸入模型全零矩陣,也會有同樣的輸出,輸入與輸出沒有建立一種映射關系,僅僅找到了一個輸出,能讓所有標簽loss平均最小,是模型結構問題?損失函數問題?,很有可能是模型的問題,無論輸入什么圖像,模型的某些層會消除所有差異,導致輸出恆定不變!准備嘗試resnet50模型,還不行就嘗試自己建立模型,至少做到輸出會隨着輸入不同而變化。

2020-8-20:事實上輸出並不一樣,只是小數點后幾位不同,即便用resnet50也是這樣,這是什么原因呢!!!

2020-8-21:准備嘗試Hourglass網絡,數據已增強,這里用到了人體軀干關節點提取常用的Hourglass網絡

2020-8-25:事實證明Hourglass是有效果的,它能夠找到眼睛和嘴巴的位置,由於訓練次數太少,准確度還不高,但性能是可以提升的,也就是網絡結構才是最關鍵的。

2020-8-26:看到有人用ASM算法做的人臉特征點提取,有機會再試。

未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM