前段時間作了一個kaggle上的一個很早的小項目,就是檢測臉部關鍵點,Python環境好弄,可是當時爲了速度用CPU加速,搞了將近一天(相關教程),其實詳細流程也是根據一個相關教程上面的。防止丟失,把代碼分享出來。git
卷積神將網絡監測臉部關鍵點項目是是一個由Kaggle發起的在線比賽題目。該項目給出相關臉部96*96像素的人臉圖片,目的是監測出人臉識別中最關鍵的15個點(也就是x、y共30個輸出參數),來提取人臉識別中的關鍵點。在文章中,經過問題分析,介紹了使用卷積神經網絡的方法(簡稱CNN)進行特徵提取的過程,並對該問題解法進行了評價和改進意見。github
本次採用LeNet-5的卷積神經網絡,由於其在圖像處理方面有着核心的做用,在該設計模型中,使用了卷積神經網絡中的幾個重要層,介紹以下:markdown
另外,本模型採用學習動量的方式遞歸降低更新神經網絡中的參數,也就是對其學習率(步長)進行動態的調整,在開始令其學習率較大,這樣加快參數更新次數,隨着次數的增長,減少學習率,防止其在最優解附近產生震盪的現象,從而從總體上提升模型效果,減少偏差。
數據輸入
輸入數據爲1個通道的灰度圖像,其大小爲[1*96*96],可是在圖像中有部分干擾圖像,也就是否是單純的頭部圖像,其中正常的圖像輸出顯示如圖2.1。
網絡
首先進行數據輸入。因爲數據集中部分數據時是缺失的,所以對輸入數據須要特殊處理,也就是對輸入數據的進行過濾處理,也就是對csv數據進行篩選,選擇出完整的數據集合,數據集大概大小是2000多個;
其次進行相應的數據填充。因爲完整的數據集數目較少,所以若是僅僅使用少許數據,其將會在訓練後期出現嚴重的過擬合現象,具體圖像可視化如圖3.1所示。因此對其進行相應的數據擴充操做,數據擴充的意思是咱們人爲地經過一些手段(變形、添加噪聲等等)增長訓練用例的個數。批量迭代器的工做是採集一個訓練集合的樣本矩陣,分紅不一樣的批次(在本模型中採用128個用例一批)。當把訓練樣本分紅批次的時候,批處理迭代器能夠順便把輸入變形這件事作的又快又好。咱們在進行批處理迭代的時候,以50%的概率進行水平翻轉。這很是的方便,對某些問題來講這種手段可讓咱們生產近乎無限的訓練集,而不須要增長內存的使用。所以本模型中採起將圖片翻轉的方式進行擴充。學習
圖3.1 小數據集過擬合現象.net
按照官方的評價標準,採用的是RMSE的偏差衡量標準:
設計
該模型最終跑在酷睿i5,搭載NVIDIA GeForce750M上,訓練1000 epoch大概須要花費兩個小時,每一個epoch時間大概在7-8秒之間。
根據III小結中數據擴充方法,在進行圖像擴充先後的結果顯示能夠看到效果有所提高,而且過擬合現象也有所緩解。
爲詳細描述最終效果,該模型最終詳細結果可視化如圖5.2所示。
blog
相關代碼教程
相關參考遞歸