From e650b211b36ea51289ce3f37cf2536eee0f01d0c Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Mon, 10 Oct 2022 09:33:44 +0100 Subject: [PATCH 1/5] Remove performance workaround for mask resize --- .../transforms/functional/_geometry.py | 34 ++++--------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/torchvision/prototype/transforms/functional/_geometry.py b/torchvision/prototype/transforms/functional/_geometry.py index 670b2cb87b8..82ef428b7e0 100644 --- a/torchvision/prototype/transforms/functional/_geometry.py +++ b/torchvision/prototype/transforms/functional/_geometry.py @@ -128,34 +128,12 @@ def resize_image_tensor( extra_dims = image.shape[:-3] if image.numel() > 0: - image = image.view(-1, num_channels, old_height, old_width) - - # This is a perf hack to avoid slow channels_last upsample code path - # Related issue: https://github.com/pytorch/pytorch/issues/83840 - # We are transforming (N, 1, H, W) into (N, 2, H, W) to force to take channels_first path - if image.shape[1] == 1 and interpolation == InterpolationMode.NEAREST: - # Below code is copied from _FT.resize - # This is due to the fact that we need to apply the hack on casted image and not before - # Otherwise, image will be copied while cast to float and interpolate will work on twice more data - image, need_cast, need_squeeze, out_dtype = _cast_squeeze_in(image, [torch.float32, torch.float64]) - - shape = (image.shape[0], 2, image.shape[2], image.shape[3]) - image = image.expand(shape) - - image = interpolate( - image, size=[new_height, new_width], mode=interpolation.value, align_corners=None, antialias=False - ) - - image = image[:, 0, ...] - image = _cast_squeeze_out(image, need_cast=need_cast, need_squeeze=need_squeeze, out_dtype=out_dtype) - - else: - image = _FT.resize( - image, - size=[new_height, new_width], - interpolation=interpolation.value, - antialias=antialias, - ) + image = _FT.resize( + image, + size=[new_height, new_width], + interpolation=interpolation.value, + antialias=antialias, + ) return image.view(extra_dims + (num_channels, new_height, new_width)) From 70d03c2c5e5a30504f499ebe3f0a352309273e84 Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Mon, 10 Oct 2022 09:43:39 +0100 Subject: [PATCH 2/5] Fix linter --- torchvision/prototype/transforms/functional/_geometry.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/torchvision/prototype/transforms/functional/_geometry.py b/torchvision/prototype/transforms/functional/_geometry.py index 82ef428b7e0..6fa0af7bcf2 100644 --- a/torchvision/prototype/transforms/functional/_geometry.py +++ b/torchvision/prototype/transforms/functional/_geometry.py @@ -14,12 +14,7 @@ pil_to_tensor, to_pil_image, ) -from torchvision.transforms.functional_tensor import ( - _cast_squeeze_in, - _cast_squeeze_out, - _parse_pad_padding, - interpolate, -) +from torchvision.transforms.functional_tensor import _parse_pad_padding from ._meta import ( convert_format_bounding_box, From b4fc0f4eb918daa17811ce4010fd13edecd52e5d Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Mon, 10 Oct 2022 10:11:53 +0100 Subject: [PATCH 3/5] bug fixes --- test/prototype_transforms_kernel_infos.py | 10 ---------- .../prototype/transforms/functional/_geometry.py | 2 ++ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/test/prototype_transforms_kernel_infos.py b/test/prototype_transforms_kernel_infos.py index d90d3bf68be..423d5c6aec7 100644 --- a/test/prototype_transforms_kernel_infos.py +++ b/test/prototype_transforms_kernel_infos.py @@ -249,16 +249,6 @@ def sample_inputs_resize_image_tensor(): ): yield ArgsKwargs(image_loader, size=[min(image_loader.image_size) + 1], interpolation=interpolation) - # We have a speed hack in place for nearest interpolation and single channel images (grayscale) - for image_loader in make_image_loaders( - sizes=["random"], - color_spaces=[features.ColorSpace.GRAY], - extra_dims=VALID_EXTRA_DIMS, - ): - yield ArgsKwargs( - image_loader, size=[min(image_loader.image_size) + 1], interpolation=F.InterpolationMode.NEAREST - ) - yield ArgsKwargs(make_image_loader(size=(11, 17)), size=20, max_size=25) diff --git a/torchvision/prototype/transforms/functional/_geometry.py b/torchvision/prototype/transforms/functional/_geometry.py index 6fa0af7bcf2..867f073602f 100644 --- a/torchvision/prototype/transforms/functional/_geometry.py +++ b/torchvision/prototype/transforms/functional/_geometry.py @@ -123,6 +123,8 @@ def resize_image_tensor( extra_dims = image.shape[:-3] if image.numel() > 0: + image = image.view(-1, num_channels, old_height, old_width) + image = _FT.resize( image, size=[new_height, new_width], From f8f1b5e4ec590b7e7d48d11a3328511857040882 Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Mon, 10 Oct 2022 12:02:35 +0100 Subject: [PATCH 4/5] remove unnecessary import --- test/prototype_transforms_kernel_infos.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/prototype_transforms_kernel_infos.py b/test/prototype_transforms_kernel_infos.py index 423d5c6aec7..de7dc56db7c 100644 --- a/test/prototype_transforms_kernel_infos.py +++ b/test/prototype_transforms_kernel_infos.py @@ -21,7 +21,6 @@ make_image_loaders, make_mask_loaders, make_video_loaders, - VALID_EXTRA_DIMS, ) from torchvision.prototype import features from torchvision.transforms.functional_tensor import _max_value as get_max_value From e8216b041dc65e36fcb44eb5f420847f1a43fc5c Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Mon, 10 Oct 2022 12:14:11 +0100 Subject: [PATCH 5/5] Fixing linter --- test/prototype_transforms_kernel_infos.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/prototype_transforms_kernel_infos.py b/test/prototype_transforms_kernel_infos.py index 92886528637..c8cca77e0db 100644 --- a/test/prototype_transforms_kernel_infos.py +++ b/test/prototype_transforms_kernel_infos.py @@ -19,7 +19,6 @@ make_video_loaders, mark_framework_limitation, TestMark, - VALID_EXTRA_DIMS, ) from torchvision.prototype import features from torchvision.transforms.functional_tensor import _max_value as get_max_value