深度学习项目-人脸表情识别
人臉表情識別
簡介
使用卷積神經網絡構建整個系統,在嘗試了Gabor、LBP等傳統人臉特征提取方式基礎上,深度模型效果顯著。在FER2013、JAFFE和CK+三個表情識別數據集上進行模型評估。
環境部署
基于Python3和Keras2(TensorFlow后端),具體依賴安裝如下(推薦使用conda虛擬環境)。
git clone https://github.com/luanshiyinyang/FacialExpressionRecognition.git cd FacialExpressionRecognition conda create -n FER python=3.6 source activate FER conda install cudatoolkit=10.1 conda install cudnn=7.6.5 pip install -r requirements.txt如果你是Linux用戶,直接執行根目錄下的env.sh即可一鍵配置環境,執行命令為bash env.sh。
數據準備
數據集和預訓練模型均已經上傳到百度網盤,鏈接給出,提取密碼為2pmd。下載后將model .zip移動到根目錄下的models文件夾下并解壓得到一個*.h5的模型參數文件,將data.zip移動到根目錄下的dataset文件夾下并解壓得到包含多個數據集壓縮文件,均解壓即可得到包含圖像的數據集(其中rar后綴的為原始jaffe數據集,這里建議使用我處理好的)。
項目說明
傳統方法
- 數據預處理
- 圖片降噪
- 人臉檢測(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%左右準確率(這兩個數據集為實驗室采集,較為準確標準)。
執行下面的命令將在指定的數據集(fer2013或jaffe或ck+)上按照指定的batch_size訓練指定的輪次。訓練會生成對應的可視化訓練過程,下圖為在三個數據集上訓練過程的共同繪圖。
python src/train.py --dataset fer2013 --epochs 300 --batch_size 32模型應用
與傳統方法相比,卷積神經網絡表現更好,使用該模型構建識別系統,提供GUI界面和攝像頭實時檢測(攝像必須保證補光足夠)。預測時對一張圖片進行水平翻轉、偏轉15度、平移等增廣得到多個概率分布,將這些概率分布加權求和得到最后的概率分布,此時概率最大的作為標簽(也就是使用了推理數據增強)。
GUI界面
注意,GUI界面預測只顯示最可能是人臉的那個臉表情,但是對所有檢測到的人臉都會框定預測結果并在圖片上標記,標記后的圖片在output目錄下。
執行下面的命令即可打開GUI程序,該程序依賴PyQT設計,在一個測試圖片(來源于網絡)上進行測試效果如下圖。
python src/gui.py上圖的GUI反饋的同時,會對圖片上每個人臉進行檢測并表情識別,處理后如下圖。
實時檢測
實時檢測基于Opencv進行設計,旨在用攝像頭對實時視頻流進行預測,同時考慮到有些人的反饋,當沒有攝像頭想通過視頻進行測試則修改命令行參數即可。
使用下面的命令會打開攝像頭進行實時檢測(ESC鍵退出),若要指定視頻進行進行檢測,則使用下面的第二個命令。
python src/recognition_camera.py python src/recognition_camera.py --source 1 --video_path 視頻絕對路徑或者相對于該項目的根目錄的相對路徑下圖是動態演示的在Youtube上某個視頻上的識別結果。
補充說明
具體項目代碼、數據集、模型已經開源于我的Github,歡迎Star或者Fork。收到很多咨詢,表示國內訪問Github可能不太方便,因此這里也貼出Gitee地址。
總結
以上是生活随笔為你收集整理的深度学习项目-人脸表情识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware多虚拟机网络配置
- 下一篇: 自学Java第一天