Three weeks after v0.2.0, Oriented-Det v0.3.1 is on PyPI and tagged on GitHub. This is the dataset + deploy chapter (0.3.0) plus a same-day patch: Rotated RetinaNet Hub is OBB, odet export is a first-class CLI, and deploy sidecars match Hub class lists. The four ResNet-FPN detector families stay. What landed is four native loaders, an HRSC Hub 3× zoo, a DOTA zoo you should advertise from 1×, and ONNX export.

v0.3 illustration collage — HRSC Hub detections, FAIR1M GT, SSDD GT, HRSID GT (research pixels; not a dataset mirror)

v0.3 illustration collage — HRSC Hub detections, FAIR1M GT, SSDD GT, HRSID GT (research pixels; not a dataset mirror)

Upgrade Link to heading

pip install -U oriented-det
# or pin:
pip install oriented-det==0.3.1

PyTorch is still installed separately for your platform (pytorch.org). Weights stay on Hugging Face at dl4eo/oriented-det-pretrained. For ONNX export from a checkout: uv pip install -e ".[export]" then odet export --help.

Headline: four loaders, not a fifth detector Link to heading

DatasetModalityIn v0.3Hub zoo?Published number
HRSC2016Optical shipsNative XML + ImageSetsYes — three 3×Held-out test 90.41% / 88.77% / 88.34%
FAIR1MOptical, 37-classNative XML + convert/tileNo (CC BY-NC-SA dump)Local Faster R-CNN 1× tiled-val 36.70%
SSDDSAR shipsNative VOC / COCO / DOTANoLocal Faster R-CNN 1× held-out 90.34%
HRSIDSAR shipsNative COCO polygonsNoLocal Faster R-CNN 1× held-out 78.55%

DOTA remains the pretrain zoo. HRSC is the published small-data ship zoo. FAIR1M / SSDD / HRSID are train locally from the matching DOTA 1× Hub checkpoint. Full write-ups: HRSC, FAIR1M, SSDD, HRSID, Docker, ONNX.

HRSC2016 — Oriented R-CNN 3× Hub on a Google Earth ship scene (score ≥ 0.85, NMS 0.1)

HRSC2016 — Oriented R-CNN 3× Hub on a Google Earth ship scene (score ≥ 0.85, NMS 0.1)

DOTA Hub: advertise and finetune from 1× Link to heading

All eight advertised DOTA Hub slugs quote official Task 1 (hidden test). Recipes train on trainval, so local make eval-val is a leaky monitor — do not quote it as the zoo number.

Model1× AP503× AP501× AP753× AP75
Oriented R-CNN76.73%74.88%50.2451.23
Rotated Faster R-CNN74.42%74.48%41.9045.39
Rotated FCOS73.07%72.91%40.4045.39
Rotated RetinaNet (OBB)71.72%73.89%43.4647.11

Advertise and finetune from 1× for Oriented R-CNN, Faster R-CNN, and FCOS. 3× Task 1 AP50 is a drop or a wash; the 3× gain is box tightness (AP75). RetinaNet 3× is the AP50 exception. Versus MMRotate 1×: Oriented R-CNN +1.04, Faster R-CNN +1.02, FCOS +1.79, RetinaNet +3.30 vs OBB 68.42. Circum-HBB from 0.3.0 lives at rotated_retinanet_dota_le90_{1x,3x}_hbb (67.87% / 70.70%).

Split decoder ring Link to heading

DatasetWhat make eval-val scoresHeld-out?
DOTAval tiles that were also in trainNo (leaky). Real test: Task 1
HRSC / FAIR1M / SSDD / HRSIDofficial test or valYes

Do not call HRSC, FAIR1M, SSDD, or HRSID eval-val leaky. That word is DOTA-only.

ONNX export Link to heading

uv pip install -e ".[export]"
make export-onnx   # default: Rotated FCOS DOTA 1× Hub
odet export demo   # same CLI as python -m export

Pre-NMS ONNX plus Python preprocess / rotated NMS for Rotated FCOS, Oriented R-CNN, and Rotated Faster R-CNN. Consumers need numpy, Pillow, and ONNX Runtime — no PyTorch, no oriented-det. Supported canvas is fixed 1024×1024 (DOTA tiles). Out of this graph: keep_ratio (HRSC / SSDD / HRSID), sliding-window tiling, RetinaNet detect. Walkthroughs: Docker Tile Geo Process and ONNX export without PyTorch.

Also shipped Link to heading

  • resize_mode: keep_ratio + pad_size_divisor (HRSC / SSDD / HRSID whole-image canvas)
  • Random rotate train aug (PolyRandomRotate-style)
  • Diagonal-flip θ fix (MMRotate keeps θ; we had applied π − θ)
  • odet dota-submit for official Task 1 zips
  • Deploy floors = eval-val global F1 − 0.05 (RetinaNet OBB 0.25; HBB 0.35); final NMS 0.1 on DOTA / HRSC recipes
  • 0.3.1: un-suffixed RetinaNet Hub slugs are OBB; odet export; deploy generate_description.py treats a DOTA class list as v1 by set equality (Hub sidecars are alphabetical)

License, again Link to heading

Apache 2.0 covers oriented-det’s code. It does not cover DOTA, HRSC, FAIR1M, SSDD, or HRSID pixels. See the licensing note. Production detectors still need imagery you are allowed to train on.

Write-ups in this series Link to heading

DatePost
Thu 24 SepFAIR1M — why 36.70% is in band
Mon 28 SepSSDD — optical DOTA → SAR in 12 epochs
Thu 1 OctHRSID — 78.55% rotated AP50 vs Wei HBB
Mon 5 OctDocker — Tile Geo Process, GeoJSON out
Thu 8 OctONNX — export without PyTorch on the infer box

The speed-tier follow-up shipped as Oriented-Det v0.4.0 — Rotated RTMDet-S, official Task 1 77.60%. Native YOLO-OBB is v0.4.1 on the roadmap.


Written on September 21, 2026 by Jeff Faudi. Link to heading