Instructions to use steven0226/yolo26m-obb-dota with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use steven0226/yolo26m-obb-dota with ultralytics:
# Couldn't find a valid YOLO version tag. # Replace XX with the correct version. from ultralytics import YOLOvXX model = YOLOvXX.from_pretrained("steven0226/yolo26m-obb-dota") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
YOLO26m-OBB fine-tuned on DOTAv1
Fine-tuned yolo26m-obb (oriented bounding box detection) on
a re-split of the DOTAv1 aerial imagery dataset. Part of
a training-to-deployment portfolio project โ full writeup, HBB-vs-OBB analysis, and
ONNX/TensorRT benchmarks alongside the training/eval code and notebooks (source repo not yet
public). Try the live browser-side demo:
https://huggingface.co/spaces/steven0226/yolo26-obb-aerial-detection
Model description
- Task: oriented (rotated) bounding box detection, 15 DOTA classes (plane, ship, storage tank, baseball diamond, tennis court, basketball court, ground track field, harbor, bridge, large vehicle, small vehicle, helicopter, roundabout, soccer ball field, swimming pool)
- Base checkpoint: Ultralytics' official
yolo26m-obb.pt(already DOTAv1-trained; see Training data below for what "fine-tuned" means here) - Input: 1024ร1024 RGB
- Params: 21.2M / GFLOPs: 183 (at 1024)
Training data
DOTAv1, re-tiled with ultralytics.data.split_dota.split_trainval at scales [0.8, 1.2]
(gap 500) โ 62,030 train / 21,271 val tiles at 1024px. Trained on a Colab A100 for 28/30
epochs, early-stopped (patience=15), best checkpoint at epoch 13.
Evaluation
Baseline = official yolo26m-obb.pt, evaluated on this repo's own val split for an apples-to-apples
comparison (not the officially published test-split numbers โ see caveat below).
| model | split | mAP50 | mAP50-95 |
|---|---|---|---|
| yolo26m-obb.pt (official, published) | DOTAv1 test | 81.0 | 55.3 |
| yolo26m-obb.pt (official, this repo's val) | DOTAv1 val | 78.2 | 63.3 |
| this fine-tuned checkpoint | DOTAv1 val | 78.2 | 63.1 |
Fine-tuning moved the needle by essentially nothing under matched conditions (ฮ mAP50 -0.05pt,
ฮ mAP50-95 -0.13pt) โ expected, since the base checkpoint was already DOTAv1-converged; this
run quantifies that ceiling rather than claiming a large improvement. Full per-class breakdown
and training-curve analysis in the project repo's docs/training_results.md.
Caveat: the top row uses DOTA's own test-split evaluation pipeline (full-image stitching);
the bottom two rows use this repo's own val-split tiling and ultralytics evaluation โ not
directly comparable to the top row, only to each other.
Deployment
Also exported to ONNX and a TensorRT FP16 engine (Tesla T4), see results.png /
confusion_matrix_normalized.png / results.csv in this repo's file list and the project
README's benchmark table for latency/FPS numbers.
Live demo (nano variant, 100% browser-side via ONNX Runtime Web, no server): https://huggingface.co/spaces/steven0226/yolo26-obb-aerial-detection
Intended use & limitations
- Academic / research / portfolio use. The DOTA dataset license prohibits commercial use โ this restriction carries over to any weights derived from it.
- Code is Ultralytics (AGPL-3.0); these fine-tuned weights are a derivative work and carry the same license.
- Trained and evaluated on DOTAv1's specific tiling scheme; performance on differently-tiled or differently-sourced aerial imagery is untested.
Usage
from ultralytics import YOLO
model = YOLO("best.pt") # this repo's fine-tuned checkpoint
results = model.predict("aerial_image.jpg", imgsz=1024)
results[0].show() # draws rotated boxes
License
- Code: AGPL-3.0 (Ultralytics)
- Weights: derivative of AGPL-3.0 Ultralytics code, same license
- Training data (DOTA): academic use only, commercial use prohibited
- Downloads last month
- 358