Skip to content

Commit c1f7035

Browse files
authored
Merge branch 'main' into fix-weights-docs
2 parents 614ad5c + 7ba3d7e commit c1f7035

File tree

4 files changed

+120
-54
lines changed

4 files changed

+120
-54
lines changed

test/test_transforms_v2.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,9 @@ class TestSmoke:
116116
(transforms.RandAugment(), auto_augment_adapter),
117117
(transforms.TrivialAugmentWide(), auto_augment_adapter),
118118
(transforms.ColorJitter(brightness=0.1, contrast=0.2, saturation=0.3, hue=0.15), None),
119-
(transforms.Grayscale(), None),
120119
(transforms.RandomAdjustSharpness(sharpness_factor=0.5, p=1.0), None),
121120
(transforms.RandomAutocontrast(p=1.0), None),
122121
(transforms.RandomEqualize(p=1.0), None),
123-
(transforms.RandomGrayscale(p=1.0), None),
124122
(transforms.RandomInvert(p=1.0), None),
125123
(transforms.RandomChannelPermutation(), None),
126124
(transforms.RandomPhotometricDistort(p=1.0), None),
@@ -138,7 +136,6 @@ class TestSmoke:
138136
(transforms.RandomRotation(degrees=30), None),
139137
(transforms.RandomShortestSize(min_size=10, antialias=True), None),
140138
(transforms.RandomVerticalFlip(p=1.0), None),
141-
(transforms.RandomZoomOut(p=1.0), None),
142139
(transforms.Resize([16, 16], antialias=True), None),
143140
(transforms.ScaleJitter((16, 16), scale_range=(0.8, 1.2), antialias=True), None),
144141
(transforms.ClampBoundingBoxes(), None),
@@ -390,34 +387,6 @@ def was_applied(output, inpt):
390387
assert transform.was_applied(output, input)
391388

392389

393-
class TestRandomZoomOut:
394-
def test_assertions(self):
395-
with pytest.raises(TypeError, match="Got inappropriate fill arg"):
396-
transforms.RandomZoomOut(fill="abc")
397-
398-
with pytest.raises(TypeError, match="should be a sequence of length"):
399-
transforms.RandomZoomOut(0, side_range=0)
400-
401-
with pytest.raises(ValueError, match="Invalid canvas side range"):
402-
transforms.RandomZoomOut(0, side_range=[4.0, 1.0])
403-
404-
@pytest.mark.parametrize("fill", [0, [1, 2, 3], (2, 3, 4)])
405-
@pytest.mark.parametrize("side_range", [(1.0, 4.0), [2.0, 5.0]])
406-
def test__get_params(self, fill, side_range):
407-
transform = transforms.RandomZoomOut(fill=fill, side_range=side_range)
408-
409-
h, w = size = (24, 32)
410-
image = make_image(size)
411-
412-
params = transform._get_params([image])
413-
414-
assert len(params["padding"]) == 4
415-
assert 0 <= params["padding"][0] <= (side_range[1] - 1) * w
416-
assert 0 <= params["padding"][1] <= (side_range[1] - 1) * h
417-
assert 0 <= params["padding"][2] <= (side_range[1] - 1) * w
418-
assert 0 <= params["padding"][3] <= (side_range[1] - 1) * h
419-
420-
421390
class TestElasticTransform:
422391
def test_assertions(self):
423392

test/test_transforms_v2_consistency.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,6 @@ def __init__(
122122
(torch.float32, torch.float64),
123123
]
124124
],
125-
ConsistencyConfig(
126-
v2_transforms.Grayscale,
127-
legacy_transforms.Grayscale,
128-
[
129-
ArgsKwargs(num_output_channels=1),
130-
ArgsKwargs(num_output_channels=3),
131-
],
132-
make_images_kwargs=dict(DEFAULT_MAKE_IMAGES_KWARGS, color_spaces=["RGB", "GRAY"]),
133-
# Use default tolerances of `torch.testing.assert_close`
134-
closeness_kwargs=dict(rtol=None, atol=None),
135-
),
136125
ConsistencyConfig(
137126
v2_transforms.ToPILImage,
138127
legacy_transforms.ToPILImage,
@@ -217,17 +206,6 @@ def __init__(
217206
],
218207
closeness_kwargs={"atol": 1e-6, "rtol": 1e-6},
219208
),
220-
ConsistencyConfig(
221-
v2_transforms.RandomGrayscale,
222-
legacy_transforms.RandomGrayscale,
223-
[
224-
ArgsKwargs(p=0),
225-
ArgsKwargs(p=1),
226-
],
227-
make_images_kwargs=dict(DEFAULT_MAKE_IMAGES_KWARGS, color_spaces=["RGB", "GRAY"]),
228-
# Use default tolerances of `torch.testing.assert_close`
229-
closeness_kwargs=dict(rtol=None, atol=None),
230-
),
231209
ConsistencyConfig(
232210
v2_transforms.PILToTensor,
233211
legacy_transforms.PILToTensor,

test/test_transforms_v2_refactored.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3945,3 +3945,122 @@ def test_transform_correctness(self, brightness, contrast, saturation, hue):
39453945

39463946
mae = (actual.float() - expected.float()).abs().mean()
39473947
assert mae < 2
3948+
3949+
3950+
class TestRgbToGrayscale:
3951+
@pytest.mark.parametrize("dtype", [torch.uint8, torch.float32])
3952+
@pytest.mark.parametrize("device", cpu_and_cuda())
3953+
def test_kernel_image(self, dtype, device):
3954+
check_kernel(F.rgb_to_grayscale_image, make_image(dtype=dtype, device=device))
3955+
3956+
@pytest.mark.parametrize("make_input", [make_image_tensor, make_image_pil, make_image])
3957+
def test_functional(self, make_input):
3958+
check_functional(F.rgb_to_grayscale, make_input())
3959+
3960+
@pytest.mark.parametrize(
3961+
("kernel", "input_type"),
3962+
[
3963+
(F.rgb_to_grayscale_image, torch.Tensor),
3964+
(F._rgb_to_grayscale_image_pil, PIL.Image.Image),
3965+
(F.rgb_to_grayscale_image, tv_tensors.Image),
3966+
],
3967+
)
3968+
def test_functional_signature(self, kernel, input_type):
3969+
check_functional_kernel_signature_match(F.rgb_to_grayscale, kernel=kernel, input_type=input_type)
3970+
3971+
@pytest.mark.parametrize("transform", [transforms.Grayscale(), transforms.RandomGrayscale(p=1)])
3972+
@pytest.mark.parametrize("make_input", [make_image_tensor, make_image_pil, make_image])
3973+
def test_transform(self, transform, make_input):
3974+
check_transform(transform, make_input())
3975+
3976+
@pytest.mark.parametrize("num_output_channels", [1, 3])
3977+
@pytest.mark.parametrize("fn", [F.rgb_to_grayscale, transform_cls_to_functional(transforms.Grayscale)])
3978+
def test_image_correctness(self, num_output_channels, fn):
3979+
image = make_image(dtype=torch.uint8, device="cpu")
3980+
3981+
actual = fn(image, num_output_channels=num_output_channels)
3982+
expected = F.to_image(F.rgb_to_grayscale(F.to_pil_image(image), num_output_channels=num_output_channels))
3983+
3984+
assert_equal(actual, expected, rtol=0, atol=1)
3985+
3986+
@pytest.mark.parametrize("num_input_channels", [1, 3])
3987+
def test_random_transform_correctness(self, num_input_channels):
3988+
image = make_image(
3989+
color_space={
3990+
1: "GRAY",
3991+
3: "RGB",
3992+
}[num_input_channels],
3993+
dtype=torch.uint8,
3994+
device="cpu",
3995+
)
3996+
3997+
transform = transforms.RandomGrayscale(p=1)
3998+
3999+
actual = transform(image)
4000+
expected = F.to_image(F.rgb_to_grayscale(F.to_pil_image(image), num_output_channels=num_input_channels))
4001+
4002+
assert_equal(actual, expected, rtol=0, atol=1)
4003+
4004+
4005+
class TestRandomZoomOut:
4006+
# Tests are light because this largely relies on the already tested `pad` kernels.
4007+
4008+
@pytest.mark.parametrize(
4009+
"make_input",
4010+
[
4011+
make_image_tensor,
4012+
make_image_pil,
4013+
make_image,
4014+
make_bounding_boxes,
4015+
make_segmentation_mask,
4016+
make_detection_mask,
4017+
make_video,
4018+
],
4019+
)
4020+
def test_transform(self, make_input):
4021+
check_transform(transforms.RandomZoomOut(p=1), make_input())
4022+
4023+
def test_transform_error(self):
4024+
for side_range in [None, 1, [1, 2, 3]]:
4025+
with pytest.raises(
4026+
ValueError if isinstance(side_range, list) else TypeError, match="should be a sequence of length 2"
4027+
):
4028+
transforms.RandomZoomOut(side_range=side_range)
4029+
4030+
for side_range in [[0.5, 1.5], [2.0, 1.0]]:
4031+
with pytest.raises(ValueError, match="Invalid side range"):
4032+
transforms.RandomZoomOut(side_range=side_range)
4033+
4034+
@pytest.mark.parametrize("side_range", [(1.0, 4.0), [2.0, 5.0]])
4035+
@pytest.mark.parametrize(
4036+
"make_input",
4037+
[
4038+
make_image_tensor,
4039+
make_image_pil,
4040+
make_image,
4041+
make_bounding_boxes,
4042+
make_segmentation_mask,
4043+
make_detection_mask,
4044+
make_video,
4045+
],
4046+
)
4047+
@pytest.mark.parametrize("device", cpu_and_cuda())
4048+
def test_transform_params_correctness(self, side_range, make_input, device):
4049+
if make_input is make_image_pil and device != "cpu":
4050+
pytest.skip("PIL image tests with parametrization device!='cpu' will degenerate to that anyway.")
4051+
4052+
transform = transforms.RandomZoomOut(side_range=side_range)
4053+
4054+
input = make_input()
4055+
height, width = F.get_size(input)
4056+
4057+
params = transform._get_params([input])
4058+
assert "padding" in params
4059+
4060+
padding = params["padding"]
4061+
assert len(padding) == 4
4062+
4063+
assert 0 <= padding[0] <= (side_range[1] - 1) * width
4064+
assert 0 <= padding[1] <= (side_range[1] - 1) * height
4065+
assert 0 <= padding[2] <= (side_range[1] - 1) * width
4066+
assert 0 <= padding[3] <= (side_range[1] - 1) * height

torchvision/transforms/v2/_geometry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ def __init__(
546546

547547
self.side_range = side_range
548548
if side_range[0] < 1.0 or side_range[0] > side_range[1]:
549-
raise ValueError(f"Invalid canvas side range provided {side_range}.")
549+
raise ValueError(f"Invalid side range provided {side_range}.")
550550

551551
def _get_params(self, flat_inputs: List[Any]) -> Dict[str, Any]:
552552
orig_h, orig_w = query_size(flat_inputs)

0 commit comments

Comments
 (0)