Instructions to use SHolic/hurocup-yolo-models with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use SHolic/hurocup-yolo-models with ultralytics:
from huggingface_hub import hf_hub_download from ultralytics import YOLO # pick the weights file from this repo's "Files and versions" tab weights = hf_hub_download("SHolic/hurocup-yolo-models", "<weights>.pt") model = YOLO(weights) source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
HuroCup YOLO Models
YOLO26 detectors for five FIRA HuroCup events (archery, basketball, marathon, weight lifting, united soccer). They are the perception models of the visionβcontrol architecture described in Efficient Integration of Vision and Control for Resource-Constrained Humanoid Robots, deployed on a ROBOTIS OP3 and a Hiwonder AiNex.
The training images and labels are in SHolic/hurocup-yolo-dataset.
Models
Every run is a YOLO26 model trained with Ultralytics 8.4.80 for 100 epochs at batch size 16. Each directory holds the
best.pt weights, the OpenVINO and ncnn exports of best.pt, and the training record (args.yaml, results.csv,
curves and confusion matrices).
Deployed models (imgsz 320)
| Directory | Event | Classes | Base | Deployed on |
|---|---|---|---|---|
archery |
Archery | Target |
yolo26n |
OP3, AiNex |
basketball |
Basketball | Ball, Basket |
yolo26n |
OP3, AiNex |
marathon |
Marathon | forward, left, right |
yolo26n |
OP3 |
marathon_marker |
Marathon | marker |
yolo26n |
AiNex |
weight_lifting |
Weight lifting | Bar |
yolo26n |
OP3, AiNex |
united_soccer_clean |
United soccer | Ball |
yolo26n |
OP3, AiNex |
The two platforms use different marathon models. The OP3 classifies the three direction signs directly. The AiNex is
about 350 mm tall, so its camera sits low and a distant arrow subtends too few pixels to classify. It therefore runs the
class-agnostic marathon_marker detector, trained on AprilTags and arrow signs as a single marker class, which keeps
the marker trackable at range; AprilTag detection and arrow classification take over the turn decision once the robot
is close.
Ablation and auxiliary runs
| Directory | Purpose | Base | imgsz |
|---|---|---|---|
archery_640, basketball_640, weight_lifting_640 |
Input-resolution comparison | yolo26n |
640 |
archery_s, basketball_s |
Model-capacity comparison | yolo26s |
320 |
united_soccer |
Three-class united soccer detector (obstacle, football, goalpost) |
yolo26n |
320 |
The united soccer model used on both platforms, and referred to as united_soccer in the paper, is
united_soccer_clean. The three-class united_soccer run is not part of the reported results.
Accuracy of the deployed models
Best epoch by Ultralytics fitness, on each event's validation split (number of validation images in brackets).
| Model | mAP@0.5 | mAP@0.5β0.95 | Precision | Recall |
|---|---|---|---|---|
archery (17) |
0.995 | 0.993 | 0.992 | 1.000 |
basketball (15) |
0.987 | 0.843 | 0.940 | 0.951 |
marathon (45) |
0.981 | 0.894 | 0.930 | 0.942 |
weight_lifting (15) |
0.991 | 0.766 | 0.937 | 0.992 |
united_soccer_clean (15) |
0.988 | 0.842 | 0.969 | 0.933 |
marathon_marker (7) |
0.813 | 0.447 | 0.857 | 0.806 |
Each event has 50β300 self-collected images (see the dataset card), so these figures describe fit to a small, single-site dataset rather than general-purpose detection accuracy.
Files
<run>/
βββ args.yaml training arguments
βββ results.csv, results.png per-epoch metrics
βββ Box*_curve.png, confusion_matrix*.png, labels.jpg
βββ weights/
βββ best.pt PyTorch weights (best epoch)
βββ last.pt PyTorch weights (last epoch)
βββ best_openvino_model/ OpenVINO IR, used on the OP3 (Intel i3-6100U)
βββ best_ncnn_model/ ncnn, used on the AiNex (Raspberry Pi)
All exports were made with Ultralytics 8.4.80 at imgsz 320 (640 for the _640 runs), with end2end: false, so NMS is
not part of the exported graph.
Usage
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
path = hf_hub_download("SHolic/hurocup-yolo-models", "archery/weights/best.pt")
model = YOLO(path)
results = model.predict("image.jpg", imgsz=320)
To use an export, download its whole directory and pass the directory to YOLO:
from huggingface_hub import snapshot_download
from ultralytics import YOLO
root = snapshot_download("SHolic/hurocup-yolo-models", allow_patterns="archery/weights/best_ncnn_model/*")
model = YOLO(f"{root}/archery/weights/best_ncnn_model")
On the robots the models run with Ultralytics 8.4.45 and OpenVINO 2026.1.0 (CPU plugin) on the OP3, and Ultralytics 8.1.31 and ncnn 1.0.20260526 on the AiNex.
Limitations
- Trained on 50β300 images per event, collected in one laboratory under its lighting, with the competition props used there. Expect lower accuracy on other fields, props or lighting.
- The models detect competition objects only; they are not general-purpose detectors.
basketballloses accuracy at high IoU thresholds (mAP@0.5β0.95 0.843), which follows from the 320 input size.
License
The models were trained with Ultralytics and are released under AGPL-3.0, the license of the Ultralytics framework.
Citation
@article{sheng2026efficient,
author = {Sheng, Haoliang and Zheng, Xingyu and Lau, Meng Cheng},
title = {Efficient Integration of Vision and Control for Resource-Constrained Humanoid Robots},
journal = {IEEE Access},
year = {2026},
note = {Under review}
}
This work builds on our earlier vision system:
@article{lau2026modular,
author = {Lau, Meng Cheng and Pottier, Nicolas},
title = {A Modular Vision System for Practical Object Detection on Resource-Constrained Humanoid Robots},
journal = {Biomimetics},
volume = {11},
number = {6},
pages = {363},
year = {2026},
doi = {10.3390/biomimetics11060363}
}
- Downloads last month
- 686