表情識別
2019.12更新了倉庫依賴。
簡介
使用卷積神經網絡構建整個系統,在嘗試了Gabor、LBP等傳統人臉特徵提取方式基礎上,深度模型效果顯著。在FER2013、JAFFE和CK+三個表情識別數據集上進行模型評估。
環境部署
基於Python3和Keras2(TensorFlow後端),具體依賴安裝如下(推薦使用conda或者venv虛擬環境)
git clone https://github.com/luanshiyinyang/ExpressionRecognition.git
cd ExpressionRecognition
pip install -r requirements.txt
數據準備
數據集和預訓練模型均已經上傳到百度網盤,鏈接給出,提取密碼爲2pmd。
項目說明
- 傳統方法
- 數據預處理
- 圖片降噪
- 人臉檢測
- HAAR分類器檢測(opencv)
- 特徵工程
- 人臉特徵提取
- LBP
- Gabor
- 分類器
- SVM
- 人臉特徵提取
- 數據預處理
- 深度方法
- 數據預處理
- 人臉檢測
- HAAR分類器
- MTCNN(效果更好)
- 人臉檢測
- 卷積神經網絡
- 用於特徵提取+分類
- 數據預處理
網絡設計
使用經典的卷積神經網絡,模型的構建主要參考2018年CVPR幾篇論文以及谷歌的Going Deeper設計如下網絡結構,輸入層後加入(1,1)卷積層增加非線性表示且模型層次較淺,參數較少(大量參數集中在全連接層)。
模型訓練
主要在FER2013、JAFFE、CK+上進行訓練,JAFFE給出的是半身圖因此做了人臉檢測。最後在FER2013上Pub Test和Pri Test均達到67%左右準確率(該數據集爬蟲採集存在標籤錯誤、水印、動畫圖片等問題),JAFFE和CK+5折交叉驗證均達到99%左右準確率(這兩個數據集爲實驗室採集,較爲準確標準)。
訓練過程見train.ipynb文件
模型應用
與傳統方法相比,卷積神經網絡表現更好,使用該模型構建識別系統,提供GUI界面和攝像頭實時檢測(攝像必須保證補光足夠)。預測時對一張圖片進行水平翻轉、偏轉15度、平移等增廣得到多個概率分佈,將這些概率分佈加權求和得到最後的概率分佈,此時概率最大的作爲標籤。
注意,GUI預測只顯示最可能是人臉的那個表情,但是對所有檢測到的人臉都會框定預測結果並在圖片上標記,標記後的圖片在results目錄下。
- GUI界面
- 運行scripts下的gui.py即可(圖片來自百度,侵刪。)
- 效果圖
- 實時檢測
- 運行scripts下的recognition_camera.py即可
- 效果圖(圖片來自百度,侵刪。)
- 演示不便
補充說明
具體項目代碼、數據集、模型已經開源於我的Github,歡迎Star或者Fork。