YOLOv8s MMA Fighter Detector
Fine-tuned YOLOv8s for detecting fighters in MMA and boxing footage. Part of the fight-judge project β an AI pipeline for automated combat sports scoring.
Model Description
This model detects the bounding box(es) of fighter(s) in a video frame. It is the first stage in the fight-judge pipeline, providing fighter crops that feed into the downstream pose estimation model.
- Architecture: YOLOv8s (small)
- Task: Object detection (single class:
fighter) - Input: RGB image, 640Γ640 px
- Output: Bounding boxes
[x_center, y_center, width, height](normalized), confidence scores - Base model:
yolov8s.pt(COCO pretrained) - Finetuned on: MMA Fighter Detection Dataset β 5,106 images, 20 UFC fights
Training
| Parameter | Value |
|---|---|
| Epochs | 100 |
| Batch size | 64 (multi-GPU) |
| Image size | 640 |
| Optimizer | Auto (SGD) |
| LR initial | 0.01 |
| LR final | 0.01 (cosine off) |
| Warmup epochs | 3 |
| Weight decay | 0.0005 |
| AMP | true |
| Hardware | 2Γ GPU (Kaggle) |
| Training time | ~1.2 hours |
Augmentations: HSV jitter, horizontal flip (p=0.5), scale, mosaic, random erasing (p=0.4), RandAugment.
Evaluation Results
Evaluated on the held-out test split of the MMA Fighter Detection Dataset.
| Metric | Value |
|---|---|
| mAP50-95 (box) | 0.9836 |
| mAP50 (box) | 0.9950 |
| Precision | 0.9983 |
| Recall | 0.9990 |
| Val box loss | 0.1864 |
| Val cls loss | 0.1317 |
Training converged smoothly. mAP50-95 reached 0.72 by epoch 4 and exceeded 0.98 by epoch 24, stabilizing around 0.983β0.984 in the final epochs.
Dataset
MMA Fighter Detection Dataset
- 5,106 images extracted from 20 UFC fights (stand-up phases only)
- 640Γ640 px, YOLO format, single class:
fighter - ~2 fighter instances per image (10,186 total annotations)
- Published on Mendeley Data (CC BY-NC-SA 4.0)
- Fights span multiple weight classes β Poirier, Adesanya, Pereira, Topuria, Gaethje, and others
Split:
| Split | Images |
|---|---|
| Train | 3,635 |
| Valid | 980 |
| Test | 491 |
Usage
from ultralytics import YOLO
model = YOLO("hasanfaesal/yolov8s-mma-fighter-detector")
results = model("fight_frame.jpg")
results[0].show()
# Batch inference on a video
results = model("fight.mp4", stream=True)
for r in results:
boxes = r.boxes.xyxy # [x1, y1, x2, y2]
confs = r.boxes.conf
Limitations
- Trained exclusively on UFC stand-up footage. Performance may degrade on:
- Ground game sequences (grappling, guard, mount)
- Non-UFC broadcasts with different camera setups or overlays
- Boxing-specific camera angles (ringside, overhead)
- Single-class model β does not distinguish between the two fighters (no ReID)
- Not designed for crowd scenes or multi-person environments outside of 1v1 combat
Pipeline Context
[This model] β YOLOv11x-pose MMA Pose Estimator β Action Recognition (planned)
Fighter bounding boxes from this model are used as inputs to the top-down pose estimation stage. See the fight-judge repository for the full pipeline.
Citation
If you use this model or the dataset, please cite:
@misc{faisal2025mmafighter,
author = {Hasan Faisal},
title = {MMA Fighter Detection Dataset},
year = {2025},
publisher = {Mendeley Data},
version = {V1},
doi = {10.17632/c456bnk8bm.1}
}
License
Code and model weights: MIT License Dataset: CC BY-NC-SA 4.0
- Downloads last month
- 4