oriented-det 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oriented_det-0.3.0 → oriented_det-0.3.1}/PKG-INFO +12 -10
- {oriented_det-0.3.0 → oriented_det-0.3.1}/README.md +11 -9
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/__init__.py +1 -1
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/__main__.py +1 -1
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/cli.py +10 -9
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/nms.py +1 -1
- oriented_det-0.3.1/export/scripts/__init__.py +6 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/demo.py +2 -2
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/infer_onnx.py +2 -2
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/cli/__init__.py +2 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_retinanet/dota_le90_1x.json +2 -2
- oriented_det-0.3.1/oriented_det/configs/rotated_retinanet/dota_le90_1x_hbb.json +9 -0
- oriented_det-0.3.1/oriented_det/configs/rotated_retinanet/dota_le90_3x_hbb.json +7 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/rotated_retinanet.py +10 -1
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/diff_iou_rotated.py +11 -11
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/pretrained/hub.py +1 -1
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/pretrained/manifest.json +25 -7
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/engine.py +8 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/PKG-INFO +12 -10
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/SOURCES.txt +2 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/pyproject.toml +6 -1
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_config_behavior.py +1 -1
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_config_model_wiring.py +18 -28
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_deploy_generate_description.py +1 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_diff_iou_rotated.py +13 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_models.py +2 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_pretrained_hub.py +14 -4
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_retinanet_assign.py +55 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_viewer_gradio_compat.py +4 -0
- oriented_det-0.3.0/export/scripts/__init__.py +0 -6
- {oriented_det-0.3.0 → oriented_det-0.3.1}/LICENSE +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/ort_runtime.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/postprocess.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/preprocess.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/runtime.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/export_onnx.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/save_predictions_onnx.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/zip_bundle.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/val_dataset.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/export/wrappers.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/cli/__main__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/cli/train.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/augmentation.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/dota_le90.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/fair1m.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/hrsc2016.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/hrsid.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/ssdd.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/fp16.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/oriented_rcnn_r50.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/rotated_faster_rcnn_r50.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/rotated_fcos_r50.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/rotated_retinanet_r50.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/preprocessing.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/schedules/1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/config.schema.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/dota_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/dota_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/fair1m_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/hrsc2016_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/hrsc2016_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/hrsid_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/dota_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/dota_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/fair1m_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/hrsc2016_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/hrsc2016_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/hrsid_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/ssdd_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/dota_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/dota_le90_1x_l1_kfiou_aux.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/dota_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/fair1m_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/hrsc2016_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/hrsc2016_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/hrsid_le90_1x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_retinanet/dota_le90_3x.json +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/airbus_playground.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/build.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/coco_obb.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/dota_classes.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/dota_task1.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/evaluation.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/fair1m.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/fair1m_classes.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/flips.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/hrsc2016.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/hrsid.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/lookalike.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/preprocessing.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/rotates.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/ssdd.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/tiling.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/transforms.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/poly.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/qbox.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/rbox.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/transforms.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/backbones/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/backbones/resnet_fpn.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/backbones/utils.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/bbox_coder.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/faster_rcnn_inference.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/horizontal_roi_coder.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_rcnn.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_rcnn_inference.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_roi.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_rpn.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/retinanet_assign.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/rotated_fcos.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/utils.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/gaussian_angle.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/gpu_ops.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/iou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/kfiou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/nms.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/probiou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/rotated_ops.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/utils.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/pretrained/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/checkpoint.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/collate.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/inference.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/config.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/grouped_ce.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/piecewise_schedule.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/profiler.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/utils.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/config.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/device.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/logging.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/progress.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/viz.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/dependency_links.txt +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/entry_points.txt +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/requires.txt +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/top_level.txt +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/setup.cfg +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_airbus_playground.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_annotation_csv.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_bbox_coder.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_class_tile_oversampling.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_coco_obb.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_cosine_tail_scheduler.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_dota_task1.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_dota_tile_roots.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_evaluation.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_exact_rotated_iou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_fair1m.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_gaussian_angle.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_geometry.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_geometry_transforms.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_gpu_ops.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_grouped_ce.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_hard_tile_oversampling.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_hrsc2016.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_hrsid.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_iou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_kfiou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_lookalike.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_metrics_margin_filter.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_nms.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_ops_utils.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_optimizer_param_groups.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_piecewise_schedule.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_preprocessing.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_probiou.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_roi.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_rpn.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_score_thresholds.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_sigmoid_focal_class_weights.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_sliding_window_margin.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_source_provenance.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_ssdd.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_tile_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_tiling.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_train.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_train_flips.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_train_rotates.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_training_config_strict.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_utils_config.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_utils_viz.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_vendored_configs_sync.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_wizard.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/__init__.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/annotation_csv.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/app.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/coco_to_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/compare_hbb_obb_counts.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/dataset_stats.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/dota_labels_to_comma.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/dota_task1_submit.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/fair1m_to_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/filter_predictions_by_gt.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/free_gpu.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/generate_airbus_playground_csv.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/generate_oriented_annotations.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/hbb_to_obb.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/hrsc_to_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/image_demo.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/lr_finder.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/measure_sampled_riou_error.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/playground_to_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/pretrained_download.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/preview_augmentation.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/publish_checkpoint.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/save_predictions.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/ssdd_to_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/sync_vendored_configs.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/tile_dota.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/train.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/train_example.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/train_multi_gpu.py +0 -0
- {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/viewer_annotations.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oriented-det
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: A lightweight, modern PyTorch library for rotated object detection in aerial and satellite imagery
|
|
5
5
|
Author: Jeff Faudi, DL4EO
|
|
6
6
|
Maintainer: Jeff Faudi, DL4EO
|
|
@@ -77,7 +77,7 @@ Dynamic: license-file
|
|
|
77
77
|
- **Datasets**: DOTA polygon loader (pattern, split file, or separate folders), **HRSC2016** native XML loader, **FAIR1M** 37-class XML loader (+ convert/tile tutorial), **SSDD** and **HRSID** SAR ship loaders (finetune DOTA 1× Hub locally; no SAR zoo), image tiling, label filtering, ignore masks, oriented mAP evaluation
|
|
78
78
|
- **Models**: **Oriented R-CNN** ([Xie et al., ICCV 2021](https://openaccess.thecvf.com/content/ICCV2021/html/Xie_Oriented_R-CNN_for_Object_Detection_ICCV_2021_paper.html); horizontal RPN + MidpointOffset → oriented RoIAlign + oriented ROI head), **Rotated Faster R-CNN** (Ren et al., NeurIPS 2015 two-stage baseline with horizontal RPN + horizontal RoIAlign + rotated ROI head; MMRotate reference), **Rotated RetinaNet** ([Lin et al., ICCV 2017](https://openaccess.thecvf.com/content_ICCV_2017/papers/Lin_Focal_Loss_for_ICCV_2017_paper.pdf); oriented anchors, sigmoid focal loss), **Rotated FCOS** (anchor-free single-stage; distance-angle coder, centerness, L1 / KFIoU / decoded rIoU); ResNet + FPN backbones; selective loading of external checkpoints where configs wire `checkpoint.load_from_checkpoint`
|
|
79
79
|
- **Training**: JSON configs + **`odet train`**, mixed precision (AMP), gradient accumulation, checkpointing, best-metric tracking, TensorBoard, optional curriculum learning and profiling
|
|
80
|
-
- **ONNX export**: pre-NMS ONNX + Python NMS (`
|
|
80
|
+
- **ONNX export**: pre-NMS ONNX + Python NMS (`odet export` / `make export-onnx`); consumers run ONNX Runtime only
|
|
81
81
|
|
|
82
82
|
Hands-on write-ups (code, metrics, inference knobs) live on **[DeepLearning.Earth](https://deeplearning.earth)** — especially the [15 DOTA class tour](https://deeplearning.earth/posts/2026-06-23_oriented_rcnn_detections_for_the_15_dota_classes/), [sampled rIoU and ProbIoU](https://deeplearning.earth/posts/2026-07-10_rotated_faster_rcnn_probiou_dota/), [Rotated FCOS / v0.2.0](https://deeplearning.earth/posts/2026-08-28_oriented-det_v0_2_0_rotated_fcos_decoded_riou_and_the_updated_zoo/), and [macOS FCOS vs Oriented R-CNN](https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/).
|
|
83
83
|
|
|
@@ -107,7 +107,7 @@ uv pip install -e .
|
|
|
107
107
|
- From PyPI: `pip install oriented-det`
|
|
108
108
|
- For development and tests: `uv pip install -e ".[dev]"`
|
|
109
109
|
- For the Gradio prediction viewer: `uv pip install -e ".[viewer]"` or `pip install "oriented-det[viewer]"`
|
|
110
|
-
- For **ONNX export**: `uv pip install -e ".[export]"` then `
|
|
110
|
+
- For **ONNX export**: `uv pip install -e ".[export]"` then `odet export --help` (see [ONNX export](docs/examples/export.md))
|
|
111
111
|
- For **macOS Apple Silicon** or **CPU-only**, see [Installation](docs/getting-started/installation.md) and the [macOS walkthrough](https://deeplearning.earth/posts/2026-06-25_oriented_object_detection_on_macos_in_pure_python/) (`odet image-demo` on MPS, no CUDA toolchain).
|
|
112
112
|
- Verify: `pytest tests/test_geometry.py tests/test_iou.py tests/test_nms.py`
|
|
113
113
|
|
|
@@ -154,7 +154,7 @@ After that, copy-pasted commands and unmodified configs that reference `/path/to
|
|
|
154
154
|
| **Configs** | [`configs/`](configs/) | Experiment JSON (`_base_` inheritance, schema in `configs/config.schema.json`) |
|
|
155
155
|
| **Runs** | `runs/<model_type>/<timestamp>/` | Checkpoints, `config.json` snapshot, `train.log` (created at train time; not shipped in the repo) |
|
|
156
156
|
| **Docs** | [`docs/`](docs/) | MkDocs user guide and API reference |
|
|
157
|
-
| **Examples** | [`demo/`](demo/), [`pretrained/`](pretrained/), [`notebooks/`](notebooks/), [`export/`](export/) | Demo images; Hub checkpoints; Kaggle FAIR1M tutorial notebook; ONNX export producer (`
|
|
157
|
+
| **Examples** | [`demo/`](demo/), [`pretrained/`](pretrained/), [`notebooks/`](notebooks/), [`export/`](export/) | Demo images; Hub checkpoints; Kaggle FAIR1M tutorial notebook; ONNX export producer (`odet export`) |
|
|
158
158
|
|
|
159
159
|
**`odet` vs `tools/`:** Installing the package registers the `odet` command. It loads modules under `tools/` (for example `tools.train`, `tools.save_predictions`). Shared inference and collate code lives in [`oriented_det/runtime/`](oriented_det/runtime/). You do not need two workflows — use **`odet`** (or **`make`**, which calls `odet`).
|
|
160
160
|
|
|
@@ -165,7 +165,7 @@ After that, copy-pasted commands and unmodified configs that reference `/path/to
|
|
|
165
165
|
Full documentation is in the **docs/** folder and can be built and served with MkDocs:
|
|
166
166
|
|
|
167
167
|
- **Build/serve**: `make docs` or `make docs-serve` (see [docs/README.md](docs/README.md)); or `uv pip install -e ".[docs]"` then `mkdocs serve`.
|
|
168
|
-
- **Guides**: [Getting Started](docs/getting-started/installation.md), [User Guide](docs/user-guide/geometry.md), [API Reference](docs/api/geometry.md), [Examples](docs/examples/inference.md), [ONNX export](docs/examples/export.md).
|
|
168
|
+
- **Guides**: [Getting Started](docs/getting-started/installation.md), [User Guide](docs/user-guide/geometry.md), [API Reference](docs/api/geometry.md), [Examples](docs/examples/inference.md), [Docker deploy](docs/examples/deploy.md), [ONNX export](docs/examples/export.md).
|
|
169
169
|
- **Blog**: [DeepLearning.Earth](https://deeplearning.earth) — curated posts below (code, metrics, inference knobs).
|
|
170
170
|
|
|
171
171
|
| Topic | Post |
|
|
@@ -181,6 +181,8 @@ Full documentation is in the **docs/** folder and can be built and served with M
|
|
|
181
181
|
| FCOS vs Oriented R-CNN (MPS latency, thresholds) | [https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/](https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/) |
|
|
182
182
|
| Side-by-side browser demo (three 1× checkpoints) | [https://deeplearning.earth/posts/2026-09-06_oriented_det_optical_satellite_demo/](https://deeplearning.earth/posts/2026-09-06_oriented_det_optical_satellite_demo/) |
|
|
183
183
|
| Apache 2.0 vs DOTA / HRSC dataset terms | [https://deeplearning.earth/posts/2026-09-10_oriented_det_apache_license_versus_dota/](https://deeplearning.earth/posts/2026-09-10_oriented_det_apache_license_versus_dota/) |
|
|
184
|
+
| Docker deploy (Tile Geo Process) | [https://deeplearning.earth/posts/2026-10-05_deploy_oriented_det_in_docker/](https://deeplearning.earth/posts/2026-10-05_deploy_oriented_det_in_docker/) |
|
|
185
|
+
| ONNX export (no PyTorch on infer) | [https://deeplearning.earth/posts/2026-10-08_onnx_export_without_pytorch/](https://deeplearning.earth/posts/2026-10-08_onnx_export_without_pytorch/) |
|
|
184
186
|
|
|
185
187
|
## Documentation by folder
|
|
186
188
|
|
|
@@ -191,8 +193,8 @@ Full documentation is in the **docs/** folder and can be built and served with M
|
|
|
191
193
|
| [oriented_det/cli/](oriented_det/cli/) | [oriented_det/cli/README.md](oriented_det/cli/README.md) | **`odet`** entry point and subcommand list |
|
|
192
194
|
| [tools/](tools/) | [tools/README.md](tools/README.md) | CLI script implementations (invoked by `odet`; see [Repository layout](#repository-layout)) |
|
|
193
195
|
| [configs/](configs/) | [configs/README.md](configs/README.md) | DOTA configs and **pretrain model zoo** (`_base_` inheritance) |
|
|
194
|
-
| [deploy/example/](deploy/example/) | [deploy/example/README.md](deploy/example/README.md) |
|
|
195
|
-
| [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`
|
|
196
|
+
| [deploy/example/](deploy/example/) | [deploy/example/README.md](deploy/example/README.md) | Sanic Tile Geo Process Docker image (DOTA smoke) |
|
|
197
|
+
| [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`odet export`); consumer bundle in gitignored `onnx_export/` |
|
|
196
198
|
| [docs/](docs/) | [docs/README.md](docs/README.md) | MkDocs source; full user guide and API reference |
|
|
197
199
|
|
|
198
200
|
## Training and evaluation
|
|
@@ -209,7 +211,7 @@ Install once: `uv pip install -e .`. Then:
|
|
|
209
211
|
| COCO polygons → DOTA | `odet coco-to-dota --ann-file instances.json --image-dir images --output-dir out` |
|
|
210
212
|
| Val predictions | `odet preds --experiment-dir runs/oriented_rcnn/<timestamp>` or `make preds` |
|
|
211
213
|
| Offline mAP | `make eval-val` or `make preds` then `make metrics`. DOTA: leaky val tiles (real test is Task 1). HRSC/FAIR1M/SSDD/HRSID: held-out test/val. |
|
|
212
|
-
| ONNX export | `
|
|
214
|
+
| ONNX export | `odet export onnx ...` or `make export-onnx` (see [export/README.md](export/README.md)) |
|
|
213
215
|
|
|
214
216
|
DOTA configs: per-model `dota_le90_1x.json` under [configs/](configs/) (3× where published; Faster R-CNN and FCOS DOTA are 1×). Run `odet --help` for all subcommands. Makefile shortcuts and script-level options: [tools/README.md](tools/README.md). Config reference: [docs/user-guide/configuration.md](docs/user-guide/configuration.md), [configs/config.schema.json](configs/config.schema.json), [configs/README.md](configs/README.md).
|
|
215
217
|
|
|
@@ -245,7 +247,7 @@ OrientedDet is Apache-2.0 open source. For **consulting, training workshops, or
|
|
|
245
247
|
|
|
246
248
|
## Publishing to PyPI
|
|
247
249
|
|
|
248
|
-
Version **0.3.
|
|
250
|
+
Version **0.3.1** — tag releases as **`v0.3.1`** (git) matching `version` in `pyproject.toml`.
|
|
249
251
|
|
|
250
252
|
Configs: edit **`configs/`** at the repo root, then **`make sync-configs`** so **`oriented_det/configs/`** stays in sync (see **`oriented_det/configs/vendored_manifest.txt`**). CI runs **`make check-configs`**.
|
|
251
253
|
|
|
@@ -276,7 +278,7 @@ make check-configs
|
|
|
276
278
|
pytest tests/ -q
|
|
277
279
|
```
|
|
278
280
|
|
|
279
|
-
Bump version in `pyproject.toml` and `docs/changelog.md` if needed (currently **0.3.
|
|
281
|
+
Bump version in `pyproject.toml` and `docs/changelog.md` if needed (currently **0.3.1**).
|
|
280
282
|
|
|
281
283
|
#### 3. Build locally
|
|
282
284
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
- **Datasets**: DOTA polygon loader (pattern, split file, or separate folders), **HRSC2016** native XML loader, **FAIR1M** 37-class XML loader (+ convert/tile tutorial), **SSDD** and **HRSID** SAR ship loaders (finetune DOTA 1× Hub locally; no SAR zoo), image tiling, label filtering, ignore masks, oriented mAP evaluation
|
|
18
18
|
- **Models**: **Oriented R-CNN** ([Xie et al., ICCV 2021](https://openaccess.thecvf.com/content/ICCV2021/html/Xie_Oriented_R-CNN_for_Object_Detection_ICCV_2021_paper.html); horizontal RPN + MidpointOffset → oriented RoIAlign + oriented ROI head), **Rotated Faster R-CNN** (Ren et al., NeurIPS 2015 two-stage baseline with horizontal RPN + horizontal RoIAlign + rotated ROI head; MMRotate reference), **Rotated RetinaNet** ([Lin et al., ICCV 2017](https://openaccess.thecvf.com/content_ICCV_2017/papers/Lin_Focal_Loss_for_ICCV_2017_paper.pdf); oriented anchors, sigmoid focal loss), **Rotated FCOS** (anchor-free single-stage; distance-angle coder, centerness, L1 / KFIoU / decoded rIoU); ResNet + FPN backbones; selective loading of external checkpoints where configs wire `checkpoint.load_from_checkpoint`
|
|
19
19
|
- **Training**: JSON configs + **`odet train`**, mixed precision (AMP), gradient accumulation, checkpointing, best-metric tracking, TensorBoard, optional curriculum learning and profiling
|
|
20
|
-
- **ONNX export**: pre-NMS ONNX + Python NMS (`
|
|
20
|
+
- **ONNX export**: pre-NMS ONNX + Python NMS (`odet export` / `make export-onnx`); consumers run ONNX Runtime only
|
|
21
21
|
|
|
22
22
|
Hands-on write-ups (code, metrics, inference knobs) live on **[DeepLearning.Earth](https://deeplearning.earth)** — especially the [15 DOTA class tour](https://deeplearning.earth/posts/2026-06-23_oriented_rcnn_detections_for_the_15_dota_classes/), [sampled rIoU and ProbIoU](https://deeplearning.earth/posts/2026-07-10_rotated_faster_rcnn_probiou_dota/), [Rotated FCOS / v0.2.0](https://deeplearning.earth/posts/2026-08-28_oriented-det_v0_2_0_rotated_fcos_decoded_riou_and_the_updated_zoo/), and [macOS FCOS vs Oriented R-CNN](https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/).
|
|
23
23
|
|
|
@@ -47,7 +47,7 @@ uv pip install -e .
|
|
|
47
47
|
- From PyPI: `pip install oriented-det`
|
|
48
48
|
- For development and tests: `uv pip install -e ".[dev]"`
|
|
49
49
|
- For the Gradio prediction viewer: `uv pip install -e ".[viewer]"` or `pip install "oriented-det[viewer]"`
|
|
50
|
-
- For **ONNX export**: `uv pip install -e ".[export]"` then `
|
|
50
|
+
- For **ONNX export**: `uv pip install -e ".[export]"` then `odet export --help` (see [ONNX export](docs/examples/export.md))
|
|
51
51
|
- For **macOS Apple Silicon** or **CPU-only**, see [Installation](docs/getting-started/installation.md) and the [macOS walkthrough](https://deeplearning.earth/posts/2026-06-25_oriented_object_detection_on_macos_in_pure_python/) (`odet image-demo` on MPS, no CUDA toolchain).
|
|
52
52
|
- Verify: `pytest tests/test_geometry.py tests/test_iou.py tests/test_nms.py`
|
|
53
53
|
|
|
@@ -94,7 +94,7 @@ After that, copy-pasted commands and unmodified configs that reference `/path/to
|
|
|
94
94
|
| **Configs** | [`configs/`](configs/) | Experiment JSON (`_base_` inheritance, schema in `configs/config.schema.json`) |
|
|
95
95
|
| **Runs** | `runs/<model_type>/<timestamp>/` | Checkpoints, `config.json` snapshot, `train.log` (created at train time; not shipped in the repo) |
|
|
96
96
|
| **Docs** | [`docs/`](docs/) | MkDocs user guide and API reference |
|
|
97
|
-
| **Examples** | [`demo/`](demo/), [`pretrained/`](pretrained/), [`notebooks/`](notebooks/), [`export/`](export/) | Demo images; Hub checkpoints; Kaggle FAIR1M tutorial notebook; ONNX export producer (`
|
|
97
|
+
| **Examples** | [`demo/`](demo/), [`pretrained/`](pretrained/), [`notebooks/`](notebooks/), [`export/`](export/) | Demo images; Hub checkpoints; Kaggle FAIR1M tutorial notebook; ONNX export producer (`odet export`) |
|
|
98
98
|
|
|
99
99
|
**`odet` vs `tools/`:** Installing the package registers the `odet` command. It loads modules under `tools/` (for example `tools.train`, `tools.save_predictions`). Shared inference and collate code lives in [`oriented_det/runtime/`](oriented_det/runtime/). You do not need two workflows — use **`odet`** (or **`make`**, which calls `odet`).
|
|
100
100
|
|
|
@@ -105,7 +105,7 @@ After that, copy-pasted commands and unmodified configs that reference `/path/to
|
|
|
105
105
|
Full documentation is in the **docs/** folder and can be built and served with MkDocs:
|
|
106
106
|
|
|
107
107
|
- **Build/serve**: `make docs` or `make docs-serve` (see [docs/README.md](docs/README.md)); or `uv pip install -e ".[docs]"` then `mkdocs serve`.
|
|
108
|
-
- **Guides**: [Getting Started](docs/getting-started/installation.md), [User Guide](docs/user-guide/geometry.md), [API Reference](docs/api/geometry.md), [Examples](docs/examples/inference.md), [ONNX export](docs/examples/export.md).
|
|
108
|
+
- **Guides**: [Getting Started](docs/getting-started/installation.md), [User Guide](docs/user-guide/geometry.md), [API Reference](docs/api/geometry.md), [Examples](docs/examples/inference.md), [Docker deploy](docs/examples/deploy.md), [ONNX export](docs/examples/export.md).
|
|
109
109
|
- **Blog**: [DeepLearning.Earth](https://deeplearning.earth) — curated posts below (code, metrics, inference knobs).
|
|
110
110
|
|
|
111
111
|
| Topic | Post |
|
|
@@ -121,6 +121,8 @@ Full documentation is in the **docs/** folder and can be built and served with M
|
|
|
121
121
|
| FCOS vs Oriented R-CNN (MPS latency, thresholds) | [https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/](https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/) |
|
|
122
122
|
| Side-by-side browser demo (three 1× checkpoints) | [https://deeplearning.earth/posts/2026-09-06_oriented_det_optical_satellite_demo/](https://deeplearning.earth/posts/2026-09-06_oriented_det_optical_satellite_demo/) |
|
|
123
123
|
| Apache 2.0 vs DOTA / HRSC dataset terms | [https://deeplearning.earth/posts/2026-09-10_oriented_det_apache_license_versus_dota/](https://deeplearning.earth/posts/2026-09-10_oriented_det_apache_license_versus_dota/) |
|
|
124
|
+
| Docker deploy (Tile Geo Process) | [https://deeplearning.earth/posts/2026-10-05_deploy_oriented_det_in_docker/](https://deeplearning.earth/posts/2026-10-05_deploy_oriented_det_in_docker/) |
|
|
125
|
+
| ONNX export (no PyTorch on infer) | [https://deeplearning.earth/posts/2026-10-08_onnx_export_without_pytorch/](https://deeplearning.earth/posts/2026-10-08_onnx_export_without_pytorch/) |
|
|
124
126
|
|
|
125
127
|
## Documentation by folder
|
|
126
128
|
|
|
@@ -131,8 +133,8 @@ Full documentation is in the **docs/** folder and can be built and served with M
|
|
|
131
133
|
| [oriented_det/cli/](oriented_det/cli/) | [oriented_det/cli/README.md](oriented_det/cli/README.md) | **`odet`** entry point and subcommand list |
|
|
132
134
|
| [tools/](tools/) | [tools/README.md](tools/README.md) | CLI script implementations (invoked by `odet`; see [Repository layout](#repository-layout)) |
|
|
133
135
|
| [configs/](configs/) | [configs/README.md](configs/README.md) | DOTA configs and **pretrain model zoo** (`_base_` inheritance) |
|
|
134
|
-
| [deploy/example/](deploy/example/) | [deploy/example/README.md](deploy/example/README.md) |
|
|
135
|
-
| [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`
|
|
136
|
+
| [deploy/example/](deploy/example/) | [deploy/example/README.md](deploy/example/README.md) | Sanic Tile Geo Process Docker image (DOTA smoke) |
|
|
137
|
+
| [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`odet export`); consumer bundle in gitignored `onnx_export/` |
|
|
136
138
|
| [docs/](docs/) | [docs/README.md](docs/README.md) | MkDocs source; full user guide and API reference |
|
|
137
139
|
|
|
138
140
|
## Training and evaluation
|
|
@@ -149,7 +151,7 @@ Install once: `uv pip install -e .`. Then:
|
|
|
149
151
|
| COCO polygons → DOTA | `odet coco-to-dota --ann-file instances.json --image-dir images --output-dir out` |
|
|
150
152
|
| Val predictions | `odet preds --experiment-dir runs/oriented_rcnn/<timestamp>` or `make preds` |
|
|
151
153
|
| Offline mAP | `make eval-val` or `make preds` then `make metrics`. DOTA: leaky val tiles (real test is Task 1). HRSC/FAIR1M/SSDD/HRSID: held-out test/val. |
|
|
152
|
-
| ONNX export | `
|
|
154
|
+
| ONNX export | `odet export onnx ...` or `make export-onnx` (see [export/README.md](export/README.md)) |
|
|
153
155
|
|
|
154
156
|
DOTA configs: per-model `dota_le90_1x.json` under [configs/](configs/) (3× where published; Faster R-CNN and FCOS DOTA are 1×). Run `odet --help` for all subcommands. Makefile shortcuts and script-level options: [tools/README.md](tools/README.md). Config reference: [docs/user-guide/configuration.md](docs/user-guide/configuration.md), [configs/config.schema.json](configs/config.schema.json), [configs/README.md](configs/README.md).
|
|
155
157
|
|
|
@@ -185,7 +187,7 @@ OrientedDet is Apache-2.0 open source. For **consulting, training workshops, or
|
|
|
185
187
|
|
|
186
188
|
## Publishing to PyPI
|
|
187
189
|
|
|
188
|
-
Version **0.3.
|
|
190
|
+
Version **0.3.1** — tag releases as **`v0.3.1`** (git) matching `version` in `pyproject.toml`.
|
|
189
191
|
|
|
190
192
|
Configs: edit **`configs/`** at the repo root, then **`make sync-configs`** so **`oriented_det/configs/`** stays in sync (see **`oriented_det/configs/vendored_manifest.txt`**). CI runs **`make check-configs`**.
|
|
191
193
|
|
|
@@ -216,7 +218,7 @@ make check-configs
|
|
|
216
218
|
pytest tests/ -q
|
|
217
219
|
```
|
|
218
220
|
|
|
219
|
-
Bump version in `pyproject.toml` and `docs/changelog.md` if needed (currently **0.3.
|
|
221
|
+
Bump version in `pyproject.toml` and `docs/changelog.md` if needed (currently **0.3.1**).
|
|
220
222
|
|
|
221
223
|
#### 3. Build locally
|
|
222
224
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""ONNX export package for OrientedDet. CLI: ``python -m export``.
|
|
1
|
+
"""ONNX export package for OrientedDet. CLI: ``odet export`` / ``python -m export``.
|
|
2
2
|
|
|
3
3
|
Inference (``demo`` / ``infer``) needs only numpy, Pillow, and onnxruntime —
|
|
4
4
|
see ``requirements-runtime.txt``. The same consumer modules are copied into
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""ONNX export CLI (``odet export`` / ``python -m export``)."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -15,7 +15,7 @@ _COMMANDS: Dict[str, Tuple[str, str]] = {
|
|
|
15
15
|
"preds": ("export.scripts.save_predictions_onnx", "export-preds"),
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
#
|
|
18
|
+
# Legacy python -m export names. Top-level odet export-* (TF / SavedModel) stay removed.
|
|
19
19
|
_ALIASES = {
|
|
20
20
|
"export-onnx": "onnx",
|
|
21
21
|
"export-infer": "infer",
|
|
@@ -30,14 +30,15 @@ def install_hint() -> str:
|
|
|
30
30
|
export = root / "requirements-export.txt"
|
|
31
31
|
return (
|
|
32
32
|
f"Infer/demo (no oriented-det): pip install -r {runtime}\n"
|
|
33
|
-
f"
|
|
33
|
+
f"Producer (odet export): uv pip install -e \".[export]\" "
|
|
34
|
+
f"or pip install -r {export} (plus oriented-det)"
|
|
34
35
|
)
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
def _print_help() -> None:
|
|
38
|
-
print("Usage:
|
|
39
|
-
print("
|
|
40
|
-
print("demo / infer do not need
|
|
39
|
+
print("Usage: odet export <command> [options]")
|
|
40
|
+
print(" python -m export <command> [options]")
|
|
41
|
+
print("ONNX only (no TensorFlow / SavedModel). demo / infer do not need PyTorch.")
|
|
41
42
|
print("")
|
|
42
43
|
print("Commands:")
|
|
43
44
|
for name in sorted(_COMMANDS):
|
|
@@ -45,14 +46,14 @@ def _print_help() -> None:
|
|
|
45
46
|
print("")
|
|
46
47
|
print("Examples:")
|
|
47
48
|
print(
|
|
48
|
-
"
|
|
49
|
+
" odet export onnx --config path/to/config.json "
|
|
49
50
|
"--checkpoint path/to/model.pth --output ./onnx_export/model.onnx"
|
|
50
51
|
)
|
|
51
52
|
print(
|
|
52
|
-
"
|
|
53
|
+
" odet export infer --onnx ./onnx_export/model.onnx "
|
|
53
54
|
"--images ./tiles --output ./onnx_export/predictions"
|
|
54
55
|
)
|
|
55
|
-
print("
|
|
56
|
+
print(" odet export demo")
|
|
56
57
|
print("")
|
|
57
58
|
print(install_hint())
|
|
58
59
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""CPU rotated IoU and greedy NMS.
|
|
2
2
|
|
|
3
|
-
Source of truth: ``export/nms.py``. ``
|
|
3
|
+
Source of truth: ``export/nms.py``. ``odet export onnx`` copies this file
|
|
4
4
|
with the rest of the consumer stack next to ``model.onnx``. No oriented-det imports.
|
|
5
5
|
|
|
6
6
|
IoU backends:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""Run the exported FCOS ONNX on the bundled plane image and assert NMS.
|
|
3
3
|
|
|
4
|
-
Works from the repo (``python -m export demo``) and from a copied
|
|
5
|
-
``onnx_export/`` bundle (``python demo.py``).
|
|
4
|
+
Works from the repo (``odet export demo`` / ``python -m export demo``) and from a copied
|
|
5
|
+
``onnx_export/`` bundle (``python demo.py``). The copied bundle does not need oriented-det.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""Run a pre-NMS ONNX export on a folder of images (ORT + Python NMS).
|
|
3
3
|
|
|
4
|
-
Works from the repo (``python -m export infer``) and from a copied
|
|
5
|
-
``onnx_export/`` bundle (``python infer_onnx.py ...``).
|
|
4
|
+
Works from the repo (``odet export infer`` / ``python -m export infer``) and from a copied
|
|
5
|
+
``onnx_export/`` bundle (``python infer_onnx.py ...``). The copied bundle does not need oriented-det.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
@@ -28,6 +28,7 @@ _COMMANDS: Dict[str, Tuple[str, str]] = {
|
|
|
28
28
|
"labels-to-comma": ("tools.dota_labels_to_comma", "odet-labels-to-comma"),
|
|
29
29
|
"free-gpu": ("tools.free_gpu", "odet-free-gpu"),
|
|
30
30
|
"pretrained": ("tools.pretrained_download", "odet-pretrained"),
|
|
31
|
+
"export": ("export.cli", "odet-export"),
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
|
|
@@ -42,6 +43,7 @@ def _print_help() -> None:
|
|
|
42
43
|
print(" odet train --config configs/oriented_rcnn/dota_le90_1x.json")
|
|
43
44
|
print(" odet train-multi-gpu --config configs/oriented_rcnn/dota_le90_1x.json")
|
|
44
45
|
print(" odet preds --experiment-dir runs/oriented_rcnn/<id>")
|
|
46
|
+
print(" odet export onnx --config path/to/config.json --checkpoint path/to/model.pth")
|
|
45
47
|
print(" odet playground-csv --data-root /path/to/playground")
|
|
46
48
|
|
|
47
49
|
|
{oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_retinanet/dota_le90_1x.json
RENAMED
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
],
|
|
105
105
|
"retinanet_stacked_convs": 4,
|
|
106
106
|
"box_reg_loss_type": "l1",
|
|
107
|
-
"use_hbb_for_matching":
|
|
107
|
+
"use_hbb_for_matching": false,
|
|
108
108
|
"final_nms_use_cpu": false,
|
|
109
109
|
"inference_pre_nms_score_threshold": 0.05,
|
|
110
110
|
"final_nms_iou_threshold": 0.1,
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"rpn_negative_iou_threshold": 0.4
|
|
114
114
|
},
|
|
115
115
|
"production": {
|
|
116
|
-
"score_threshold": 0.
|
|
116
|
+
"score_threshold": 0.25,
|
|
117
117
|
"inference_pre_nms_score_threshold": 0.05,
|
|
118
118
|
"final_nms_iou_threshold": 0.1,
|
|
119
119
|
"max_detections_per_image": 3000,
|
|
@@ -377,6 +377,8 @@ def compute_oriented_retinanet_loss(
|
|
|
377
377
|
- "loss_classifier": Classification loss (sigmoid focal loss, normalized by the number
|
|
378
378
|
of positive anchors); same TensorBoard name as two-stage detectors
|
|
379
379
|
- "loss_box_reg": Box regression loss (smooth L1)
|
|
380
|
+
- "retinanet_num_pos" / "retinanet_num_neg" / "retinanet_num_ignore": assignment
|
|
381
|
+
counts for the batch (Python floats, not part of ``total_loss``)
|
|
380
382
|
"""
|
|
381
383
|
if torch is None or F is None:
|
|
382
384
|
raise RuntimeError("PyTorch is required for loss computation.")
|
|
@@ -403,6 +405,8 @@ def compute_oriented_retinanet_loss(
|
|
|
403
405
|
# normalized once by the total number of positive anchors in the batch (avg_factor).
|
|
404
406
|
cls_loss_sums = []
|
|
405
407
|
num_pos_total = 0
|
|
408
|
+
num_neg_total = 0
|
|
409
|
+
num_ignore_total = 0
|
|
406
410
|
reg_loss_sums: List[torch.Tensor] = []
|
|
407
411
|
reg_loss_decoded_addends: List[torch.Tensor] = []
|
|
408
412
|
num_reg_pos_total = 0
|
|
@@ -585,7 +589,9 @@ def compute_oriented_retinanet_loss(
|
|
|
585
589
|
)
|
|
586
590
|
)
|
|
587
591
|
num_pos_total += int((labels == 1).sum())
|
|
588
|
-
|
|
592
|
+
num_neg_total += int((labels == 0).sum())
|
|
593
|
+
num_ignore_total += int((labels == -1).sum())
|
|
594
|
+
|
|
589
595
|
positive_mask = labels == 1
|
|
590
596
|
if not positive_mask.any():
|
|
591
597
|
continue
|
|
@@ -731,6 +737,9 @@ def compute_oriented_retinanet_loss(
|
|
|
731
737
|
return {
|
|
732
738
|
"loss_classifier": loss_classification,
|
|
733
739
|
"loss_box_reg": loss_box_reg,
|
|
740
|
+
"retinanet_num_pos": float(num_pos_total),
|
|
741
|
+
"retinanet_num_neg": float(num_neg_total),
|
|
742
|
+
"retinanet_num_ignore": float(num_ignore_total),
|
|
734
743
|
}
|
|
735
744
|
|
|
736
745
|
|
|
@@ -9,8 +9,8 @@ Runs on CPU or CUDA (vectorized PyTorch; no custom kernel). Intersection
|
|
|
9
9
|
math is fp32 with AMP off, same reason as KFIoU.
|
|
10
10
|
|
|
11
11
|
Vertex order around the intersection centroid uses ``atan2`` (mmcv dropped
|
|
12
|
-
its CUDA sort for stability).
|
|
13
|
-
shoelace terms are 0.
|
|
12
|
+
its CUDA sort for stability). Unused hull slots repeat the first intersection
|
|
13
|
+
vertex so extra shoelace terms are 0.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
16
|
from __future__ import annotations
|
|
@@ -110,7 +110,12 @@ def _box1_in_box2(corners1: Tensor, corners2: Tensor) -> Tensor:
|
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
def _sort_indices(vertices: Tensor, mask: Tensor) -> Tensor:
|
|
113
|
-
"""``(B, N, 24, 2)`` + validity → ``(B, N, 9)`` hull indices (wrap +
|
|
113
|
+
"""``(B, N, 24, 2)`` + validity → ``(B, N, 9)`` hull indices (wrap + pad).
|
|
114
|
+
|
|
115
|
+
Unused slots repeat the first hull vertex so extra shoelace terms are 0.
|
|
116
|
+
Padding with an invalid exterior corner (still has real xy) inflates the
|
|
117
|
+
polygon and clamps IoU to 1.
|
|
118
|
+
"""
|
|
114
119
|
mask_b = mask.bool()
|
|
115
120
|
mask_f = mask_b.to(dtype=vertices.dtype)
|
|
116
121
|
num_valid = mask_f.sum(dim=-1, keepdim=True).clamp(min=1.0)
|
|
@@ -121,17 +126,12 @@ def _sort_indices(vertices: Tensor, mask: Tensor) -> Tensor:
|
|
|
121
126
|
sorted_idx = torch.argsort(ang, dim=-1)
|
|
122
127
|
first8 = sorted_idx[..., :8]
|
|
123
128
|
wrap = first8[..., :1]
|
|
124
|
-
dummy_idx = torch.argsort(mask_b.to(dtype=vertices.dtype), dim=-1)[..., :1]
|
|
125
129
|
k = mask_b.to(dtype=torch.int64).sum(dim=-1).clamp(max=8)
|
|
126
130
|
slots = torch.arange(9, device=vertices.device).view(1, 1, 9)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
is_wrap = (slots == k_exp) & (k_exp > 0)
|
|
130
|
-
first8_pad = torch.cat([first8, first8[..., :1]], dim=-1)
|
|
131
|
-
dummy_exp = dummy_idx.expand(-1, -1, 9)
|
|
131
|
+
is_vertex = slots < k.unsqueeze(-1)
|
|
132
|
+
first8_pad = torch.cat([first8, wrap], dim=-1)
|
|
132
133
|
wrap_exp = wrap.expand(-1, -1, 9)
|
|
133
|
-
|
|
134
|
-
return torch.where(is_wrap, wrap_exp, out)
|
|
134
|
+
return torch.where(is_vertex, first8_pad, wrap_exp)
|
|
135
135
|
|
|
136
136
|
|
|
137
137
|
def _intersection_area(corners1: Tensor, corners2: Tensor) -> Tensor:
|
|
@@ -207,7 +207,7 @@ def download_asset(
|
|
|
207
207
|
"""Download a manifest asset from Hugging Face Hub.
|
|
208
208
|
|
|
209
209
|
Args:
|
|
210
|
-
asset_name: Manifest slug (e.g. ``
|
|
210
|
+
asset_name: Manifest slug (e.g. ``rotated_retinanet_dota_le90_1x``) or ``.pth`` filename.
|
|
211
211
|
dest: Optional explicit destination file. Defaults to ``<pretrained_dir>/<filename>``.
|
|
212
212
|
|
|
213
213
|
Returns:
|
|
@@ -3,22 +3,40 @@
|
|
|
3
3
|
"revision": "main",
|
|
4
4
|
"assets": {
|
|
5
5
|
"rotated_retinanet_dota_le90_1x": {
|
|
6
|
-
"filename": "rotated_retinanet_r50_fpn_dota_le90_1x-
|
|
7
|
-
"sha256": "
|
|
6
|
+
"filename": "rotated_retinanet_r50_fpn_dota_le90_1x-b9190270.pth",
|
|
7
|
+
"sha256": "b9190270d771b6e5ae2041444b1f2ab5dc3963b09447d3352c76fcef2c72d0cc",
|
|
8
8
|
"source_recipe": "configs/rotated_retinanet/dota_le90_1x.json",
|
|
9
|
+
"experiment_dir": "runs/rotated_retinanet/20260919-093746",
|
|
10
|
+
"eval_map50": 0.7112,
|
|
11
|
+
"eval_task1_map50": 0.7172,
|
|
12
|
+
"eval_report": "docs/eval-reports/rotated_retinanet_dota_le90_1x/model_analysis.md"
|
|
13
|
+
},
|
|
14
|
+
"rotated_retinanet_dota_le90_1x_hbb": {
|
|
15
|
+
"filename": "rotated_retinanet_r50_fpn_dota_le90_1x_hbb-9eb38d49.pth",
|
|
16
|
+
"sha256": "9eb38d49819413f26fa32273b5954966f834caddf0f4d6dfde569864e0b68139",
|
|
17
|
+
"source_recipe": "configs/rotated_retinanet/dota_le90_1x_hbb.json",
|
|
9
18
|
"experiment_dir": "runs/rotated_retinanet/20260912-105343",
|
|
10
19
|
"eval_map50": 0.6820,
|
|
11
20
|
"eval_task1_map50": 0.6787,
|
|
12
|
-
"eval_report": "docs/eval-reports/
|
|
21
|
+
"eval_report": "docs/eval-reports/rotated_retinanet_dota_le90_1x_hbb/model_analysis.md"
|
|
13
22
|
},
|
|
14
23
|
"rotated_retinanet_dota_le90_3x": {
|
|
15
|
-
"filename": "rotated_retinanet_r50_fpn_dota_le90_3x-
|
|
16
|
-
"sha256": "
|
|
24
|
+
"filename": "rotated_retinanet_r50_fpn_dota_le90_3x-961aaf73.pth",
|
|
25
|
+
"sha256": "961aaf7371be236418fe9f90d2223b18a03109cdedf40a242d093d12ad118c8d",
|
|
17
26
|
"source_recipe": "configs/rotated_retinanet/dota_le90_3x.json",
|
|
27
|
+
"experiment_dir": "runs/rotated_retinanet/20260920-054001",
|
|
28
|
+
"eval_map50": 0.7856,
|
|
29
|
+
"eval_task1_map50": 0.7389,
|
|
30
|
+
"eval_report": "docs/eval-reports/rotated_retinanet_dota_le90_3x/model_analysis.md"
|
|
31
|
+
},
|
|
32
|
+
"rotated_retinanet_dota_le90_3x_hbb": {
|
|
33
|
+
"filename": "rotated_retinanet_r50_fpn_dota_le90_3x_hbb-42968545.pth",
|
|
34
|
+
"sha256": "429685453dc18b03d7ec659643fc3419745a361bd8d947a0cb98a88bb562ba9a",
|
|
35
|
+
"source_recipe": "configs/rotated_retinanet/dota_le90_3x_hbb.json",
|
|
18
36
|
"experiment_dir": "runs/rotated_retinanet/20260913-031811",
|
|
19
37
|
"eval_map50": 0.7651,
|
|
20
|
-
"eval_task1_map50": 0.
|
|
21
|
-
"eval_report": "docs/eval-reports/
|
|
38
|
+
"eval_task1_map50": 0.707,
|
|
39
|
+
"eval_report": "docs/eval-reports/rotated_retinanet_dota_le90_3x_hbb/model_analysis.md"
|
|
22
40
|
},
|
|
23
41
|
"rotated_faster_rcnn_dota_le90_3x": {
|
|
24
42
|
"filename": "rotated_faster_rcnn_r50_fpn_dota_le90_3x-9951acc6.pth",
|
|
@@ -847,6 +847,14 @@ def train_one_epoch(
|
|
|
847
847
|
f"match_rate={avg_metrics.get('roi_match_rate', 0.0):.2%}",
|
|
848
848
|
flush=True,
|
|
849
849
|
)
|
|
850
|
+
if "retinanet_num_pos" in avg_metrics:
|
|
851
|
+
print(
|
|
852
|
+
" RetinaNet assign: "
|
|
853
|
+
f"pos={avg_metrics.get('retinanet_num_pos', 0.0):.1f}, "
|
|
854
|
+
f"neg={avg_metrics.get('retinanet_num_neg', 0.0):.1f}, "
|
|
855
|
+
f"ignore={avg_metrics.get('retinanet_num_ignore', 0.0):.1f}",
|
|
856
|
+
flush=True,
|
|
857
|
+
)
|
|
850
858
|
# Debug: full loss breakdown to compare with MMRotate and spot unbalanced losses.
|
|
851
859
|
if debug:
|
|
852
860
|
loss_keys = [k for k in avg_metrics if k not in ("epoch", "_global_step") and (k == "total_loss" or k.startswith("loss_"))]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oriented-det
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: A lightweight, modern PyTorch library for rotated object detection in aerial and satellite imagery
|
|
5
5
|
Author: Jeff Faudi, DL4EO
|
|
6
6
|
Maintainer: Jeff Faudi, DL4EO
|
|
@@ -77,7 +77,7 @@ Dynamic: license-file
|
|
|
77
77
|
- **Datasets**: DOTA polygon loader (pattern, split file, or separate folders), **HRSC2016** native XML loader, **FAIR1M** 37-class XML loader (+ convert/tile tutorial), **SSDD** and **HRSID** SAR ship loaders (finetune DOTA 1× Hub locally; no SAR zoo), image tiling, label filtering, ignore masks, oriented mAP evaluation
|
|
78
78
|
- **Models**: **Oriented R-CNN** ([Xie et al., ICCV 2021](https://openaccess.thecvf.com/content/ICCV2021/html/Xie_Oriented_R-CNN_for_Object_Detection_ICCV_2021_paper.html); horizontal RPN + MidpointOffset → oriented RoIAlign + oriented ROI head), **Rotated Faster R-CNN** (Ren et al., NeurIPS 2015 two-stage baseline with horizontal RPN + horizontal RoIAlign + rotated ROI head; MMRotate reference), **Rotated RetinaNet** ([Lin et al., ICCV 2017](https://openaccess.thecvf.com/content_ICCV_2017/papers/Lin_Focal_Loss_for_ICCV_2017_paper.pdf); oriented anchors, sigmoid focal loss), **Rotated FCOS** (anchor-free single-stage; distance-angle coder, centerness, L1 / KFIoU / decoded rIoU); ResNet + FPN backbones; selective loading of external checkpoints where configs wire `checkpoint.load_from_checkpoint`
|
|
79
79
|
- **Training**: JSON configs + **`odet train`**, mixed precision (AMP), gradient accumulation, checkpointing, best-metric tracking, TensorBoard, optional curriculum learning and profiling
|
|
80
|
-
- **ONNX export**: pre-NMS ONNX + Python NMS (`
|
|
80
|
+
- **ONNX export**: pre-NMS ONNX + Python NMS (`odet export` / `make export-onnx`); consumers run ONNX Runtime only
|
|
81
81
|
|
|
82
82
|
Hands-on write-ups (code, metrics, inference knobs) live on **[DeepLearning.Earth](https://deeplearning.earth)** — especially the [15 DOTA class tour](https://deeplearning.earth/posts/2026-06-23_oriented_rcnn_detections_for_the_15_dota_classes/), [sampled rIoU and ProbIoU](https://deeplearning.earth/posts/2026-07-10_rotated_faster_rcnn_probiou_dota/), [Rotated FCOS / v0.2.0](https://deeplearning.earth/posts/2026-08-28_oriented-det_v0_2_0_rotated_fcos_decoded_riou_and_the_updated_zoo/), and [macOS FCOS vs Oriented R-CNN](https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/).
|
|
83
83
|
|
|
@@ -107,7 +107,7 @@ uv pip install -e .
|
|
|
107
107
|
- From PyPI: `pip install oriented-det`
|
|
108
108
|
- For development and tests: `uv pip install -e ".[dev]"`
|
|
109
109
|
- For the Gradio prediction viewer: `uv pip install -e ".[viewer]"` or `pip install "oriented-det[viewer]"`
|
|
110
|
-
- For **ONNX export**: `uv pip install -e ".[export]"` then `
|
|
110
|
+
- For **ONNX export**: `uv pip install -e ".[export]"` then `odet export --help` (see [ONNX export](docs/examples/export.md))
|
|
111
111
|
- For **macOS Apple Silicon** or **CPU-only**, see [Installation](docs/getting-started/installation.md) and the [macOS walkthrough](https://deeplearning.earth/posts/2026-06-25_oriented_object_detection_on_macos_in_pure_python/) (`odet image-demo` on MPS, no CUDA toolchain).
|
|
112
112
|
- Verify: `pytest tests/test_geometry.py tests/test_iou.py tests/test_nms.py`
|
|
113
113
|
|
|
@@ -154,7 +154,7 @@ After that, copy-pasted commands and unmodified configs that reference `/path/to
|
|
|
154
154
|
| **Configs** | [`configs/`](configs/) | Experiment JSON (`_base_` inheritance, schema in `configs/config.schema.json`) |
|
|
155
155
|
| **Runs** | `runs/<model_type>/<timestamp>/` | Checkpoints, `config.json` snapshot, `train.log` (created at train time; not shipped in the repo) |
|
|
156
156
|
| **Docs** | [`docs/`](docs/) | MkDocs user guide and API reference |
|
|
157
|
-
| **Examples** | [`demo/`](demo/), [`pretrained/`](pretrained/), [`notebooks/`](notebooks/), [`export/`](export/) | Demo images; Hub checkpoints; Kaggle FAIR1M tutorial notebook; ONNX export producer (`
|
|
157
|
+
| **Examples** | [`demo/`](demo/), [`pretrained/`](pretrained/), [`notebooks/`](notebooks/), [`export/`](export/) | Demo images; Hub checkpoints; Kaggle FAIR1M tutorial notebook; ONNX export producer (`odet export`) |
|
|
158
158
|
|
|
159
159
|
**`odet` vs `tools/`:** Installing the package registers the `odet` command. It loads modules under `tools/` (for example `tools.train`, `tools.save_predictions`). Shared inference and collate code lives in [`oriented_det/runtime/`](oriented_det/runtime/). You do not need two workflows — use **`odet`** (or **`make`**, which calls `odet`).
|
|
160
160
|
|
|
@@ -165,7 +165,7 @@ After that, copy-pasted commands and unmodified configs that reference `/path/to
|
|
|
165
165
|
Full documentation is in the **docs/** folder and can be built and served with MkDocs:
|
|
166
166
|
|
|
167
167
|
- **Build/serve**: `make docs` or `make docs-serve` (see [docs/README.md](docs/README.md)); or `uv pip install -e ".[docs]"` then `mkdocs serve`.
|
|
168
|
-
- **Guides**: [Getting Started](docs/getting-started/installation.md), [User Guide](docs/user-guide/geometry.md), [API Reference](docs/api/geometry.md), [Examples](docs/examples/inference.md), [ONNX export](docs/examples/export.md).
|
|
168
|
+
- **Guides**: [Getting Started](docs/getting-started/installation.md), [User Guide](docs/user-guide/geometry.md), [API Reference](docs/api/geometry.md), [Examples](docs/examples/inference.md), [Docker deploy](docs/examples/deploy.md), [ONNX export](docs/examples/export.md).
|
|
169
169
|
- **Blog**: [DeepLearning.Earth](https://deeplearning.earth) — curated posts below (code, metrics, inference knobs).
|
|
170
170
|
|
|
171
171
|
| Topic | Post |
|
|
@@ -181,6 +181,8 @@ Full documentation is in the **docs/** folder and can be built and served with M
|
|
|
181
181
|
| FCOS vs Oriented R-CNN (MPS latency, thresholds) | [https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/](https://deeplearning.earth/posts/2026-09-02_rotated_fcos_vs_oriented_rcnn_on_macos/) |
|
|
182
182
|
| Side-by-side browser demo (three 1× checkpoints) | [https://deeplearning.earth/posts/2026-09-06_oriented_det_optical_satellite_demo/](https://deeplearning.earth/posts/2026-09-06_oriented_det_optical_satellite_demo/) |
|
|
183
183
|
| Apache 2.0 vs DOTA / HRSC dataset terms | [https://deeplearning.earth/posts/2026-09-10_oriented_det_apache_license_versus_dota/](https://deeplearning.earth/posts/2026-09-10_oriented_det_apache_license_versus_dota/) |
|
|
184
|
+
| Docker deploy (Tile Geo Process) | [https://deeplearning.earth/posts/2026-10-05_deploy_oriented_det_in_docker/](https://deeplearning.earth/posts/2026-10-05_deploy_oriented_det_in_docker/) |
|
|
185
|
+
| ONNX export (no PyTorch on infer) | [https://deeplearning.earth/posts/2026-10-08_onnx_export_without_pytorch/](https://deeplearning.earth/posts/2026-10-08_onnx_export_without_pytorch/) |
|
|
184
186
|
|
|
185
187
|
## Documentation by folder
|
|
186
188
|
|
|
@@ -191,8 +193,8 @@ Full documentation is in the **docs/** folder and can be built and served with M
|
|
|
191
193
|
| [oriented_det/cli/](oriented_det/cli/) | [oriented_det/cli/README.md](oriented_det/cli/README.md) | **`odet`** entry point and subcommand list |
|
|
192
194
|
| [tools/](tools/) | [tools/README.md](tools/README.md) | CLI script implementations (invoked by `odet`; see [Repository layout](#repository-layout)) |
|
|
193
195
|
| [configs/](configs/) | [configs/README.md](configs/README.md) | DOTA configs and **pretrain model zoo** (`_base_` inheritance) |
|
|
194
|
-
| [deploy/example/](deploy/example/) | [deploy/example/README.md](deploy/example/README.md) |
|
|
195
|
-
| [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`
|
|
196
|
+
| [deploy/example/](deploy/example/) | [deploy/example/README.md](deploy/example/README.md) | Sanic Tile Geo Process Docker image (DOTA smoke) |
|
|
197
|
+
| [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`odet export`); consumer bundle in gitignored `onnx_export/` |
|
|
196
198
|
| [docs/](docs/) | [docs/README.md](docs/README.md) | MkDocs source; full user guide and API reference |
|
|
197
199
|
|
|
198
200
|
## Training and evaluation
|
|
@@ -209,7 +211,7 @@ Install once: `uv pip install -e .`. Then:
|
|
|
209
211
|
| COCO polygons → DOTA | `odet coco-to-dota --ann-file instances.json --image-dir images --output-dir out` |
|
|
210
212
|
| Val predictions | `odet preds --experiment-dir runs/oriented_rcnn/<timestamp>` or `make preds` |
|
|
211
213
|
| Offline mAP | `make eval-val` or `make preds` then `make metrics`. DOTA: leaky val tiles (real test is Task 1). HRSC/FAIR1M/SSDD/HRSID: held-out test/val. |
|
|
212
|
-
| ONNX export | `
|
|
214
|
+
| ONNX export | `odet export onnx ...` or `make export-onnx` (see [export/README.md](export/README.md)) |
|
|
213
215
|
|
|
214
216
|
DOTA configs: per-model `dota_le90_1x.json` under [configs/](configs/) (3× where published; Faster R-CNN and FCOS DOTA are 1×). Run `odet --help` for all subcommands. Makefile shortcuts and script-level options: [tools/README.md](tools/README.md). Config reference: [docs/user-guide/configuration.md](docs/user-guide/configuration.md), [configs/config.schema.json](configs/config.schema.json), [configs/README.md](configs/README.md).
|
|
215
217
|
|
|
@@ -245,7 +247,7 @@ OrientedDet is Apache-2.0 open source. For **consulting, training workshops, or
|
|
|
245
247
|
|
|
246
248
|
## Publishing to PyPI
|
|
247
249
|
|
|
248
|
-
Version **0.3.
|
|
250
|
+
Version **0.3.1** — tag releases as **`v0.3.1`** (git) matching `version` in `pyproject.toml`.
|
|
249
251
|
|
|
250
252
|
Configs: edit **`configs/`** at the repo root, then **`make sync-configs`** so **`oriented_det/configs/`** stays in sync (see **`oriented_det/configs/vendored_manifest.txt`**). CI runs **`make check-configs`**.
|
|
251
253
|
|
|
@@ -276,7 +278,7 @@ make check-configs
|
|
|
276
278
|
pytest tests/ -q
|
|
277
279
|
```
|
|
278
280
|
|
|
279
|
-
Bump version in `pyproject.toml` and `docs/changelog.md` if needed (currently **0.3.
|
|
281
|
+
Bump version in `pyproject.toml` and `docs/changelog.md` if needed (currently **0.3.1**).
|
|
280
282
|
|
|
281
283
|
#### 3. Build locally
|
|
282
284
|
|
|
@@ -62,7 +62,9 @@ oriented_det/configs/rotated_fcos/hrsc2016_le90_1x.json
|
|
|
62
62
|
oriented_det/configs/rotated_fcos/hrsc2016_le90_3x.json
|
|
63
63
|
oriented_det/configs/rotated_fcos/hrsid_le90_1x.json
|
|
64
64
|
oriented_det/configs/rotated_retinanet/dota_le90_1x.json
|
|
65
|
+
oriented_det/configs/rotated_retinanet/dota_le90_1x_hbb.json
|
|
65
66
|
oriented_det/configs/rotated_retinanet/dota_le90_3x.json
|
|
67
|
+
oriented_det/configs/rotated_retinanet/dota_le90_3x_hbb.json
|
|
66
68
|
oriented_det/data/__init__.py
|
|
67
69
|
oriented_det/data/airbus_playground.py
|
|
68
70
|
oriented_det/data/build.py
|