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
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Space using steven0226/yolo26m-obb-dota 1