Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
4922688
feat: add rotated box utilities for OBB support
farukalamai Apr 2, 2026
2ac2c1e
feat: add DOTA v1.0 dataset loader for OBB support
farukalamai Apr 2, 2026
988cf4d
feat: add oriented detection head with angle prediction MLP
farukalamai Apr 2, 2026
b2f1994
feat: add GWD matching cost and KLD loss for oriented boxes
farukalamai Apr 2, 2026
7f86e13
feat: add oriented box postprocessing with corner output
farukalamai Apr 2, 2026
8652300
feat: verify oriented box ONNX export produces 5D output
farukalamai Apr 2, 2026
cfc261a
feat: wire oriented flag through training pipeline and namespace
farukalamai Apr 2, 2026
126ce30
fix: rename dota.py to dota_detection.py and fix edge cases
farukalamai Apr 3, 2026
abc95e0
fix: avoid in-place normalization and add edge case tests
farukalamai Apr 3, 2026
7445317
fix: add oriented to BuilderArgs protocol, zero-init angle_embed, fix…
farukalamai Apr 3, 2026
439026d
fix: add dota to codespell ignore list and fix mypy Dataset subclass …
farukalamai Apr 3, 2026
d68489f
fix: resolve mypy type-arg error and codespell dota false positive
farukalamai Apr 3, 2026
7dff929
fix: provide generic type argument to Dataset instead of type-ignore
farukalamai Apr 3, 2026
6d852b2
fix: add dota_detection to mypy ignore list matching other dataset mo…
farukalamai Apr 3, 2026
4ad8892
fix: OBB augmentation, loss keys, segmentation guard, ProbIoU matching
farukalamai Jul 7, 2026
a69442f
fix(pre-commit): 🎨 auto format pre-commit hooks
pre-commit-ci[bot] Jul 7, 2026
ef99f78
fix(obb): weight encoder GIoU loss and use axis-aligned envelope targets
farukalamai Jul 19, 2026
6fb5051
Merge upstream/develop into feat/obb-support
farukalamai Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ filterwarnings = [

[tool.codespell]
skip = "*.pth"
ignore-words-list = "dota"

[tool.mypy]
python_version = "3.10"
Expand All @@ -260,6 +261,7 @@ overrides = [
], ignore_errors = true },
{ module = [
"torchvision", "torchvision.*",
"albumentations", "albumentations.*",
"pycocotools", "pycocotools.*",
"timm", "timm.*",
"einops", "einops.*",
Expand Down
1 change: 1 addition & 0 deletions src/rfdetr/_namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"num_queries",
"num_select",
"num_windows",
"oriented",
"out_feature_indexes",
"patch_size",
"positional_encoding_size",
Expand Down
4 changes: 3 additions & 1 deletion src/rfdetr/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,7 @@ class ModelConfig(BaseConfig):
ia_bce_loss: bool = True
cls_loss_coef: float = 1.0
segmentation_head: bool = False
oriented: bool = False
use_grouppose_keypoints: bool = False
keypoint_cross_attn: bool = True
inter_instance_kp_attn: bool = False
Expand Down Expand Up @@ -1074,9 +1075,10 @@ class TrainConfig(BaseConfig):
keypoint_visible_loss_coef: float = 0
keypoint_nll_loss_coef: float = 0
keypoint_oks_sigmas: list[float] | None = None
dataset_file: Literal["coco", "o365", "roboflow", "yolo"] = "roboflow"
dataset_file: Literal["coco", "o365", "roboflow", "yolo", "dota"] = "roboflow"
square_resize_div_64: bool = True
dataset_dir: PathLikeStr | None
dota_include_difficult: bool = False
output_dir: PathLikeStr = "output"
multi_scale: bool = True
expanded_scales: bool = True
Expand Down
6 changes: 6 additions & 0 deletions src/rfdetr/datasets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
from rfdetr.datasets._keypoint_schema import infer_coco_keypoint_schema as infer_coco_keypoint_schema
from rfdetr.datasets._keypoint_schema import infer_yolo_keypoint_schema as infer_yolo_keypoint_schema
from rfdetr.datasets.coco import build_coco, build_roboflow_from_coco
from rfdetr.datasets.dota_detection import DOTA_V1_CLASSES as DOTA_V1_CLASSES
from rfdetr.datasets.dota_detection import DotaDetection, build_dota
from rfdetr.datasets.o365 import build_o365
from rfdetr.datasets.yolo import YoloDetection, build_roboflow_from_yolo

Expand All @@ -37,6 +39,8 @@ def get_coco_api_from_dataset(dataset: Dataset[Any]) -> Any | None:
return dataset.coco
if isinstance(dataset, YoloDetection):
return dataset.coco
if isinstance(dataset, DotaDetection):
return None
return None


Expand Down Expand Up @@ -95,4 +99,6 @@ def build_dataset(image_set: str, args: Any, resolution: int) -> Dataset[Any]:
return build_roboflow(image_set, args, resolution)
if args.dataset_file == "yolo":
return build_roboflow_from_yolo(image_set, args, resolution)
if args.dataset_file == "dota":
return build_dota(image_set, args, resolution)
raise ValueError(f"dataset {args.dataset_file} not supported")
Loading
Loading