An Integrated Open-Source Stack for Vision-Based Autonomous Navigation of Wheeled Rovers: YOLOv8n marker detector

Checkpoint nav-arrows-v5 (arrow / cone).

Deployed detector of the open-source autonomy stack of the MSU Rover Team (repositories: https://github.com/KodII-rover). It detects two classes of visual navigation markers:

id class object
0 arrow 300×200 mm white plate with a black directional arrow
1 cone orange traffic cone (terminal target)

Arrow direction (left/right), distance and bearing are computed downstream from the box by the MSUROVERTEAM-CV library; the detector itself is class-only.

This is the checkpoint whose metrics are reported in the paper An Integrated Open-Source Stack for Vision-Based Autonomous Navigation of Wheeled Rovers (RiTA 2026).

Files

file content
best.pt Ultralytics YOLOv8n checkpoint, 6.27 MB, md5 b49cd6b4efa6abb38a8e85746ec5ef35
train_args.yaml, train_results.csv training configuration and per-epoch log
eval/summary.json, eval/val.log re-evaluation on the validation and test splits (17 Oct 2026)
eval/val/*.png, eval/test/*.png F1/PR/P/R curves and confusion matrices
data.yaml dataset layout for yolo val
bench_jetson.py TensorRT INT8 latency/FPS benchmark script for Jetson

Training

  • Base: yolov8n.pt (Ultralytics 8.3.228), input 640×640, SGD (auto), lr0 0.01, batch auto, patience 50.
  • Dataset: nav-arrows-v5 split of the public dataset (train 8 528 / val 2 744 / test 481 images; test: 541 arrows, 1 597 cones).
  • Stopped at epoch 197; best.pt is epoch 147 (best fitness). Trained 17–18 Nov 2025.

Evaluation (Ultralytics val, conf 0.001, IoU 0.7, imgsz 640)

split images instances P R mAP@0.5 mAP@0.5:0.95 AP@0.5 arrow / cone
val 2 744 4 706 0.865 0.770 0.826 0.612 0.937 / 0.714
test 481 2 138 0.834 0.627 0.720 0.532 0.738 / 0.703

Best-F1 operating point on val: F1 = 0.81 at confidence 0.258 (arrow P/R 0.92/0.89, cone P/R 0.81/0.65). Threshold and checkpoint were selected on the validation split; the test figures are the held-out estimate.

Usage

from ultralytics import YOLO
model = YOLO("best.pt")
res = model.predict("frame.jpg", conf=0.25, iou=0.45, imgsz=640)[0]
for b in res.boxes:
    print(res.names[int(b.cls)], float(b.conf), b.xyxy[0].tolist())

Reproduce the metrics (dataset folder laid out as in data.yaml):

yolo val model=best.pt data=data.yaml split=test imgsz=640
yolo val model=best.pt data=data.yaml split=val  imgsz=640

Export for Jetson (TensorRT INT8, calibrated on the validation split):

yolo export model=best.pt format=engine int8=True data=data.yaml imgsz=640

License

MIT, same as the MSUROVERTEAM-CV repository.

Downloads last month
27
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Evaluation results