Skip to content

Real-time facial emotion recognition using ResNet50 (65.59% accuracy on FER2013 dataset). Detects 7 emotions via webcam with PyTorch, MediaPipe face detection, FP16 GPU optimization,

Notifications You must be signed in to change notification settings

Prasaderp/ResNet50-Emotion-Recognition-FER2013

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎭 Real-Time Facial Emotion Recognition with ResNet50

High-performance real-time facial emotion recognition system using ResNet50 architecture, trained on FER2013 dataset.

Python 3.8+ PyTorch OpenCV License: MIT

Features β€’ Installation β€’ Usage β€’ Performance β€’ Dataset


πŸŽ₯ Demo

Emotion_Recognition.mp4

Real-time emotion detection running at 30+ FPS


πŸ“‹ Overview

A production-ready system that identifies 7 distinct facial emotions through webcam feeds in real-time. Built on custom ResNet50 architecture achieving 65.59% validation accuracy on the FER2013 dataset.

✨ Key Features

πŸš€ Real-time Processing

  • 30+ FPS on GPU
  • Optimized inference pipeline
  • FP16 precision support

⚑ High Performance

  • 65.59% validation accuracy
  • ~80% training accuracy
  • Minimal latency

🎯 Seven Emotions

  • Neutral β€’ Happiness β€’ Sadness
  • Surprise β€’ Fear β€’ Disgust β€’ Anger

πŸ› οΈ Production Ready

  • Temporal smoothing
  • Threaded capture
  • MediaPipe face detection

πŸ—οΈ Architecture

Model: Custom ResNet50 with Bottleneck blocks [3, 4, 6, 3]

                                            Input (224Γ—224Γ—3)
                                                    ↓
                                Conv2dSame(7Γ—7) β†’ BatchNorm β†’ ReLU β†’ MaxPool
                                                    ↓
                                    ResBlock Layer 1 (64 channels)
                                                    ↓
                                    ResBlock Layer 2 (128 channels)
                                                    ↓
                                    ResBlock Layer 3 (256 channels)
                                                    ↓
                                    ResBlock Layer 4 (512 channels)
                                                    ↓
                            AdaptiveAvgPool β†’ FC(2048β†’512) β†’ FC(512β†’7) β†’ Softmax
                                                    ↓
                                        Output (7 emotion classes)

πŸŽ“ Training Configuration

Parameter Value
Optimizer Adam (lr=0.001, weight_decay=0.0001)
Scheduler ReduceLROnPlateau (factor=0.5, patience=3)
Batch Size 64
Epochs 50
Augmentation Flip, Rotation (Β±15Β°), Brightness/Contrast (0.8-1.2x)

πŸ“Š Performance

Training Curves

Training Progress Visualization

πŸ“ˆ Metrics

Metric Value Description
🎯 Validation Accuracy 65.59% FER2013 test set
πŸ“š Training Accuracy 80.00% FER2013 train set
⚑ Speed (GPU) 30+ FPS NVIDIA GPU (FP16)
πŸ’» Speed (CPU) 10-15 FPS Intel/AMD CPU
πŸ“¦ Model Size 90 MB PyTorch .pt format
πŸ”’ Parameters ~23.5M Trainable params

πŸ“š Dataset

Dataset Statistics:

  • πŸ“Š Training: ~28,709 images
  • βœ… Testing: ~3,589 images
  • 🎭 Classes: 7 emotions
  • πŸ“ Resolution: 48Γ—48 β†’ 224Γ—224

Emotion Distribution:

  • 😐 Neutral
  • 😊 Happiness
  • 😒 Sadness
  • 😲 Surprise
  • 😨 Fear
  • 🀒 Disgust
  • 😠 Anger

Note: Images are grayscale 48Γ—48 pixels, upscaled to 224Γ—224 RGB for training.


πŸš€ Installation

Prerequisites

βœ“ Python 3.8+
βœ“ CUDA-compatible GPU (recommended)
βœ“ Webcam for real-time inference

Quick Setup

1️⃣ Clone repository

git clone https://github.com/yourusername/FER2013-ResNet50-Emotion-Recognition.git
cd FER2013-ResNet50-Emotion-Recognition

2️⃣ Install uv (fast package manager)

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

3️⃣ Create environment and install dependencies

uv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
uv pip install -r requirements.txt

4️⃣ Add pre-trained model

Place the trained model file in the models/ directory:

models/FER_static_ResNet50_AffectNet.pt

πŸ’‘ Tip: Model file size ~90MB. Available on request or train your own using the notebook.


πŸ’» Usage

🎬 Real-Time Detection

Run the emotion recognition system:

python realtime_facial_analysis.py

⌨️ Controls: Press q to quit

πŸ“Ί Output:

  • βœ… Real-time video feed with emotion labels
  • πŸ“Š Confidence scores for each prediction
  • 🎯 Face bounding boxes with tracking
  • ⚑ FPS counter for performance monitoring

πŸ§ͺ Training Custom Model

Open training notebook in Jupyter:

jupyter notebook model_trainign_resnet.ipynb

Contains: Complete pipeline including data loading, model training, evaluation, and export.


πŸ“ Project Structure

FER2013-ResNet50-Emotion-Recognition/
β”‚
β”œβ”€β”€ πŸ“‚ models/
β”‚   β”œβ”€β”€ FER_static_ResNet50_AffectNet.pt    # Trained model weights
β”‚   └── training_curves.png                 # Training visualization
β”‚
β”œβ”€β”€ 🐍 realtime_facial_analysis.py          # Real-time inference script
β”œβ”€β”€ πŸ““ model_trainign_resnet.ipynb          # Training notebook (Colab/Jupyter)
β”œβ”€β”€ πŸ“‹ requirements.txt                     # Python dependencies
β”œβ”€β”€ 🚫 .gitignore                           # Git ignore rules
└── πŸ“– README.md                            # Documentation


βš™οΈ Technical Details

πŸ–ΌοΈ Image Preprocessing

1. Resize to 224Γ—224 (INTER_NEAREST)
2. Convert BGR β†’ RGB color space
3. Mean normalization: [R: 91.49, G: 103.88, B: 131.09]
4. Convert to PyTorch tensor (CΓ—HΓ—W)

πŸ”§ Performance Optimizations

Optimization Description Benefit
FP16 Precision Half-precision on GPU 2x faster inference
CuDNN Auto-tuning Optimal conv algorithms 10-20% speedup
Downscaled Detection 50% resolution for face detection 50% faster detection
Threaded Capture Non-blocking webcam stream Eliminates I/O bottleneck
Temporal Smoothing 10-frame moving average Stable predictions

Result: 30+ FPS on NVIDIA GPU β€’ 10-15 FPS on CPU


πŸ“– Citation

If you use this project in your research or applications, please cite:

@software{fer2013_resnet50,
  title={Real-Time Facial Emotion Recognition with ResNet50},
  author={Your Name},
  year={2024},
  url={https://github.com/yourusername/FER2013-ResNet50-Emotion-Recognition}
}

Dataset Citation

@inproceedings{goodfellow2013challenges,
  title={Challenges in representation learning},
  author={Goodfellow, Ian J and others},
  booktitle={ICONIP},
  year={2013}
}

πŸ“œ License

MIT License - see LICENSE file for details.


πŸ™ Acknowledgments

  • FER2013 Dataset - ICML 2013 Challenges in Representation Learning
  • ResNet Architecture - He et al., "Deep Residual Learning for Image Recognition"
  • MediaPipe - Google's ML solutions for face detection
  • PyTorch - Facebook AI Research

⭐ Star this repository if you find it helpful!

Built with ❀️ using PyTorch and ResNet50

Report Bug β€’ Request Feature

About

Real-time facial emotion recognition using ResNet50 (65.59% accuracy on FER2013 dataset). Detects 7 emotions via webcam with PyTorch, MediaPipe face detection, FP16 GPU optimization,

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published