From 131d2964b054cc149df2b1cfa5812802a8d6d774 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Fri, 11 Feb 2022 13:13:21 +0000 Subject: [PATCH 1/2] Fix resize when size == small_edge_size and max_size isn't None --- test/test_transforms.py | 13 +++++++++++++ torchvision/transforms/functional_pil.py | 9 +++++---- torchvision/transforms/functional_tensor.py | 6 +++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/test/test_transforms.py b/test/test_transforms.py index 160e4407d8b..d536c42f2b4 100644 --- a/test/test_transforms.py +++ b/test/test_transforms.py @@ -440,6 +440,19 @@ def test_resize_antialias_error(): t(img) +@pytest.mark.parametrize("height, width", ((32, 64), (64, 32))) +def test_resize_size_equals_max_size(height, width): + # Non-regression test for https://github.com/pytorch/vision/issues/5405 + # max_size used to be ignored if size == small_edge_size + max_size = 40 + img = Image.new("RGB", size=(width, height), color=127) + + small_edge = min(height, width) + t = transforms.Resize(small_edge, max_size=max_size) + result = t(img) + assert max(result.size) == max_size + + class TestPad: def test_pad(self): height = random.randint(10, 32) * 2 diff --git a/torchvision/transforms/functional_pil.py b/torchvision/transforms/functional_pil.py index fb70d1969dc..5de7da10146 100644 --- a/torchvision/transforms/functional_pil.py +++ b/torchvision/transforms/functional_pil.py @@ -240,9 +240,6 @@ def resize( w, h = img.size short, long = (w, h) if w <= h else (h, w) - if short == size: - return img - new_short, new_long = size, int(size * long / short) if max_size is not None: @@ -255,7 +252,11 @@ def resize( new_short, new_long = int(max_size * new_short / new_long), max_size new_w, new_h = (new_short, new_long) if w <= h else (new_long, new_short) - return img.resize((new_w, new_h), interpolation) + + if (w, h) == (new_w, new_h): + return img + else: + return img.resize((new_w, new_h), interpolation) else: if max_size is not None: raise ValueError( diff --git a/torchvision/transforms/functional_tensor.py b/torchvision/transforms/functional_tensor.py index 2ed403e95cb..471e34528ef 100644 --- a/torchvision/transforms/functional_tensor.py +++ b/torchvision/transforms/functional_tensor.py @@ -457,9 +457,6 @@ def resize( short, long = (w, h) if w <= h else (h, w) requested_new_short = size if isinstance(size, int) else size[0] - if short == requested_new_short: - return img - new_short, new_long = requested_new_short, int(requested_new_short * long / short) if max_size is not None: @@ -473,6 +470,9 @@ def resize( new_w, new_h = (new_short, new_long) if w <= h else (new_long, new_short) + if (w, h) == (new_w, new_h): + return img + else: # specified both h and w new_w, new_h = size[1], size[0] From e54dc5126bed52961827ca4cc74b2e633edade9d Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Fri, 11 Feb 2022 13:16:44 +0000 Subject: [PATCH 2/2] Better test name --- test/test_transforms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_transforms.py b/test/test_transforms.py index d536c42f2b4..4219f4d1645 100644 --- a/test/test_transforms.py +++ b/test/test_transforms.py @@ -441,7 +441,7 @@ def test_resize_antialias_error(): @pytest.mark.parametrize("height, width", ((32, 64), (64, 32))) -def test_resize_size_equals_max_size(height, width): +def test_resize_size_equals_small_edge_size(height, width): # Non-regression test for https://github.com/pytorch/vision/issues/5405 # max_size used to be ignored if size == small_edge_size max_size = 40