FER / MEK checkpoints (ResNet-18/34)
7-class facial-expression recognition checkpoints for MEK (Mine Extra Knowledge, Zhang et al., NeurIPS 2023, arXiv:2310.19636) re-implemented on torchvision ResNet-18/34. Trained and evaluated on RAF-DB and FER-2013 under a leakage-free validation protocol (config selected on a 10% val split; test reported only). Headline metric: mean-class accuracy (unweighted mean of per-class recalls), the right objective under severe class imbalance.
Code: https://github.com/quocbaohust/CV-Project-HUST (replace with your repo URL).
Checkpoints
| File | Description | Test acc | Mean-class | Backbone |
|---|---|---|---|---|
mek_resnet18_rafdb_msceleb_best.pth |
RAF-DB - MEK ResNet-18 - MS-Celeb-1M backbone (headline best, verified) | 0.8641 | 0.8137 | MS-Celeb-1M |
mek_resnet18_rafdb_imagenet_best.pth |
RAF-DB - MEK ResNet-18 - ImageNet backbone | 0.8585 | 0.7910 | ImageNet |
mek_resnet34_rafdb_imagenet_best.pth |
RAF-DB - MEK ResNet-34 - ImageNet backbone (best overall acc) | 0.8657 | 0.7892 | ImageNet |
mek_resnet34_fer2013_imagenet_best.pth |
FER-2013 - MEK ResNet-34 - ImageNet backbone (best FER, verified) | 0.7205 | 0.6960 | ImageNet |
mek_resnet18_fer2013_imagenet_best.pth |
FER-2013 - MEK ResNet-18 - ImageNet backbone | 0.7081 | 0.6928 | ImageNet |
mek_webcam_resnet18_rafdb_clahe_facecrop_best.pth |
RAF-DB - webcam-robust MEK ResNet-18 - MS-Celeb-1M + EMA + face-crop/CLAHE (demo.py) | 0.8625 | 0.8083 | MS-Celeb-1M |
All files are MEKResNet state_dicts (7 classes, 224x224 input). The rafdb_msceleb
and fer_rn34 checkpoints are end-to-end verified: re-running them reproduces the
reported overall / mean-class / per-class accuracy to four decimals.
Usage
import torch
from huggingface_hub import hf_hub_download
from mek.model import MEKResNet # from the project repo
path = hf_hub_download("ToiTenBao/fer-mek-checkpoints", "mek_resnet18_rafdb_msceleb_best.pth")
model = MEKResNet("resnet18", num_classes=7, pretrained=False)
model.load_state_dict(torch.load(path, map_location="cpu", weights_only=True))
model.eval()
logits, attn = model(images) # images: [B,3,224,224], ImageNet-normalised
RAF-DB class index -> emotion: 0=surprise 1=fear 2=disgust 3=happy 4=sad
5=angry 6=neutral (folders 1..7 sorted as strings). FER-2013 classes are the folder
names in alphabetical order: angry, disgust, fear, happy, neutral, sad, surprise.