From 0eeee3e485b3b4fbb0a82ad076b6855d7422d0bd Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Fri, 12 Apr 2024 18:47:33 +0200 Subject: [PATCH 1/6] Replace kornia gaussian filter which fails when exporting to ONNX Signed-off-by: Adrian Boguszewski --- .../models/image/reverse_distillation/anomaly_map.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/anomalib/models/image/reverse_distillation/anomaly_map.py b/src/anomalib/models/image/reverse_distillation/anomaly_map.py index 4d4edffdf3..d7f8637d4d 100644 --- a/src/anomalib/models/image/reverse_distillation/anomaly_map.py +++ b/src/anomalib/models/image/reverse_distillation/anomaly_map.py @@ -13,11 +13,12 @@ from enum import Enum import torch -from kornia.filters import gaussian_blur2d from omegaconf import ListConfig from torch import nn from torch.nn import functional as F # noqa: N812 +from anomalib.models.components import GaussianBlur2d + class AnomalyMapGenerationMode(str, Enum): """Type of mode when generating anomaly imape.""" @@ -87,8 +88,7 @@ def forward(self, student_features: list[torch.Tensor], teacher_features: list[t elif self.mode == AnomalyMapGenerationMode.ADD: anomaly_map += distance_map - return gaussian_blur2d( - anomaly_map, + return GaussianBlur2d( kernel_size=(self.kernel_size, self.kernel_size), sigma=(self.sigma, self.sigma), - ) + )(anomaly_map) From 7dcbc8a6c59d5fed25be4b425527f2d4a7baed31 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 17 Apr 2024 17:20:45 +0200 Subject: [PATCH 2/6] Moved map to CPU Signed-off-by: Adrian Boguszewski --- src/anomalib/models/image/reverse_distillation/anomaly_map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/anomalib/models/image/reverse_distillation/anomaly_map.py b/src/anomalib/models/image/reverse_distillation/anomaly_map.py index d7f8637d4d..c0b31515aa 100644 --- a/src/anomalib/models/image/reverse_distillation/anomaly_map.py +++ b/src/anomalib/models/image/reverse_distillation/anomaly_map.py @@ -91,4 +91,4 @@ def forward(self, student_features: list[torch.Tensor], teacher_features: list[t return GaussianBlur2d( kernel_size=(self.kernel_size, self.kernel_size), sigma=(self.sigma, self.sigma), - )(anomaly_map) + )(anomaly_map.to("cpu")) From 678b62ccc84851ed52d9d76c7347ea4a4e30d43f Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 17 Apr 2024 16:39:51 +0200 Subject: [PATCH 3/6] Unskip reverse distillation in tests Signed-off-by: Adrian Boguszewski --- tests/integration/model/test_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/model/test_models.py b/tests/integration/model/test_models.py index 8cf2a5a9e1..f785cffbfd 100644 --- a/tests/integration/model/test_models.py +++ b/tests/integration/model/test_models.py @@ -143,10 +143,10 @@ def test_export( dataset_path (Path): Root to dataset from fixture. project_path (Path): Path to temporary project folder from fixture. """ - if model_name in ("reverse_distillation", "rkde"): + if model_name == "rkde": # TODO(ashwinvaidya17): Restore this test after fixing the issue # https://github.com/openvinotoolkit/anomalib/issues/1513 - pytest.skip(f"{model_name} fails to convert to ONNX and OpenVINO") + pytest.skip(f"{model_name} fails to convert to OpenVINO") model, dataset, engine = self._get_objects( model_name=model_name, From 968ff7814cb41b05aa8bbc53aa02b417e13549c0 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Tue, 7 May 2024 17:57:49 +0200 Subject: [PATCH 4/6] Fixed device Signed-off-by: Adrian Boguszewski --- src/anomalib/models/image/reverse_distillation/anomaly_map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/anomalib/models/image/reverse_distillation/anomaly_map.py b/src/anomalib/models/image/reverse_distillation/anomaly_map.py index c0b31515aa..79fc1024dc 100644 --- a/src/anomalib/models/image/reverse_distillation/anomaly_map.py +++ b/src/anomalib/models/image/reverse_distillation/anomaly_map.py @@ -91,4 +91,4 @@ def forward(self, student_features: list[torch.Tensor], teacher_features: list[t return GaussianBlur2d( kernel_size=(self.kernel_size, self.kernel_size), sigma=(self.sigma, self.sigma), - )(anomaly_map.to("cpu")) + )(anomaly_map.to(student_features[0].device)) From 50a2ddb1b981a7c6abfc73ab5ca22a247378dcfd Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Tue, 7 May 2024 18:05:19 +0200 Subject: [PATCH 5/6] Fix for static shape models Signed-off-by: Adrian Boguszewski --- src/anomalib/deploy/inferencers/openvino_inferencer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/anomalib/deploy/inferencers/openvino_inferencer.py b/src/anomalib/deploy/inferencers/openvino_inferencer.py index 3e8f18540e..3206b39e30 100644 --- a/src/anomalib/deploy/inferencers/openvino_inferencer.py +++ b/src/anomalib/deploy/inferencers/openvino_inferencer.py @@ -201,7 +201,7 @@ def predict( # Resize image to model input size if not dynamic if self.input_blob.partial_shape[2].is_static and self.input_blob.partial_shape[3].is_static: - image = cv2.resize(image, tuple(self.input_blob.shape[2:][::-1])) + image = cv2.resize(image, tuple(list(self.input_blob.shape)[2:][::-1])) # Normalize numpy array to range [0, 1] if image.dtype != np.float32: From 102e519057b81e3c21f996050d4c033f793b1bf3 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 8 May 2024 11:04:42 +0200 Subject: [PATCH 6/6] Fixed device mismatch Signed-off-by: Adrian Boguszewski --- .../models/image/reverse_distillation/anomaly_map.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/anomalib/models/image/reverse_distillation/anomaly_map.py b/src/anomalib/models/image/reverse_distillation/anomaly_map.py index 79fc1024dc..94e591cdfe 100644 --- a/src/anomalib/models/image/reverse_distillation/anomaly_map.py +++ b/src/anomalib/models/image/reverse_distillation/anomaly_map.py @@ -88,7 +88,9 @@ def forward(self, student_features: list[torch.Tensor], teacher_features: list[t elif self.mode == AnomalyMapGenerationMode.ADD: anomaly_map += distance_map - return GaussianBlur2d( + gaussian_blur = GaussianBlur2d( kernel_size=(self.kernel_size, self.kernel_size), sigma=(self.sigma, self.sigma), - )(anomaly_map.to(student_features[0].device)) + ).to(student_features[0].device) + + return gaussian_blur(anomaly_map)