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 already live, FAIR1M 24 Sep, SSDD 28 Sep, HRSID 1 Oct, Docker 5 Oct, ONNX 8 Oct.

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. Docker Tile Geo Process walkthrough on 5 Oct; ONNX walkthrough on 8 Oct.

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.

What’s next (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

Public roadmap after that: v0.4 speed tier (RTMDet-R, native YOLO-OBB).


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