Skip to content

Repository files navigation

FaceImageCNN

一個基於深度學習的人臉表情識別項目,使用卷積神經網絡(CNN)來識別七種基本情緒:憤怒、厭惡、恐懼、快樂、中性、悲傷和驚訝。

項目概述

本項目包含兩個版本的CNN模型實現:

  • face_cnn_cpu.py - 針對CPU優化的版本,包含學習率調度器
  • face_cnn_gpu.py - 針對GPU優化的版本,使用Adam優化器的decay參數

兩個版本都使用FER2013數據集進行訓練,並提供完整的模型評估和可視化功能。

功能特點

  • 七種情緒識別:憤怒、厭惡、恐懼、快樂、中性、悲傷、驚訝
  • 深度CNN架構:包含卷積層、池化層、批量歸一化和Dropout
  • 完整評估:提供準確率、混淆矩陣和分類報告
  • 訓練可視化:自動生成訓練歷史圖表和混淆矩陣
  • 模型保存:訓練完成後自動保存為H5格式

環境要求

系統要求

  • Python 3.7+
  • TensorFlow 2.6.0
  • 足夠的內存來處理圖像數據

依賴包

pip install -r requirements.txt

主要依賴包括:

  • tensorflow==2.6.0
  • keras==2.6.0
  • numpy==1.19.5
  • matplotlib==3.4.3
  • seaborn==0.11.2
  • scikit-learn==0.24.2

數據集準備

FER2013數據集結構

確保你的數據集按照以下結構組織:

fer2013/
├── train/
│   ├── angry/
│   ├── disgust/
│   ├── fear/
│   ├── happy/
│   ├── neutral/
│   ├── sad/
│   └── surprise/
└── test/
    ├── angry/
    ├── disgust/
    ├── fear/
    ├── happy/
    ├── neutral/
    ├── sad/
    └── surprise/

使用方法

1. CPU版本 (推薦用於較小數據集或無GPU環境)

python face_cnn_cpu.py

特點:

  • 包含學習率調度器 (ReduceLROnPlateau)
  • 當驗證損失停止改善時自動降低學習率
  • 更穩定的訓練過程
  • 適合長時間訓練

2. GPU版本 (推薦用於大數據集或有GPU環境)

python face_cnn_gpu.py

特點:

  • 使用Adam優化器的decay參數
  • 更快的訓練速度(需要GPU支持)
  • 適合快速實驗和原型開發

模型架構

CNN結構

輸入層: (48, 48, 1) 灰度圖像
├── 卷積層1: 32個3x3卷積核
├── 卷積層2: 64個3x3卷積核
├── 批量歸一化 + 最大池化 + Dropout(0.25)
├── 卷積層3: 128個3x3卷積核 (L2正則化)
├── 卷積層4: 256個3x3卷積核 (L2正則化)
├── 批量歸一化 + 最大池化 + Dropout(0.25)
├── 展平層
├── 全連接層: 1024個神經元 + Dropout(0.5)
└── 輸出層: 7個神經元 (softmax激活)

訓練參數

  • 圖像大小: 48x48像素
  • 批次大小: 64
  • 訓練輪數: 60
  • 學習率: 0.0001
  • 優化器: Adam

數據增強

  • 水平翻轉
  • 縮放範圍: 0.3
  • 像素值歸一化: 1./255

輸出結果

運行完成後,程序會生成以下文件:

  1. fer2013_cnn_model.h5 - 訓練好的模型文件
  2. training_history.png - 訓練過程的準確率和損失曲線
  3. confusion_matrix.png - 混淆矩陣可視化
  4. 控制台輸出 - 包含測試準確率和詳細分類報告

性能評估

程序會自動計算並顯示:

  • 測試集準確率
  • 每種情緒的精度、召回率和F1分數
  • 混淆矩陣可視化
  • 訓練和驗證的準確率/損失曲線

注意事項

  1. 內存使用: 確保有足夠的RAM來處理圖像數據
  2. 訓練時間: 完整訓練可能需要數小時,取決於硬件配置
  3. GPU支持: GPU版本需要安裝CUDA和cuDNN
  4. 數據路徑: 確保數據集路徑正確設置

故障排除

常見問題

Q: 出現內存不足錯誤 A: 嘗試減小BATCH_SIZE或使用更小的圖像尺寸

Q: 訓練速度很慢 A: 檢查是否正確安裝了GPU版本的TensorFlow

Q: 找不到數據集 A: 確保fer2013文件夾在正確的位置,並檢查子文件夾結構

貢獻

歡迎提交Issue和Pull Request來改進這個項目!

許可證

請查看LICENSE文件了解詳細的許可證信息。

About

Build a CNN model with TensorFlow ImageDataGenerator for FER2013 facial emotion recognition and evaluate using accuracy, loss, and confusion matrix

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages