ViTFERPP_NextViT_Small / MODEL_CARD.md
unknown
Initial commit of NextViT-Small FER repository including Model Card and checkpoint
3c93691
|
Raw
History Blame Contribute Delete
6.08 kB
# Model Card: NextViT-Small for Facial Expression Recognition (FER)
This model card provides comprehensive details, training configurations, and performance benchmarks for the fine-tuned **NextViT-Small** model adapted for Facial Expression Recognition (FER).
## Model Details
* **Model Name:** NextViT-Small FER
* **Architecture:** NextViT-Small (`nextvit_small`), a hybrid CNN-Transformer vision model designed for high-performance and hardware-efficient inference on edge devices.
* **Developer:** Fine-tuned locally.
* **Task:** Multi-class image classification for Facial Expression Recognition (7 classes).
* **Number of Classes:** 7 (`angry`, `disgust`, `fear`, `happy`, `neutral`, `sad`, `surprise`).
* **Parameters:** ~28 million parameters (~112 MB for float32 weights-only; checkpoint size is ~381.75 MB including optimizer state).
* **Base Model Weight Source:** Pre-trained on ImageNet (`ckpt5.pth`).
## Training Configuration & Hyperparameters
The model was fine-tuned for 50 epochs on a custom facial expression dataset using the following training parameters:
| Hyperparameter | Value | Description |
| :--- | :--- | :--- |
| **Optimizer** | AdamW | Weight decay set to `0.01` |
| **Learning Rate (Base)** | `2e-4` | Cosine learning rate scheduler with warmup |
| **Epochs** | `50` | Total training epochs |
| **Batch Size** | `128` | Per-GPU batch size (effective batch size of 256 on 2 GPUs) |
| **Input Image Size** | `224 x 224` | Bilinear resize and normalized to ImageNet statistics |
| **Data Augmentations** | RandAugment (`rand-m5-mstd0.5-inc2`), Random Erasing (`reprob 0.1`) | Mixup and Cutmix were disabled (`mixup 0`, `cutmix 0`) |
| **Distributed Training** | PyTorch Distributed Data Parallel (DDP) | 2 GPUs (Distributed evaluation enabled, NCCL backend) |
| **Total Training Time** | `0:41:41` (41m 41s) | Training completed on a dual-GPU node |
---
## Evaluation Metrics & Performance
### 1. General Test Set Performance (12,957 Images)
At the end of training (Epoch 50), the model achieved the following performance on the full validation/test dataset:
* **Top-1 Accuracy:** **82.20%**
* **Top-5 Accuracy:** **99.04%**
* **Final Test Loss:** **0.739**
### 2. Detailed Test Split Performance (2,463 Images)
When evaluated on a dedicated test split of 2,463 samples, NextViT-Small achieved:
* **Overall Accuracy:** **83.88%**
* **Precision (Macro):** **75.92%**
* **Precision (Weighted):** **83.82%**
* **Recall (Macro):** **73.93%**
* **Recall (Weighted):** **83.88%**
* **F1-Score (Macro):** **74.61%**
* **F1-Score (Weighted):** **83.78%**
#### Per-Class Performance Breakdown:
| Class | Class ID | Precision | Recall | F1-Score | Support |
| :--- | :---: | :---: | :---: | :---: | :---: |
| **happy** | 3 | 95.51% | 93.37% | 94.43% | 935 |
| **surprise** | 6 | 83.33% | 84.34% | 83.83% | 249 |
| **angry** | 0 | 79.38% | 83.01% | 81.15% | 153 |
| **neutral** | 4 | 77.84% | 81.89% | 79.81% | 519 |
| **sad** | 5 | 78.67% | 80.39% | 79.52% | 413 |
| **disgust** | 1 | 58.78% | 56.62% | 57.68% | 136 |
| **fear** | 2 | 57.89% | 37.93% | 45.83% | 58 |
---
### 3. Comparison with ViT-Small Baseline
NextViT-Small shows significant improvements over a standard vision transformer (ViT-Small) baseline evaluated on the same 2,463 image test split:
* **ViT-Small Accuracy:** **80.31%** (Macro F1-Score: **71.39%**)
* **NextViT-Small Accuracy:** **83.88%** (Macro F1-Score: **74.61%**)
* **Performance Gain:** **+3.57% Accuracy** improvement with NextViT-Small.
NextViT-Small demonstrates much stronger capability on classes with lower support (e.g. `angry`, `disgust`) due to its hybrid convolutional-attention structure, which excels in learning fine-grained local facial details.
---
## How to Use
To run inference using the trained NextViT-Small model, follow this example snippet:
```python
import os
import sys
import torch
from PIL import Image
from torchvision import transforms
# 1. Path setup: Add Next-ViT classification folder to path so timm can register nextvit_small
NEXTVIT_PATH = "/path/to/Next-ViT/classification" # Update as appropriate
sys.path.append(NEXTVIT_PATH)
import nextvit # registers 'nextvit_small' with timm
import timm
# 2. Load the model architecture and pretrained weights
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = timm.create_model("nextvit_small", num_classes=7)
checkpoint_path = "checkpoint_best.pth" # Update path to best checkpoint
checkpoint = torch.load(checkpoint_path, map_location=device)
if "model" in checkpoint:
model.load_state_dict(checkpoint["model"])
else:
model.load_state_dict(checkpoint)
model.to(device)
model.eval()
# 3. Define the image preprocessing transforms
image_processor = transforms.Compose([
transforms.Resize((224, 224), interpolation=transforms.InterpolationMode.BICUBIC),
transforms.ToTensor(),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
])
# 4. Run inference
class_names = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprise"]
def predict_expression(image_path):
img = Image.open(image_path).convert("RGB")
tensor = image_processor(img).unsqueeze(0).to(device)
with torch.no_grad():
outputs = model(tensor)
probs = torch.nn.functional.softmax(outputs, dim=-1)
pred_idx = torch.argmax(probs, dim=-1).item()
return class_names[pred_idx], probs[0][pred_idx].item()
# Example Prediction
# expression, confidence = predict_expression("test_face.jpg")
# print(f"Predicted Expression: {expression} ({confidence:.2%})")
```
---
## Intended Use & Limitations
* **Intended Use:** Facial Expression Recognition in user-facing applications (e.g. human-computer interaction, affective computing, user experience testing).
* **Limitations:** Performance on expressions with very low support (such as `fear` or `disgust`) remains relatively lower compared to well-represented expressions (like `happy` and `neutral`). Users should be cautious when deploying in scenarios sensitive to false negatives on these classes.