LiteRT
Keras
English
tensorflow
emotion-recognition
resnet50
ckplus
rafdb
fine-tuning
computer-vision
deep-learning
facial-expression
affective-computing
Eval Results (legacy)
Instructions to use PSewmuthu/resnet50-emotion-recognition-ckplus-rafdb with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use PSewmuthu/resnet50-emotion-recognition-ckplus-rafdb with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://PSewmuthu/resnet50-emotion-recognition-ckplus-rafdb") - Notebooks
- Google Colab
- Kaggle
| language: en | |
| license: apache-2.0 | |
| library_name: tensorflow | |
| tags: | |
| - tensorflow | |
| - keras | |
| - emotion-recognition | |
| - resnet50 | |
| - ckplus | |
| - rafdb | |
| - fine-tuning | |
| - computer-vision | |
| - deep-learning | |
| - facial-expression | |
| - affective-computing | |
| - tflite | |
| model-index: | |
| - name: emotion_resnet50_model | |
| results: | |
| - task: | |
| type: image-classification | |
| dataset: | |
| type: dataset | |
| name: CK+ & RAF-DB | |
| metrics: | |
| - name: accuracy | |
| type: float | |
| value: 0.8165 | |
| inference: "Supports TensorFlow and TensorFlow Lite inference" | |
| # ๐ง Emotion Recognition Model โ ResNet50 (Fine-Tuned on CK+ and RAF-DB) | |
| ## ๐ Overview | |
| This repository presents a **fine-tuned ResNet50-based Emotion Recognition model** trained on the **CK+** and **RAF-DB** facial expression datasets. The model classifies facial emotions into seven categories and provides high accuracy and generalization through a two-phase fine-tuning process. Both **TensorFlow** and **TensorFlow Lite** versions are available for deployment on cloud and edge devices. | |
| This model forms a key component of an **AI-powered, emotion-aware sign language translation system**, enabling real-time emotion recognition and integration into affective computing pipelines. | |
| --- | |
| ## ๐งฉ Model Architecture | |
| The architecture is built on **ResNet50**, pre-trained on ImageNet, and fine-tuned in two stages: | |
| 1. **Stage 1 โ Frozen Base Training (10 Epochs):** | |
| - Convolutional layers frozen. | |
| - Only top dense layers trained to learn task-specific emotion representations. | |
| 2. **Stage 2 โ Unfrozen Base Fine-Tuning (30 Epochs):** | |
| - Entire base unfrozen with a lower learning rate. | |
| - Enables deep adaptation to emotion-related facial features. | |
| --- | |
| ## ๐ Datasets | |
| 1. **[CK+ Dataset (Kaggle)](https://www.kaggle.com/datasets/shareef0612/ckdataset)** | |
| 2. **[RAF-DB Dataset (Kaggle)](https://www.kaggle.com/datasets/shuvoalok/raf-db-dataset)** | |
| ### Dataset Preparation | |
| - Combined CK+ and RAF-DB datasets to increase emotion diversity. | |
| - Applied **extensive data augmentation** (rotation, flips, brightness, zoom, and shifts). | |
| - Ensured **balanced class distribution** post-augmentation. | |
| --- | |
| ## โ๏ธ Training Configuration | |
| | Parameter | Description | | |
| | ----------------- | ---------------------------------- | | |
| | **Base Model** | ResNet50 (Pre-trained on ImageNet) | | |
| | **Optimizer** | Adam | | |
| | **Learning Rate** | 1e-4 (unfrozen phase) | | |
| | **Loss Function** | Sparse Categorical Crossentropy | | |
| | **Batch Size** | 32 | | |
| | **Epochs** | 40 (10 + 30) | | |
| | **Image Size** | 224x224 | | |
| --- | |
| ## ๐ Performance Summary | |
| | Metric | Training | Validation | Testing | | |
| | ------------ | -------- | ---------- | ------- | | |
| | **Accuracy** | 98.43% | 86.05% | 81.65% | | |
| | **Loss** | 0.0610 | 0.7748 | 1.1962 | | |
| ### Classification Report | |
| | Class | Precision | Recall | F1-Score | | |
| | ----- | --------- | ------ | -------- | | |
| | 0 | 0.74 | 0.69 | 0.72 | | |
| | 1 | 0.53 | 0.49 | 0.51 | | |
| | 2 | 0.88 | 0.31 | 0.46 | | |
| | 3 | 0.93 | 0.90 | 0.91 | | |
| | 4 | 0.74 | 0.87 | 0.80 | | |
| | 5 | 0.77 | 0.75 | 0.76 | | |
| | 6 | 0.82 | 0.83 | 0.82 | | |
| **Overall Accuracy:** 81.65% | |
| **Weighted F1-Score:** 0.81 | |
| --- | |
| ## ๐ผ๏ธ Visualizations | |
| ### 1. Training Accuracy and Loss | |
| - **Graph 1:** Training and Validation Accuracy vs Epochs | |
|  | |
| - **Graph 2:** Training and Validation Loss vs Epochs | |
|  | |
| ### 2. Dataset Distributions | |
| - **Graph 3:** Original Dataset Class Distribution | |
|  | |
| - **Graph 4:** Balanced (Augmented) Dataset Class Distribution | |
|  | |
| ### 3. Evaluation Visuals | |
| - **Graph 5:** Multi-Class ROC Curves (AUC per class) | |
|  | |
| - **Graph 6:** Confusion Matrix (Heatmap) | |
|  | |
| - **Graph 7:** Sample Test Results (5 predictions per class) | |
|  | |
| These visualizations demonstrate consistent learning, balanced data, and strong class-wise recognition. | |
| --- | |
| ## ๐งฉ Model Files | |
| | File | Description | | |
| | ----------------------------------- | -------------------------------------------------------------- | | |
| | `emotion_resnet50_model.h5` | Full TensorFlow model (โ273 MB) | | |
| | `emotion_resnet50_optimized.tflite` | Optimized TensorFlow Lite model (โ23 MB) for mobile deployment | | |
| --- | |
| ## ๐งฐ Inference Example | |
| ```python | |
| import tensorflow as tf | |
| from tensorflow.keras.preprocessing import image | |
| import numpy as np | |
| # Load original model | |
| model_path = 'emotion_resnet50_model.h5' | |
| model = tf.keras.models.load_model(model_path) | |
| # Prepare input | |
| img = image.load_img('test_face.jpg', target_size=(224, 224)) | |
| input_data = np.expand_dims(image.img_to_array(img) / 255.0, axis=0) | |
| # Run inference | |
| pred = model.predict(input_data) | |
| classes = ['Angry', 'Disgust', 'Fear', 'Happy', 'Neutral', 'Sad', 'Surprise'] | |
| print("Original Model Prediction:", classes[np.argmax(pred)]) | |
| # Load and run TFLite optimized model | |
| tflite_model_path = 'emotion_resnet50_optimized.tflite' | |
| interpreter = tf.lite.Interpreter(model_path=tflite_model_path) | |
| interpreter.allocate_tensors() | |
| input_index = interpreter.get_input_details()[0]['index'] | |
| output_index = interpreter.get_output_details()[0]['index'] | |
| interpreter.set_tensor(input_index, input_data.astype(np.float32)) | |
| interpreter.invoke() | |
| output = interpreter.get_tensor(output_index) | |
| print("TFLite Model Prediction:", classes[np.argmax(output)]) | |
| ``` | |
| --- | |
| ## ๐ Key Features | |
| - Dual-dataset fine-tuning (CK+ + RAF-DB) | |
| - Data-balanced training via augmentation | |
| - High accuracy with stable generalization | |
| - Lightweight TensorFlow Lite version for edge devices | |
| - Ideal for integration in emotion-aware systems | |
| --- | |
| ## ๐ท๏ธ Tags | |
| `emotion-recognition` `resnet50` `facial-expression` `deep-learning` `tensorflow` `tflite` `ckplus` `rafdb` `computer-vision` `affective-computing` `fine-tuning` | |
| --- | |
| ## ๐ Citation | |
| ```bibtex | |
| @misc{pasindu_sewmuthu_abewickrama_singhe_2025, | |
| author = { Pasindu Sewmuthu Abewickrama Singhe }, | |
| title = { resnet50-emotion-recognition-ckplus-rafdb (Revision 3216038) }, | |
| year = 2025, | |
| url = { https://huggingface.co/PSewmuthu/resnet50-emotion-recognition-ckplus-rafdb }, | |
| doi = { 10.57967/hf/6653 }, | |
| publisher = { Hugging Face } | |
| } | |
| ``` | |
| --- | |
| ## ๐ค Author & Model Info | |
| **Author:** P.S. Abewickrama Singhe | |
| **Developed with:** TensorFlow + Keras | |
| **License:** Apache-2.0 | |
| **Date:** October 2025 | |
| **Email:** [apsewmuthu@gmail.com](mailto:apsewmuthu@gmail.com) | |