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.
Files changed (224) hide show
  1. {oriented_det-0.3.0 → oriented_det-0.3.1}/PKG-INFO +12 -10
  2. {oriented_det-0.3.0 → oriented_det-0.3.1}/README.md +11 -9
  3. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/__init__.py +1 -1
  4. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/__main__.py +1 -1
  5. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/cli.py +10 -9
  6. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/nms.py +1 -1
  7. oriented_det-0.3.1/export/scripts/__init__.py +6 -0
  8. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/demo.py +2 -2
  9. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/infer_onnx.py +2 -2
  10. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/cli/__init__.py +2 -0
  11. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_retinanet/dota_le90_1x.json +2 -2
  12. oriented_det-0.3.1/oriented_det/configs/rotated_retinanet/dota_le90_1x_hbb.json +9 -0
  13. oriented_det-0.3.1/oriented_det/configs/rotated_retinanet/dota_le90_3x_hbb.json +7 -0
  14. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/rotated_retinanet.py +10 -1
  15. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/diff_iou_rotated.py +11 -11
  16. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/pretrained/hub.py +1 -1
  17. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/pretrained/manifest.json +25 -7
  18. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/engine.py +8 -0
  19. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/PKG-INFO +12 -10
  20. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/SOURCES.txt +2 -0
  21. {oriented_det-0.3.0 → oriented_det-0.3.1}/pyproject.toml +6 -1
  22. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_config_behavior.py +1 -1
  23. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_config_model_wiring.py +18 -28
  24. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_deploy_generate_description.py +1 -0
  25. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_diff_iou_rotated.py +13 -0
  26. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_models.py +2 -0
  27. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_pretrained_hub.py +14 -4
  28. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_retinanet_assign.py +55 -0
  29. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_viewer_gradio_compat.py +4 -0
  30. oriented_det-0.3.0/export/scripts/__init__.py +0 -6
  31. {oriented_det-0.3.0 → oriented_det-0.3.1}/LICENSE +0 -0
  32. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/ort_runtime.py +0 -0
  33. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/postprocess.py +0 -0
  34. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/preprocess.py +0 -0
  35. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/runtime.py +0 -0
  36. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/export_onnx.py +0 -0
  37. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/save_predictions_onnx.py +0 -0
  38. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/scripts/zip_bundle.py +0 -0
  39. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/val_dataset.py +0 -0
  40. {oriented_det-0.3.0 → oriented_det-0.3.1}/export/wrappers.py +0 -0
  41. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/__init__.py +0 -0
  42. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/cli/__main__.py +0 -0
  43. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/cli/train.py +0 -0
  44. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/augmentation.json +0 -0
  45. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/dota_le90.json +0 -0
  46. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/fair1m.json +0 -0
  47. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/hrsc2016.json +0 -0
  48. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/hrsid.json +0 -0
  49. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/datasets/ssdd.json +0 -0
  50. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/fp16.json +0 -0
  51. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/oriented_rcnn_r50.json +0 -0
  52. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/rotated_faster_rcnn_r50.json +0 -0
  53. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/rotated_fcos_r50.json +0 -0
  54. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/models/rotated_retinanet_r50.json +0 -0
  55. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/preprocessing.json +0 -0
  56. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/_base_/schedules/1x.json +0 -0
  57. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/config.schema.json +0 -0
  58. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/dota_le90_1x.json +0 -0
  59. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/dota_le90_3x.json +0 -0
  60. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/fair1m_le90_1x.json +0 -0
  61. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/hrsc2016_le90_1x.json +0 -0
  62. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/hrsc2016_le90_3x.json +0 -0
  63. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/oriented_rcnn/hrsid_le90_1x.json +0 -0
  64. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/dota_le90_1x.json +0 -0
  65. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/dota_le90_3x.json +0 -0
  66. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/fair1m_le90_1x.json +0 -0
  67. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/hrsc2016_le90_1x.json +0 -0
  68. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/hrsc2016_le90_3x.json +0 -0
  69. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/hrsid_le90_1x.json +0 -0
  70. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_faster_rcnn/ssdd_le90_1x.json +0 -0
  71. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/dota_le90_1x.json +0 -0
  72. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/dota_le90_1x_l1_kfiou_aux.json +0 -0
  73. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/dota_le90_3x.json +0 -0
  74. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/fair1m_le90_1x.json +0 -0
  75. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/hrsc2016_le90_1x.json +0 -0
  76. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/hrsc2016_le90_3x.json +0 -0
  77. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_fcos/hrsid_le90_1x.json +0 -0
  78. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/configs/rotated_retinanet/dota_le90_3x.json +0 -0
  79. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/__init__.py +0 -0
  80. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/airbus_playground.py +0 -0
  81. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/build.py +0 -0
  82. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/coco_obb.py +0 -0
  83. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/dota.py +0 -0
  84. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/dota_classes.py +0 -0
  85. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/dota_task1.py +0 -0
  86. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/evaluation.py +0 -0
  87. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/fair1m.py +0 -0
  88. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/fair1m_classes.py +0 -0
  89. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/flips.py +0 -0
  90. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/hrsc2016.py +0 -0
  91. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/hrsid.py +0 -0
  92. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/lookalike.py +0 -0
  93. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/preprocessing.py +0 -0
  94. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/rotates.py +0 -0
  95. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/ssdd.py +0 -0
  96. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/tiling.py +0 -0
  97. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/data/transforms.py +0 -0
  98. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/__init__.py +0 -0
  99. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/poly.py +0 -0
  100. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/qbox.py +0 -0
  101. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/rbox.py +0 -0
  102. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/geometry/transforms.py +0 -0
  103. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/__init__.py +0 -0
  104. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/backbones/__init__.py +0 -0
  105. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/backbones/resnet_fpn.py +0 -0
  106. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/backbones/utils.py +0 -0
  107. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/bbox_coder.py +0 -0
  108. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/faster_rcnn_inference.py +0 -0
  109. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/horizontal_roi_coder.py +0 -0
  110. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_rcnn.py +0 -0
  111. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_rcnn_inference.py +0 -0
  112. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_roi.py +0 -0
  113. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/oriented_rpn.py +0 -0
  114. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/retinanet_assign.py +0 -0
  115. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/rotated_fcos.py +0 -0
  116. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/models/utils.py +0 -0
  117. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/__init__.py +0 -0
  118. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/gaussian_angle.py +0 -0
  119. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/gpu_ops.py +0 -0
  120. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/iou.py +0 -0
  121. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/kfiou.py +0 -0
  122. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/nms.py +0 -0
  123. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/probiou.py +0 -0
  124. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/rotated_ops.py +0 -0
  125. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/ops/utils.py +0 -0
  126. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/pretrained/__init__.py +0 -0
  127. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/__init__.py +0 -0
  128. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/checkpoint.py +0 -0
  129. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/collate.py +0 -0
  130. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/runtime/inference.py +0 -0
  131. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/__init__.py +0 -0
  132. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/config.py +0 -0
  133. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/grouped_ce.py +0 -0
  134. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/piecewise_schedule.py +0 -0
  135. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/profiler.py +0 -0
  136. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/train/utils.py +0 -0
  137. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/__init__.py +0 -0
  138. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/config.py +0 -0
  139. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/device.py +0 -0
  140. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/logging.py +0 -0
  141. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/progress.py +0 -0
  142. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det/utils/viz.py +0 -0
  143. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/dependency_links.txt +0 -0
  144. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/entry_points.txt +0 -0
  145. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/requires.txt +0 -0
  146. {oriented_det-0.3.0 → oriented_det-0.3.1}/oriented_det.egg-info/top_level.txt +0 -0
  147. {oriented_det-0.3.0 → oriented_det-0.3.1}/setup.cfg +0 -0
  148. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_airbus_playground.py +0 -0
  149. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_annotation_csv.py +0 -0
  150. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_bbox_coder.py +0 -0
  151. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_class_tile_oversampling.py +0 -0
  152. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_coco_obb.py +0 -0
  153. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_cosine_tail_scheduler.py +0 -0
  154. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_dota.py +0 -0
  155. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_dota_task1.py +0 -0
  156. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_dota_tile_roots.py +0 -0
  157. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_evaluation.py +0 -0
  158. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_exact_rotated_iou.py +0 -0
  159. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_fair1m.py +0 -0
  160. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_gaussian_angle.py +0 -0
  161. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_geometry.py +0 -0
  162. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_geometry_transforms.py +0 -0
  163. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_gpu_ops.py +0 -0
  164. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_grouped_ce.py +0 -0
  165. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_hard_tile_oversampling.py +0 -0
  166. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_hrsc2016.py +0 -0
  167. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_hrsid.py +0 -0
  168. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_iou.py +0 -0
  169. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_kfiou.py +0 -0
  170. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_lookalike.py +0 -0
  171. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_metrics_margin_filter.py +0 -0
  172. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_nms.py +0 -0
  173. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_ops_utils.py +0 -0
  174. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_optimizer_param_groups.py +0 -0
  175. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_piecewise_schedule.py +0 -0
  176. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_preprocessing.py +0 -0
  177. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_probiou.py +0 -0
  178. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_roi.py +0 -0
  179. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_rpn.py +0 -0
  180. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_score_thresholds.py +0 -0
  181. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_sigmoid_focal_class_weights.py +0 -0
  182. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_sliding_window_margin.py +0 -0
  183. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_source_provenance.py +0 -0
  184. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_ssdd.py +0 -0
  185. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_tile_dota.py +0 -0
  186. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_tiling.py +0 -0
  187. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_train.py +0 -0
  188. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_train_flips.py +0 -0
  189. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_train_rotates.py +0 -0
  190. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_training_config_strict.py +0 -0
  191. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_utils_config.py +0 -0
  192. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_utils_viz.py +0 -0
  193. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_vendored_configs_sync.py +0 -0
  194. {oriented_det-0.3.0 → oriented_det-0.3.1}/tests/test_wizard.py +0 -0
  195. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/__init__.py +0 -0
  196. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/annotation_csv.py +0 -0
  197. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/app.py +0 -0
  198. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/coco_to_dota.py +0 -0
  199. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/compare_hbb_obb_counts.py +0 -0
  200. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/dataset_stats.py +0 -0
  201. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/dota_labels_to_comma.py +0 -0
  202. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/dota_task1_submit.py +0 -0
  203. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/fair1m_to_dota.py +0 -0
  204. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/filter_predictions_by_gt.py +0 -0
  205. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/free_gpu.py +0 -0
  206. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/generate_airbus_playground_csv.py +0 -0
  207. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/generate_oriented_annotations.py +0 -0
  208. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/hbb_to_obb.py +0 -0
  209. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/hrsc_to_dota.py +0 -0
  210. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/image_demo.py +0 -0
  211. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/lr_finder.py +0 -0
  212. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/measure_sampled_riou_error.py +0 -0
  213. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/playground_to_dota.py +0 -0
  214. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/pretrained_download.py +0 -0
  215. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/preview_augmentation.py +0 -0
  216. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/publish_checkpoint.py +0 -0
  217. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/save_predictions.py +0 -0
  218. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/ssdd_to_dota.py +0 -0
  219. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/sync_vendored_configs.py +0 -0
  220. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/tile_dota.py +0 -0
  221. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/train.py +0 -0
  222. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/train_example.py +0 -0
  223. {oriented_det-0.3.0 → oriented_det-0.3.1}/tools/train_multi_gpu.py +0 -0
  224. {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.0
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 (`python -m export` / `make export-onnx`); consumers run ONNX Runtime only
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 `python -m export --help` (see [ONNX export](docs/examples/export.md))
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 (`python -m export`) |
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) | Minimal DOTA deploy smoke image |
195
- | [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`python -m export`); consumer bundle in gitignored `onnx_export/` |
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 | `make export-onnx` or `python -m export onnx ...` (see [export/README.md](export/README.md)) |
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.0** — tag releases as **`v0.3.0`** (git) matching `version` in `pyproject.toml`.
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.0**).
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 (`python -m export` / `make export-onnx`); consumers run ONNX Runtime only
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 `python -m export --help` (see [ONNX export](docs/examples/export.md))
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 (`python -m export`) |
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) | Minimal DOTA deploy smoke image |
135
- | [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`python -m export`); consumer bundle in gitignored `onnx_export/` |
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 | `make export-onnx` or `python -m export onnx ...` (see [export/README.md](export/README.md)) |
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.0** — tag releases as **`v0.3.0`** (git) matching `version` in `pyproject.toml`.
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.0**).
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
- """``python -m export`` entry point."""
1
+ """``python -m export`` entry point (same as ``odet export``)."""
2
2
 
3
3
  from export.cli import main
4
4
 
@@ -1,4 +1,4 @@
1
- """Standalone CLI for ONNX export (``python -m export``)."""
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
- # Former odet / export-tf names. Export is not an odet subcommand.
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"Export from a checkpoint: pip install -r {export} (plus oriented-det)"
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: python -m export <command> [options]")
39
- print("Run from the oriented-det repo root. Not an odet subcommand.")
40
- print("demo / infer do not need oriented-det.")
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
- " python -m export onnx --config path/to/config.json "
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
- " python -m export infer --onnx ./onnx_export/model.onnx "
53
+ " odet export infer --onnx ./onnx_export/model.onnx "
53
54
  "--images ./tiles --output ./onnx_export/predictions"
54
55
  )
55
- print(" python -m export demo")
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``. ``python -m export onnx`` copies this file
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:
@@ -0,0 +1,6 @@
1
+ """CLI implementations invoked by ``odet export`` / ``python -m export``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __all__ = []
6
+
@@ -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``). No oriented-det.
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 ...``). No oriented-det.
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
 
@@ -104,7 +104,7 @@
104
104
  ],
105
105
  "retinanet_stacked_convs": 4,
106
106
  "box_reg_loss_type": "l1",
107
- "use_hbb_for_matching": true,
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.35,
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,
@@ -0,0 +1,9 @@
1
+ {
2
+ "_base_": ["./dota_le90_1x.json"],
3
+ "model": {
4
+ "use_hbb_for_matching": true
5
+ },
6
+ "production": {
7
+ "score_threshold": 0.35
8
+ }
9
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "_base_": ["./dota_le90_1x_hbb.json"],
3
+ "training": {
4
+ "num_epochs": 36,
5
+ "lr_scheduler_milestones": [24, 33]
6
+ }
7
+ }
@@ -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). Invalid slots gather a zeroed dummy so extra
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 + dummy pad)."""
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
- k_exp = k.unsqueeze(-1)
128
- is_vertex = slots < k_exp
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
- out = torch.where(is_vertex, first8_pad, dummy_exp)
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. ``rotated_retinanet_dota_le90_3x``) or ``.pth`` filename.
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-9eb38d49.pth",
7
- "sha256": "9eb38d49819413f26fa32273b5954966f834caddf0f4d6dfde569864e0b68139",
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/rotated_retinanet_dota_le90_1x/model_analysis.md"
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-42968545.pth",
16
- "sha256": "429685453dc18b03d7ec659643fc3419745a361bd8d947a0cb98a88bb562ba9a",
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.7070,
21
- "eval_report": "docs/eval-reports/rotated_retinanet_dota_le90_3x/model_analysis.md"
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.0
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 (`python -m export` / `make export-onnx`); consumers run ONNX Runtime only
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 `python -m export --help` (see [ONNX export](docs/examples/export.md))
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 (`python -m export`) |
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) | Minimal DOTA deploy smoke image |
195
- | [export/](export/) | [export/README.md](export/README.md) | ONNX export producer (`python -m export`); consumer bundle in gitignored `onnx_export/` |
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 | `make export-onnx` or `python -m export onnx ...` (see [export/README.md](export/README.md)) |
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.0** — tag releases as **`v0.3.0`** (git) matching `version` in `pyproject.toml`.
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.0**).
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