Repository navigation
v0.4.0
Rotated RTMDet. rotated_rtmdet_dota_le90_3x (CSPNeXt-S + PAFPN) is on the Hub at official Task 1 77.60%, the top of the DOTA zoo. Native YOLO-OBB is 0.4.1.
Added
- Rotated RTMDet (
model_type: rotated_rtmdet) — clean-room CSPNeXt backbone + CSPNeXt-PAFPN neck, SepBN head (shared convs, per-level BN), dynamic soft-label assigner, Quality Focal Loss + decoded rotated IoU box loss. Base fragments:rotated_rtmdet_cspnext_s.jsonandrotated_rtmdet_cspnext_tiny.json(tiny has no Hub weights). - RTMDet-S 3× Hub —
rotated_rtmdet_dota_le90_3x. Official Task 1 77.60% (AP75 52.01, COCO mAP 49.02; deploy 0.45; leaky eval-val 82.75%). Recipe:dota_le90_3x_s.json(36 epochs, AdamW, EMA, random rotate p=0.5 ±180°, mosaic off). Report:docs/eval-reports/rotated_rtmdet_dota_le90_3x/. - EMA —
training.use_ema/ema_momentum/ema_gamma. Validation andbest_mAP_*.pthuse the EMA weights; epoch checkpoints keep raw weights plusema_state_dictfor resume. - AdamW and weight-decay groups —
training.optimizer: adamw(adamw_betas),weight_decay_norm_mult/weight_decay_bias_mult.max_grad_norm: nulldisables clipping. Defaults (SGD, multipliers 1, clip 1.0) are unchanged. lr_scheduler_type: cosine_annealing_late— flat LR after warmup untillr_scheduler_cosine_start_epoch, then cosine tolr_scheduler_cosine_eta_min.preprocessing.random_rotate_rect_labels— tiles containing those classes rotate by 90° steps only (RTMDet usesstorage-tankandroundabout).- Cached mosaic (
preprocessing.enable_mosaicandmosaic_*keys), off by default and off in every published recipe. tools/bench_latency.py— single-tile forward latency (backbone + head + decode + NMS) for several detectors on the same canvas and device.- OSSDD FCOS and Faster R-CNN 3× —
ossdd_le90_vh_3x.jsonandossdd_le90_vh_3x.jsoninherit VH 1× finetunes of the DOTA 1× hubs (36 epochs, MultiStep milestones 24/33, 512 crop, batch 4). - OSSDD mAP —
evaluation.map_iou_thresholdsaverages the area under the precision-recall curve over rotated IoU 0.10 to 0.95 step 0.05. Set on the OSSDD recipes only.best_metricmAP uses that average.iou_thresholdstays 0.5 for GT-cover and the precision-recall operating point. - RTMDet ONNX —
odet export onnx --mode rotated_rtmdet_pre_nms. CSPNeXt + SepBN head + box decode in the graph; rotated NMS stays in Python. Fixed H×W, batch 1, same pre-NMS tensors as FCOS.
Changed
- Evaluation split into
val_*andtest_*. Periodic val andmake eval-valuseval_score_threshold(often 0.3).test_mapandmake eval-testusetest_score_threshold(null → 0.05). The 1× schedule setstest_map: trueandval_map_at_end: false. DOTA and FAIR1M pointtest_tiles_dirat the val tiles (leaky).dota-submitstill requires the unlabeled official test and does not readtest_tiles_dir. Older keys (train_val_score_threshold,preds_score_threshold,compute_map_final,compute_map_test, …) remap on load. Published Hub sidecars inpretrained/use the new names. odet preds/make metricsmetrics margin defaults to 0 (every GT and detection is scored). It no longer readsproduction.ignore_margin_pixels, tile overlap, or a margin stored inpredictions.json. Pass--metrics-margin-pixelsfor a positive band. Deploy /image_demostill useproduction.ignore_margin_pixels.- Tutorial notebooks write to
work_dirs/in a checkout (wastutorial_work/).ORIENTED_DET_TUTORIAL_WORKand the Kaggle/kaggle/workingdefault are unchanged.
ONNX export covers Rotated FCOS, Rotated RTMDet, Oriented R-CNN, and Rotated Faster R-CNN.
Full changelog: https://github.com/DL4EO/oriented-det/blob/v0.4.0/docs/changelog.md