Advanced CVPR for Biometrics
Facial Emotion Recognition using EfficientNetB3, VGG16, and classical CV pipelines
Facial biometric analysis pipeline combining deep learning classifiers, classical feature extraction (CLAHE + PCA), and a Flask inference API — trained on the FER dataset across 7 emotion classes.
Tech Stack
🧠 Models
EfficientNetB3 (Transfer Learning)
Pre-trained on ImageNet and fine-tuned on the FER dataset (28,709 training images, 7 classes). The classifier head uses dual BatchNorm layers and staged dropout to stabilize training on the imbalanced FER distribution.
EfficientNetB3 → BN → Dense(256, L2) → BN → Dropout(0.4) → Dense(128) → Dropout(0.3) → Softmax(7)
| Split | Accuracy |
|---|---|
| Train | 53.5% |
| Validation | 47.1% |
| Test | 69% (after full fine-tune) |
Training used ReduceLROnPlateau, EarlyStopping, and ModelCheckpoint with Adamax optimizer.
VGG16
Compared against EfficientNetB3 on the same FER pipeline. Used as a baseline to evaluate transfer learning depth vs. breadth trade-offs for low-resolution facial images (96×96).
🖼️ Classical CV Pipeline
- CLAHE (Contrast Limited Adaptive Histogram Equalization) via OpenCV for preprocessing low-contrast facial images before feature extraction
- PCA for dimensionality reduction of handcrafted features, used as a lightweight baseline alongside the deep models
🚀 Flask Inference API
A REST endpoint wraps the trained model for real-time emotion prediction from uploaded images:
POST /predict → { "emotion": "happy", "confidence": 0.87 }