| --- |
| license: mit |
| tags: |
| - facial-expression-recognition |
| - action-units |
| - valence-arousal |
| - affective-computing |
| - abaw |
| - rectified-flow |
| - dinov3 |
| pipeline_tag: image-classification |
| --- |
| |
| # AffectFlow-DINO |
|
|
| Uncertainty-aware multi-task facial affect estimation for the **11th ABAW Multi-Task Learning |
| challenge**: DINOv3 backbone + deterministic VA/expression/AU heads + a conditional |
| rectified-flow head over the joint 22-dimensional affect vector. |
|
|
| Code, training scripts, and the full 28-experiment ablation study: |
| **[github.com/Bekhouche/AffectFlow-DINO](https://github.com/Bekhouche/AffectFlow-DINO)**. |
|
|
| **Paper:** [AffectFlow-DINO: Uncertainty-Aware Multi-Task Affect Estimation via Conditional |
| Rectified Flow](https://arxiv.org/abs/2607.13250) — Salah Eddine Bekhouche, Abdellah Zakaria |
| Sellam, Fadi Dornaika, Abdenour Hadid. arXiv:2607.13250, 2026. |
|
|
| ## Quickstart |
|
|
| ```bash |
| pip install torch torchvision transformers huggingface_hub pillow |
| git clone https://github.com/Bekhouche/AffectFlow-DINO.git && cd AffectFlow-DINO |
| python inference.py --model finetune-flow-retune-b10 --image face.jpg |
| ``` |
|
|
| ## Models in this repo |
|
|
| Each subfolder is one checkpoint: `model.pt` (weights + architecture config) plus, where |
| applicable, `au_thresholds.json` and/or `expr_weights.json` post-hoc calibration files that |
| `inference.py` applies automatically. |
|
|
| | Folder | Backbone | Best decode | P_MTL (calibrated) | P_VA | P_EXPR | P_AU | |
| |---|---|---|---|---|---|---| |
| | [`finetune-flow-retune-b10`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/finetune-flow-retune-b10) | ViT-S/16, fine-tuned | Det | **1.177** | 0.325 | 0.350 | 0.502 | |
| | [`vitb-finetune`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/vitb-finetune) | ViT-B/16, fine-tuned | Det | 1.116 | 0.354 | 0.255 | 0.507 | |
| | [`finetune-flow-retune-b05`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/finetune-flow-retune-b05) | ViT-S/16, fine-tuned | Det / Flow | 1.062 / 0.956 | 0.291 | 0.303 | 0.469 | |
| | [`finetune`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/finetune) | ViT-S/16, fine-tuned | Det | 1.101 | 0.318 | 0.285 | 0.497 | |
| | [`au-posw-cw`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/au-posw-cw) | ViT-S/16, frozen | Det | 0.890 (no cal.) | 0.211 | 0.240 | 0.439 | |
| | [`psp`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/psp) | ViT-S/16, frozen (patch soft-pool) | Det | 0.859 (no cal.) | 0.235 | 0.236 | 0.389 | |
| | [`affectflow-base`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/affectflow-base) | ViT-S/16, frozen | Flow | 0.888 | 0.237 | 0.210 | 0.441 | |
| | [`det-baseline`](https://huggingface.co/Bekhouche/AffectFlow-DINO/tree/main/det-baseline) | ViT-S/16, frozen | Det | 0.793 (no cal.) | 0.199 | 0.216 | 0.378 | |
|
|
| `P_MTL = P_VA + P_EXPR + P_AU` is the official ABAW MTL composite metric (P_VA = mean CCC of |
| valence/arousal, P_EXPR = expression macro-F1, P_AU = mean AU F1), evaluated on the s-Aff-Wild2 |
| validation split. Official challenge baseline: P_MTL = 0.450. |
|
|
| These 8 checkpoints are a curated subset of the ~30 ablation runs behind the paper — one per |
| architecturally distinct configuration. The full ablation table, including sweeps that reused |
| one of these architectures with different loss weights/regularization, is in the GitHub repo's |
| [EXPERIMENTS.md](https://github.com/Bekhouche/AffectFlow-DINO/blob/main/EXPERIMENTS.md). |
|
|
| ## Input / output |
|
|
| - Input: a cropped, roughly frontal face image, resized to 224x224 and ImageNet-normalized |
| (handled automatically by `inference.py`). |
| - Output: valence, arousal in `[-1, 1]`; one of 8 expressions (Neutral, Anger, Disgust, Fear, |
| Happiness, Sadness, Surprise, Other); a subset of 12 active Action Units (AU1, AU2, AU4, AU6, |
| AU7, AU10, AU12, AU15, AU23, AU24, AU25, AU26). |
| - Two decode modes: `deterministic` (task heads directly) or `flow` (average of N sampled |
| rectified-flow trajectories — enables uncertainty estimation via trajectory spread). |
|
|
| ## Limitations |
|
|
| Trained and validated only on s-Aff-Wild2 (in-the-wild but frame-level, no temporal context). |
| Expression prediction remains the weakest task (P_EXPR <= 0.35): Fear and Sadness are rare |
| classes that only partially recover under calibration. Not evaluated on demographic subgroups; |
| treat outputs as research signals, not clinical or high-stakes decisions. |
| |
| ## Citation |
| |
| ```bibtex |
| @article{bekhouche2026affectflowdino, |
| title = {AffectFlow-DINO: Uncertainty-Aware Multi-Task Affect Estimation via Conditional Rectified Flow}, |
| author = {Bekhouche, Salah Eddine and Sellam, Abdellah Zakaria and Dornaika, Fadi and Hadid, Abdenour}, |
| journal = {arXiv preprint arXiv:2607.13250}, |
| year = {2026} |
| } |
| ``` |
| |
| ## License |
| |
| MIT. |
| |