Kicky AI, RF-DETR-Seg-Small (football: ball / player / goal)
RF-DETR-Seg-Small instance segmentation model that detects ball, player, goal in amateur football clips. Distilled from SAM3 and NVIDIA LocateAnything-3B auto labels with zero manual annotation.
Built for the Build Small Hackathon (Hugging Face and Gradio), June 2026. Every model in the pipeline stays under the 32B parameter cap.
Licence and use
Research, testing and personal use only. Not for commercial use. This checkpoint is released under CC BY-NC 4.0.
The reason is the training labels. They were made by two teacher models, each under its own licence:
| Teacher | Licence | Commercial use |
|---|---|---|
| NVIDIA LocateAnything-3B | NVIDIA licence, "research or evaluation purposes only" | No |
| Meta SAM3 | SAM License | Yes, with Meta's use limits |
The model code and architecture come from RF-DETR by Roboflow, under its own licence.
Until 6 November 2026 this card said Apache-2.0. It was changed because of the LocateAnything-3B licence. The weights are provided as is, with no warranty. If you plan any commercial use, do your own legal review first.
Training footage
The frames come from one shooting practice session that the author filmed himself on a phone, at an amateur pitch, in October 2025. The people in it are the author and a friend. The labelled frames are in the kicky-ai-spf dataset. To ask for removal of any frame, open a discussion on this repo.
Results (held-out 12 clip test set)
| detector | goal | leg | pose capture |
|---|---|---|---|
| SAM3 + LocateAnything-3B (teacher) | 83% | 82% | 92% |
| this model (student) | 75% | 75% | 100% |
Real time, runs about 50x faster than the SAM3 and LocateAnything teacher. It beats the teacher on pose because the player masks are cleaner, and it recovers the ball on clips SAM3 missed entirely.
Use
from rfdetr import RFDETRSegSmall
m = RFDETRSegSmall(pretrain_weights="checkpoint_best_ema.pth")
det = m.predict(image, threshold=0.3) # classes: ball, player, goal
Classes: 0 ball, 1 player, 2 goal. Input resolution 384 px. Trained on about 1.8k auto
labelled frames.
No NVIDIA GPU (CPU or Mac)? Pass the device, or loading fails with "No CUDA GPUs are available":
m = RFDETRSegSmall(pretrain_weights="checkpoint_best_ema.pth", device="cpu")
Tested on 6 November 2026 with Python 3.12, torch 2.12.0, torchvision 0.27.0, transformers 5.10.2 and rfdetr 1.7.1. On CPU it loads in under 1 s and takes about 0.2 s per 1280x720 frame. Apple Silicon MPS is not tested.
Hardest part
The ball is 3 to 4 pixels wide and motion blurred at 30fps. Most of the pipeline work went into recovering it.
Links
- Demo Space: https://huggingface.co/spaces/build-small-hackathon/kicky-ai
- Dataset: https://huggingface.co/datasets/build-small-hackathon/kicky-ai-spf
- Writeup: https://dcrey7.substack.com/p/world-fut-coach
- Video demo: https://www.youtube.com/watch?v=knL8shghyBU
Credit
Originally published during the Build Small Hackathon at
build-small-hackathon/kicky-ai-rfdetr-seg. Mirrored here by the author, dcrey7.