Skip to content

Commit 2c278b2

Browse files
authored
Improve Vitens Kiemgetal OTX 1.6.x (#3671)
* modify tile recipes * remove max_number_det from tile adaptor * revert change in eval.py * change default * udpate description * udpate description * change recipe * update
1 parent 105efa4 commit 2c278b2

File tree

9 files changed

+27
-25
lines changed

9 files changed

+27
-25
lines changed

src/otx/algorithms/common/configs/training_base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,8 @@ class BaseTilingParameters(ParameterGroup):
409409

410410
tile_max_number = configurable_integer(
411411
header="Max object per image",
412-
description="Max object per image",
412+
description="Maximum number of objects per tile. If set to 1500, the tile adaptor "
413+
"will automatically determine the value. Otherwise, the manually set value will be used.",
413414
default_value=1500,
414415
min_value=1,
415416
max_value=5000,

src/otx/algorithms/detection/configs/base/data/tiling/atss_tile_pipeline.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,9 @@
1414
img_norm_cfg = dict(mean=[0, 0, 0], std=[255, 255, 255], to_rgb=True)
1515

1616
train_pipeline = [
17-
dict(type="MinIoURandomCrop", min_ious=(0.1, 0.3, 0.5, 0.7, 0.9), min_crop_size=0.3),
18-
dict(
19-
type="Resize",
20-
img_scale=[(992, 736), (896, 736), (1088, 736), (992, 672), (992, 800)],
21-
multiscale_mode="value",
22-
keep_ratio=False,
23-
),
24-
dict(type="RandomFlip", flip_ratio=0.5),
17+
dict(type="Resize", img_scale=img_size, keep_ratio=False),
2518
dict(type="Normalize", **img_norm_cfg),
19+
dict(type="RandomFlip", flip_ratio=0.5),
2620
dict(type="DefaultFormatBundle"),
2721
dict(
2822
type="Collect",

src/otx/algorithms/detection/configs/base/data/tiling/yolox_tile_pipeline.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@
1616
img_norm_cfg = dict(mean=[0.0, 0.0, 0.0], std=[1.0, 1.0, 1.0], to_rgb=False)
1717

1818
train_pipeline = [
19-
dict(
20-
type="RandomAffine",
21-
scaling_ratio_range=(0.1, 2),
22-
border=(-img_scale[0] // 2, -img_scale[1] // 2),
23-
),
24-
dict(type="YOLOXHSVRandomAug"),
2519
dict(type="RandomFlip", flip_ratio=0.5),
2620
dict(type="Resize", img_scale=img_scale, keep_ratio=True),
2721
dict(type="Pad", pad_to_square=True, pad_val=dict(img=(114.0, 114.0, 114.0))),

src/otx/algorithms/detection/configs/detection/configuration.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,7 @@ tiling_parameters:
645645

646646
tile_max_number:
647647
header: Max object per tile
648-
description: Maximum number of objects per tile
648+
description: Maximum number of objects per tile. If set to 1500, the tile adaptor will automatically determine the value. Otherwise, the manually set value will be used.
649649
affects_outcome_of: TRAINING
650650
default_value: 1500
651651
min_value: 1

src/otx/algorithms/detection/configs/detection/cspdarknet_yolox_tiny/tile_pipeline.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
3030

3131
train_pipeline = [
32-
dict(type="RandomAffine", scaling_ratio_range=(0.5, 1.5), border=(-img_scale[0] // 2, -img_scale[1] // 2)),
3332
dict(
3433
type="PhotoMetricDistortion",
3534
brightness_delta=32,
@@ -62,12 +61,12 @@
6261
test_pipeline = [
6362
dict(
6463
type="MultiScaleFlipAug",
65-
img_scale=(416, 416),
64+
img_scale=img_scale,
6665
flip=False,
6766
transforms=[
6867
dict(type="Resize", keep_ratio=False),
6968
dict(type="RandomFlip"),
70-
dict(type="Pad", size=(416, 416), pad_val=114.0),
69+
dict(type="Pad", size=img_scale, pad_val=114.0),
7170
dict(type="Normalize", **img_norm_cfg),
7271
dict(type="ImageToTensor", keys=["img"]),
7372
dict(type="Collect", keys=["img"]),

src/otx/algorithms/detection/configs/instance_segmentation/configuration.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ tiling_parameters:
646646

647647
tile_max_number:
648648
header: Max object per tile
649-
description: Maximum number of objects per tile
649+
description: Maximum number of objects per tile. If set to 1500, the tile adaptor will automatically determine the value. Otherwise, the manually set value will be used.
650650
affects_outcome_of: TRAINING
651651
default_value: 1500
652652
min_value: 1

src/otx/algorithms/detection/configs/rotated_detection/configuration.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ tiling_parameters:
631631

632632
tile_max_number:
633633
header: Max object per tile
634-
description: Maximum number of objects per tile
634+
description: Maximum number of objects per tile. If set to 1500, the tile adaptor will automatically determine the value. Otherwise, the manually set value will be used.
635635
affects_outcome_of: TRAINING
636636
default_value: 1500
637637
min_value: 1

src/otx/algorithms/detection/utils/data.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,5 +490,12 @@ def adaptive_tile_params(
490490
)
491491

492492
tiling_parameters.tile_size = tile_size
493-
tiling_parameters.tile_max_number = max_num_objects
494493
tiling_parameters.tile_overlap = tile_overlap
494+
495+
if tiling_parameters.tile_max_number == 1500:
496+
logger.info(
497+
f"----> tile max number is set to default (1500), replace with adaptive max_num_objects: {max_num_objects}"
498+
)
499+
tiling_parameters.tile_max_number = max_num_objects
500+
else:
501+
logger.info(f"----> tile max number is manually set to: {tiling_parameters.tile_max_number}")

tests/unit/algorithms/detection/tiling/test_tiling_detection.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,12 +432,15 @@ def test_max_annotation(self, max_annotation=200):
432432
assert len(data["gt_masks"].data[0][0]) <= max_annotation
433433

434434
@e2e_pytest_unit
435-
def test_adaptive_tile_parameters(self):
435+
@pytest.mark.parametrize("max_num_img", [100, 300, 1500, 1501])
436+
def test_adaptive_tile_parameters(self, max_num_img):
436437
model_template = parse_model_template(os.path.join(DEFAULT_ISEG_TEMPLATE_DIR, "template.yaml"))
437438
hp = create(model_template.hyper_parameters.data)
438439

439440
default_tile_size = hp.tiling_parameters.tile_size
440441
default_tile_overlap = hp.tiling_parameters.tile_overlap
442+
# manually set tile max number
443+
hp.tiling_parameters.tile_max_number = max_num_img
441444
default_tile_max_number = hp.tiling_parameters.tile_max_number
442445

443446
adaptive_tile_params(hp.tiling_parameters, self.otx_dataset)
@@ -448,5 +451,9 @@ def test_adaptive_tile_parameters(self):
448451
# check tile overlap is changed
449452
assert hp.tiling_parameters.tile_overlap != default_tile_overlap
450453

451-
# check max output prediction size is changed
452-
assert hp.tiling_parameters.tile_max_number != default_tile_max_number
454+
if default_tile_max_number == 1500:
455+
# check tile max number is being set by adaptive_tile_params
456+
assert hp.tiling_parameters.tile_max_number != default_tile_max_number
457+
else:
458+
# check tile max number is being manually set
459+
assert hp.tiling_parameters.tile_max_number == default_tile_max_number

0 commit comments

Comments
 (0)