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.

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
| Dataset | Modality | In v0.3 | Hub zoo? | Published number |
|---|---|---|---|---|
| HRSC2016 | Optical ships | Native XML + ImageSets | Yes — three 3× | Held-out test 90.41% / 88.77% / 88.34% |
| FAIR1M | Optical, 37-class | Native XML + convert/tile | No (CC BY-NC-SA dump) | Local Faster R-CNN 1× tiled-val 36.70% |
| SSDD | SAR ships | Native VOC / COCO / DOTA | No | Local Faster R-CNN 1× held-out 90.34% |
| HRSID | SAR ships | Native COCO polygons | No | Local 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.

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.
| Model | 1× AP50 | 3× AP50 | 1× AP75 | 3× AP75 |
|---|---|---|---|---|
| Oriented R-CNN | 76.73% | 74.88% | 50.24 | 51.23 |
| Rotated Faster R-CNN | 74.42% | 74.48% | 41.90 | 45.39 |
| Rotated FCOS | 73.07% | 72.91% | 40.40 | 45.39 |
| Rotated RetinaNet (OBB) | 71.72% | 73.89% | 43.46 | 47.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
| Dataset | What make eval-val scores | Held-out? |
|---|---|---|
| DOTA | val tiles that were also in train | No (leaky). Real test: Task 1 |
| HRSC / FAIR1M / SSDD / HRSID | official test or val | Yes |
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-submitfor 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; deploygenerate_description.pytreats 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
| Date | Post |
|---|---|
| Thu 24 Sep | FAIR1M — why 36.70% is in band |
| Mon 28 Sep | SSDD — optical DOTA → SAR in 12 epochs |
| Thu 1 Oct | HRSID — 78.55% rotated AP50 vs Wei HBB |
| Mon 5 Oct | Docker — Tile Geo Process, GeoJSON out |
| Thu 8 Oct | ONNX — 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.
Links Link to heading
- Release notes: github.com/DL4EO/oriented-det/releases/tag/v0.3.1
- PyPI: pypi.org/project/oriented-det/0.3.1
- Documentation: dl4eo.github.io/oriented-det
- Pretrained zoo: huggingface.co/dl4eo/oriented-det-pretrained
- Previous: Lessons learned on DOTA · HRSC2016 · v0.2.0
- Next: FAIR1M (24 Sep)