From 9e5dc92db3ae2759641b5e3827542d04565ae3c0 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 7 Mar 2024 06:17:34 +0900 Subject: [PATCH 1/9] Update data pipeline for Swin-MRCNN is tiling --- .../maskrcnn_swin_t/tile_pipeline.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py b/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py index 6ccc6d22401..510a66dda6d 100644 --- a/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py +++ b/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py @@ -5,3 +5,46 @@ _base_ = ["../../base/data/tiling/base_iseg_tile_pipeline.py"] + +img_size = (512, 512) +img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) + + +train_pipeline = [ + dict(type="Resize", img_scale=img_size, keep_ratio=False), + dict(type="RandomFlip", flip_ratio=0.5), + dict(type="Normalize", **img_norm_cfg), + dict(type="Pad", size=img_size), + dict(type="DefaultFormatBundle"), + dict( + type="Collect", + keys=["img", "gt_bboxes", "gt_labels", "gt_masks"], + meta_keys=[ + "filename", + "ori_filename", + "ori_shape", + "img_shape", + "pad_shape", + "scale_factor", + "flip", + "flip_direction", + "img_norm_cfg", + ], + ), +] + +test_pipeline = [ + dict( + type="MultiScaleFlipAug", + img_scale=img_size, + flip=False, + transforms=[ + dict(type="Resize", keep_ratio=False), + dict(type="RandomFlip"), + dict(type="Normalize", **img_norm_cfg), + dict(type="Pad", size=img_size), + dict(type="ImageToTensor", keys=["img"]), + dict(type="Collect", keys=["img"]), + ], + ) +] From 96b5104bdb69dbf71e5859a50b500b99e2847379 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 7 Mar 2024 06:35:41 +0900 Subject: [PATCH 2/9] =?UTF-8?q?=C3=8Fncrease=20threshold=20for=20anomaly?= =?UTF-8?q?=20cls=20inference?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/e2e/cli/anomaly/test_anomaly_classification.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/cli/anomaly/test_anomaly_classification.py b/tests/e2e/cli/anomaly/test_anomaly_classification.py index f944a256e55..cc070e42538 100644 --- a/tests/e2e/cli/anomaly/test_anomaly_classification.py +++ b/tests/e2e/cli/anomaly/test_anomaly_classification.py @@ -73,7 +73,7 @@ def test_otx_eval(self, template, tmp_dir_path): @e2e_pytest_component @pytest.mark.parametrize("template", templates, ids=templates_ids) def test_otx_eval_openvino(self, template, tmp_dir_path): - otx_eval_openvino_testing(template, tmp_dir_path, otx_dir, args, threshold=0.2) + otx_eval_openvino_testing(template, tmp_dir_path, otx_dir, args, threshold=0.3) @e2e_pytest_component @pytest.mark.parametrize("template", templates, ids=templates_ids) From d0df5d23011b33355de6f36776e1a6dc572bc174 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 7 Mar 2024 09:01:58 +0900 Subject: [PATCH 3/9] Fix is inferencer logic --- .../algorithms/detection/adapters/openvino/task.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/otx/algorithms/detection/adapters/openvino/task.py b/src/otx/algorithms/detection/adapters/openvino/task.py index 0d9e9b380bb..21ea2fca7ba 100644 --- a/src/otx/algorithms/detection/adapters/openvino/task.py +++ b/src/otx/algorithms/detection/adapters/openvino/task.py @@ -446,14 +446,17 @@ def load_inferencer( ): args.append({"resize_type": "fit_to_window_letterbox", "pad_value": 114}) inferencer: BaseInferencerWithConverter = OpenVINODetectionInferencer(*args) - if self.task_type == TaskType.INSTANCE_SEGMENTATION: - if self.config.tiling_parameters.enable_tiling: + if self.task_type == TaskType.INSTANCE_SEGMENTATION or self.task_type == TaskType.ROTATED_DETECTION: + if not self.config.tiling_parameters.enable_tiling: args.append({"resize_type": "standard"}) else: args.append({"resize_type": "fit_to_window_letterbox", "pad_value": 0}) - inferencer = OpenVINOMaskInferencer(*args) - if self.task_type == TaskType.ROTATED_DETECTION: - inferencer = OpenVINORotatedRectInferencer(*args) + + if self.task_type == TaskType.INSTANCE_SEGMENTATION: + inferencer = OpenVINOMaskInferencer(*args) + else: + inferencer = OpenVINORotatedRectInferencer(*args) + if self.config.tiling_parameters.enable_tiling: logger.info("Tiling is enabled. Wrap inferencer with tile inference.") tile_classifier_model_file, tile_classifier_weight_file = None, None From 8b1641c40666c824575d456a5fc50cb8f4d72529 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 7 Mar 2024 10:02:48 +0900 Subject: [PATCH 4/9] Revert swin tiling config change --- .../maskrcnn_swin_t/tile_pipeline.py | 45 +------------------ 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py b/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py index 510a66dda6d..05dc7e59f2c 100644 --- a/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py +++ b/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/tile_pipeline.py @@ -1,50 +1,7 @@ -"""Tiling Pipeline of ConvNeXt model for Instance-Seg Task.""" +"""Tiling Pipeline of SwinT model for Instance-Seg Task.""" # Copyright (C) 2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 _base_ = ["../../base/data/tiling/base_iseg_tile_pipeline.py"] - -img_size = (512, 512) -img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) - - -train_pipeline = [ - dict(type="Resize", img_scale=img_size, keep_ratio=False), - dict(type="RandomFlip", flip_ratio=0.5), - dict(type="Normalize", **img_norm_cfg), - dict(type="Pad", size=img_size), - dict(type="DefaultFormatBundle"), - dict( - type="Collect", - keys=["img", "gt_bboxes", "gt_labels", "gt_masks"], - meta_keys=[ - "filename", - "ori_filename", - "ori_shape", - "img_shape", - "pad_shape", - "scale_factor", - "flip", - "flip_direction", - "img_norm_cfg", - ], - ), -] - -test_pipeline = [ - dict( - type="MultiScaleFlipAug", - img_scale=img_size, - flip=False, - transforms=[ - dict(type="Resize", keep_ratio=False), - dict(type="RandomFlip"), - dict(type="Normalize", **img_norm_cfg), - dict(type="Pad", size=img_size), - dict(type="ImageToTensor", keys=["img"]), - dict(type="Collect", keys=["img"]), - ], - ) -] From d479447bc6bbe025680aa362f29d51497b594f8b Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 7 Mar 2024 11:29:47 +0900 Subject: [PATCH 5/9] Relax test criterion for SwinT tiling --- .../e2e/cli/instance_segmentation/test_tiling_instseg.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py b/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py index 30e7aec80a2..e4915ac6978 100644 --- a/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py +++ b/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py @@ -129,7 +129,13 @@ def test_otx_eval_openvino(self, template, tmp_dir_path, half_precision): tmp_dir_path = tmp_dir_path / "tiling_ins_seg" if "ResNet50" in template.name: pytest.skip(reason="Issue#2290: MaskRCNN shows degraded performance when inferencing in OpenVINO") - otx_eval_openvino_testing(template, tmp_dir_path, otx_dir, args, threshold=0.2, half_precision=half_precision) + accuracy_threshold = 0.2 + if "Custom_Counting_Instance_Segmentation_MaskRCNN_EfficientNetB2B" in template.model_template_id: + accuracy_threshold = 0.8 + + otx_eval_openvino_testing( + template, tmp_dir_path, otx_dir, args, threshold=accuracy_threshold, half_precision=half_precision + ) @e2e_pytest_component @pytest.mark.skipif(TT_STABILITY_TESTS, reason="This is TT_STABILITY_TESTS") From 176b16da9e0e540eac8113b8cbce18e3e3121e62 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Fri, 8 Mar 2024 05:27:06 +0900 Subject: [PATCH 6/9] Upnify data pipllines for MRCNN --- .../instance_segmentation/convnext_maskrcnn/data_pipeline.py | 4 ++-- .../instance_segmentation/maskrcnn_swin_t/data_pipeline.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/otx/algorithms/detection/configs/instance_segmentation/convnext_maskrcnn/data_pipeline.py b/src/otx/algorithms/detection/configs/instance_segmentation/convnext_maskrcnn/data_pipeline.py index c9925060a53..8f29acbae89 100644 --- a/src/otx/algorithms/detection/configs/instance_segmentation/convnext_maskrcnn/data_pipeline.py +++ b/src/otx/algorithms/detection/configs/instance_segmentation/convnext_maskrcnn/data_pipeline.py @@ -19,7 +19,7 @@ with_mask=True, poly2mask=False, ), - dict(type="Resize", img_scale=__img_size, keep_ratio=True), + dict(type="Resize", img_scale=__img_size, keep_ratio=False), dict(type="RandomFlip", flip_ratio=0.5), dict(type="Normalize", **__img_norm_cfg), dict(type="Pad", size_divisor=32), @@ -50,7 +50,7 @@ img_scale=__img_size, flip=False, transforms=[ - dict(type="Resize", keep_ratio=True), + dict(type="Resize", keep_ratio=False), dict(type="RandomFlip"), dict(type="Normalize", **__img_norm_cfg), dict(type="Pad", size_divisor=32), diff --git a/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/data_pipeline.py b/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/data_pipeline.py index 2fa4fd26792..3083f519db8 100644 --- a/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/data_pipeline.py +++ b/src/otx/algorithms/detection/configs/instance_segmentation/maskrcnn_swin_t/data_pipeline.py @@ -36,7 +36,7 @@ resize_cfg=dict( type="Resize", img_scale=__img_size, - keep_ratio=True, + keep_ratio=False, ), enable_memcache=True, # Cache after resizing image & annotations ), @@ -54,7 +54,7 @@ val_pipeline = [ dict( type="LoadResizeDataFromOTXDataset", - resize_cfg=dict(type="Resize", img_scale=__img_size, keep_ratio=True), + resize_cfg=dict(type="Resize", img_scale=__img_size, keep_ratio=False), enable_memcache=True, # Cache after resizing image ), dict( From e20b31a3a7cc6e10398829a304e163be7d9749a5 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Fri, 8 Mar 2024 07:25:32 +0900 Subject: [PATCH 7/9] Update tiling test --- tests/e2e/cli/instance_segmentation/test_tiling_instseg.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py b/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py index e4915ac6978..4e7d18790d2 100644 --- a/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py +++ b/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py @@ -129,12 +129,8 @@ def test_otx_eval_openvino(self, template, tmp_dir_path, half_precision): tmp_dir_path = tmp_dir_path / "tiling_ins_seg" if "ResNet50" in template.name: pytest.skip(reason="Issue#2290: MaskRCNN shows degraded performance when inferencing in OpenVINO") - accuracy_threshold = 0.2 - if "Custom_Counting_Instance_Segmentation_MaskRCNN_EfficientNetB2B" in template.model_template_id: - accuracy_threshold = 0.8 - otx_eval_openvino_testing( - template, tmp_dir_path, otx_dir, args, threshold=accuracy_threshold, half_precision=half_precision + template, tmp_dir_path, otx_dir, args, threshold=0.6, half_precision=half_precision ) @e2e_pytest_component From fb0e9db4e79a9ce4c26f1ad5fa5058e232922d53 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Fri, 8 Mar 2024 09:22:46 +0900 Subject: [PATCH 8/9] Fix black --- tests/e2e/cli/instance_segmentation/test_tiling_instseg.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py b/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py index 4e7d18790d2..d10c95fb399 100644 --- a/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py +++ b/tests/e2e/cli/instance_segmentation/test_tiling_instseg.py @@ -129,9 +129,7 @@ def test_otx_eval_openvino(self, template, tmp_dir_path, half_precision): tmp_dir_path = tmp_dir_path / "tiling_ins_seg" if "ResNet50" in template.name: pytest.skip(reason="Issue#2290: MaskRCNN shows degraded performance when inferencing in OpenVINO") - otx_eval_openvino_testing( - template, tmp_dir_path, otx_dir, args, threshold=0.6, half_precision=half_precision - ) + otx_eval_openvino_testing(template, tmp_dir_path, otx_dir, args, threshold=0.6, half_precision=half_precision) @e2e_pytest_component @pytest.mark.skipif(TT_STABILITY_TESTS, reason="This is TT_STABILITY_TESTS") From be8f3b91ec9b53b0b015d92f501b66ea596dd7dc Mon Sep 17 00:00:00 2001 From: "Shin, Eunwoo" Date: Fri, 8 Mar 2024 11:00:21 +0900 Subject: [PATCH 9/9] revert efficientnet_iseg_tile_pipeline --- .../base/data/tiling/efficientnet_iseg_tile_pipeline.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/otx/algorithms/detection/configs/base/data/tiling/efficientnet_iseg_tile_pipeline.py b/src/otx/algorithms/detection/configs/base/data/tiling/efficientnet_iseg_tile_pipeline.py index 0186f39bdd8..c9fd97366b6 100644 --- a/src/otx/algorithms/detection/configs/base/data/tiling/efficientnet_iseg_tile_pipeline.py +++ b/src/otx/algorithms/detection/configs/base/data/tiling/efficientnet_iseg_tile_pipeline.py @@ -14,7 +14,7 @@ img_norm_cfg = dict(mean=(103.53, 116.28, 123.675), std=(1.0, 1.0, 1.0), to_rgb=True) train_pipeline = [ - dict(type="Resize", img_scale=img_size, keep_ratio=False), + dict(type="Resize", img_scale=img_size, keep_ratio=True), dict(type="RandomFlip", flip_ratio=0.5), dict(type="Normalize", **img_norm_cfg), dict(type="Pad", size_divisor=32), @@ -42,7 +42,7 @@ img_scale=img_size, flip=False, transforms=[ - dict(type="Resize", keep_ratio=False), + dict(type="Resize", keep_ratio=True), dict(type="RandomFlip"), dict(type="Normalize", **img_norm_cfg), dict(type="Pad", size_divisor=32),