| # MODEL_BUDGET.md | |
| Running sum must stay β€ 32B params. | |
| | Component | Model | Params | | |
| |---|---|---| | |
| | 2D Pose (primary) | YOLO26l-Pose | 0.026B | | |
| | 2D Pose (HQ alt) | YOLO26x-Pose | 0.058B | | |
| | 2D Pose (fallback) | Sapiens2 Pose | 0.6B | | |
| | Segmentation | SAM 3.1 base | 0.85B | | |
| | 3D Body (optional) | SAM 3D Body DINOv3-H+ | 0.84B | | |
| | Scoring Head | ST-GCN (pyskl) | 0.03B | | |
| | Judge/Classifier | Qwen3-VL-8B-Instruct (Q4_K_M GGUF + F16 mmproj, llama.cpp) | 8B | | |
| | Retrieval | Qwen3-VL-Embedding-8B | 8B | | |
| | **Total** | | **~18.37B** | | |
| Headroom: ~13.63B under 32B cap. | |
| Note: The two Qwen3-VL-8B models share a backbone (counted separately here for safety). | |
| Only one pose backend runs at a time (YOLO or Sapiens2, not both). | |
| Judge/Classifier serving: `scripts/serve_judge.sh` (llama-server, port 8080). | |
| Default GGUF: `Qwen/Qwen3-VL-8B-Instruct-GGUF` β `checkpoints/qwen3-vl/` (gitignored). | |
| Fine-tuned swap: set `FORMSCOUT_JUDGE_GGUF` (+ `FORMSCOUT_JUDGE_MMPROJ`) β no code change. | |