Skip to content

Commit 1e4111a

Browse files
authored
Merge branch 'main' into v2-vs-v1-fixes
2 parents 151a0d2 + 4cba51c commit 1e4111a

26 files changed

+560
-489
lines changed

docs/source/transforms.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,11 @@ Conversion
228228

229229
ToPILImage
230230
v2.ToPILImage
231-
v2.ToImagePIL
232231
ToTensor
233232
v2.ToTensor
234233
PILToTensor
235234
v2.PILToTensor
236-
v2.ToImageTensor
235+
v2.ToImage
237236
ConvertImageDtype
238237
v2.ConvertImageDtype
239238
v2.ToDtype

gallery/plot_transforms_v2_e2e.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def show(sample):
2727

2828
image, target = sample
2929
if isinstance(image, PIL.Image.Image):
30-
image = F.to_image_tensor(image)
30+
image = F.to_image(image)
3131
image = F.to_dtype(image, torch.uint8, scale=True)
3232
annotated_image = draw_bounding_boxes(image, target["boxes"], colors="yellow", width=3)
3333

@@ -101,7 +101,7 @@ def load_example_coco_detection_dataset(**kwargs):
101101
transforms.RandomZoomOut(fill={PIL.Image.Image: (123, 117, 104), "others": 0}),
102102
transforms.RandomIoUCrop(),
103103
transforms.RandomHorizontalFlip(),
104-
transforms.ToImageTensor(),
104+
transforms.ToImage(),
105105
transforms.ConvertImageDtype(torch.float32),
106106
transforms.SanitizeBoundingBoxes(),
107107
]

packaging/pre_build_script.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ if [[ "$(uname)" == Darwin ]]; then
1111
conda install -yq wget
1212
fi
1313

14-
if [[ "$(uname)" == Darwin || "$OSTYPE" == "msys" ]]; then
14+
if [[ "$(uname)" == Darwin || "$OSTYPE" == "msys" || "$ARCH" == "aarch64" ]]; then
1515
# Install libpng from Anaconda (defaults)
1616
conda install libpng -yq
1717
conda install -yq ffmpeg=4.2 libjpeg-turbo -c pytorch

references/detection/presets.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def __init__(
3333
transforms = []
3434
backend = backend.lower()
3535
if backend == "datapoint":
36-
transforms.append(T.ToImageTensor())
36+
transforms.append(T.ToImage())
3737
elif backend == "tensor":
3838
transforms.append(T.PILToTensor())
3939
elif backend != "pil":
@@ -71,7 +71,7 @@ def __init__(
7171

7272
if backend == "pil":
7373
# Note: we could just convert to pure tensors even in v2.
74-
transforms += [T.ToImageTensor() if use_v2 else T.PILToTensor()]
74+
transforms += [T.ToImage() if use_v2 else T.PILToTensor()]
7575

7676
transforms += [T.ConvertImageDtype(torch.float)]
7777

@@ -94,11 +94,11 @@ def __init__(self, backend="pil", use_v2=False):
9494
backend = backend.lower()
9595
if backend == "pil":
9696
# Note: we could just convert to pure tensors even in v2?
97-
transforms += [T.ToImageTensor() if use_v2 else T.PILToTensor()]
97+
transforms += [T.ToImage() if use_v2 else T.PILToTensor()]
9898
elif backend == "tensor":
9999
transforms += [T.PILToTensor()]
100100
elif backend == "datapoint":
101-
transforms += [T.ToImageTensor()]
101+
transforms += [T.ToImage()]
102102
else:
103103
raise ValueError(f"backend can be 'datapoint', 'tensor' or 'pil', but got {backend}")
104104

references/segmentation/presets.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def __init__(
3232
transforms = []
3333
backend = backend.lower()
3434
if backend == "datapoint":
35-
transforms.append(T.ToImageTensor())
35+
transforms.append(T.ToImage())
3636
elif backend == "tensor":
3737
transforms.append(T.PILToTensor())
3838
elif backend != "pil":
@@ -81,7 +81,7 @@ def __init__(
8181
if backend == "tensor":
8282
transforms += [T.PILToTensor()]
8383
elif backend == "datapoint":
84-
transforms += [T.ToImageTensor()]
84+
transforms += [T.ToImage()]
8585
elif backend != "pil":
8686
raise ValueError(f"backend can be 'datapoint', 'tensor' or 'pil', but got {backend}")
8787

@@ -92,7 +92,7 @@ def __init__(
9292

9393
if backend == "pil":
9494
# Note: we could just convert to pure tensors even in v2?
95-
transforms += [T.ToImageTensor() if use_v2 else T.PILToTensor()]
95+
transforms += [T.ToImage() if use_v2 else T.PILToTensor()]
9696

9797
transforms += [
9898
T.ConvertImageDtype(torch.float),

test/common_utils.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from torch.testing._comparison import BooleanPair, NonePair, not_close_error_metas, NumberPair, TensorLikePair
2828
from torchvision import datapoints, io
2929
from torchvision.transforms._functional_tensor import _max_value as get_max_value
30-
from torchvision.transforms.v2.functional import to_dtype_image_tensor, to_image_pil, to_image_tensor
30+
from torchvision.transforms.v2.functional import to_dtype_image, to_image, to_pil_image
3131

3232

3333
IN_OSS_CI = any(os.getenv(var) == "true" for var in ["CIRCLECI", "GITHUB_ACTIONS"])
@@ -293,7 +293,7 @@ def __init__(
293293
**other_parameters,
294294
):
295295
if all(isinstance(input, PIL.Image.Image) for input in [actual, expected]):
296-
actual, expected = [to_image_tensor(input) for input in [actual, expected]]
296+
actual, expected = [to_image(input) for input in [actual, expected]]
297297

298298
super().__init__(actual, expected, **other_parameters)
299299
self.mae = mae
@@ -536,7 +536,7 @@ def make_image_tensor(*args, **kwargs):
536536

537537

538538
def make_image_pil(*args, **kwargs):
539-
return to_image_pil(make_image(*args, **kwargs))
539+
return to_pil_image(make_image(*args, **kwargs))
540540

541541

542542
def make_image_loader(
@@ -609,12 +609,12 @@ def fn(shape, dtype, device, memory_format):
609609
)
610610
)
611611

612-
image_tensor = to_image_tensor(image_pil)
612+
image_tensor = to_image(image_pil)
613613
if memory_format == torch.contiguous_format:
614614
image_tensor = image_tensor.to(device=device, memory_format=memory_format, copy=True)
615615
else:
616616
image_tensor = image_tensor.to(device=device)
617-
image_tensor = to_dtype_image_tensor(image_tensor, dtype=dtype, scale=True)
617+
image_tensor = to_dtype_image(image_tensor, dtype=dtype, scale=True)
618618

619619
return datapoints.Image(image_tensor)
620620

test/test_prototype_transforms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from torchvision.datapoints import BoundingBoxes, BoundingBoxFormat, Image, Mask, Video
1919
from torchvision.prototype import datapoints, transforms
20-
from torchvision.transforms.v2.functional import clamp_bounding_boxes, InterpolationMode, pil_to_tensor, to_image_pil
20+
from torchvision.transforms.v2.functional import clamp_bounding_boxes, InterpolationMode, pil_to_tensor, to_pil_image
2121
from torchvision.transforms.v2.utils import check_type, is_simple_tensor
2222

2323
BATCH_EXTRA_DIMS = [extra_dims for extra_dims in DEFAULT_EXTRA_DIMS if extra_dims]
@@ -387,7 +387,7 @@ def make_datapoints():
387387
size = (600, 800)
388388
num_objects = 22
389389

390-
pil_image = to_image_pil(make_image(size=size, color_space="RGB"))
390+
pil_image = to_pil_image(make_image(size=size, color_space="RGB"))
391391
target = {
392392
"boxes": make_bounding_box(canvas_size=size, format="XYXY", batch_dims=(num_objects,), dtype=torch.float),
393393
"labels": make_label(extra_dims=(num_objects,), categories=80),

test/test_transforms_v2.py

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -666,50 +666,33 @@ def test_check_transformed_types(self, inpt_type, mocker):
666666
t(inpt)
667667

668668

669-
class TestToImageTensor:
669+
class TestToImage:
670670
@pytest.mark.parametrize(
671671
"inpt_type",
672672
[torch.Tensor, PIL.Image.Image, datapoints.Image, np.ndarray, datapoints.BoundingBoxes, str, int],
673673
)
674674
def test__transform(self, inpt_type, mocker):
675675
fn = mocker.patch(
676-
"torchvision.transforms.v2.functional.to_image_tensor",
676+
"torchvision.transforms.v2.functional.to_image",
677677
return_value=torch.rand(1, 3, 8, 8),
678678
)
679679

680680
inpt = mocker.MagicMock(spec=inpt_type)
681-
transform = transforms.ToImageTensor()
681+
transform = transforms.ToImage()
682682
transform(inpt)
683683
if inpt_type in (datapoints.BoundingBoxes, datapoints.Image, str, int):
684684
assert fn.call_count == 0
685685
else:
686686
fn.assert_called_once_with(inpt)
687687

688688

689-
class TestToImagePIL:
690-
@pytest.mark.parametrize(
691-
"inpt_type",
692-
[torch.Tensor, PIL.Image.Image, datapoints.Image, np.ndarray, datapoints.BoundingBoxes, str, int],
693-
)
694-
def test__transform(self, inpt_type, mocker):
695-
fn = mocker.patch("torchvision.transforms.v2.functional.to_image_pil")
696-
697-
inpt = mocker.MagicMock(spec=inpt_type)
698-
transform = transforms.ToImagePIL()
699-
transform(inpt)
700-
if inpt_type in (datapoints.BoundingBoxes, PIL.Image.Image, str, int):
701-
assert fn.call_count == 0
702-
else:
703-
fn.assert_called_once_with(inpt, mode=transform.mode)
704-
705-
706689
class TestToPILImage:
707690
@pytest.mark.parametrize(
708691
"inpt_type",
709692
[torch.Tensor, PIL.Image.Image, datapoints.Image, np.ndarray, datapoints.BoundingBoxes, str, int],
710693
)
711694
def test__transform(self, inpt_type, mocker):
712-
fn = mocker.patch("torchvision.transforms.v2.functional.to_image_pil")
695+
fn = mocker.patch("torchvision.transforms.v2.functional.to_pil_image")
713696

714697
inpt = mocker.MagicMock(spec=inpt_type)
715698
transform = transforms.ToPILImage()
@@ -1013,7 +996,7 @@ def test_antialias_warning():
1013996
@pytest.mark.parametrize("image_type", (PIL.Image, torch.Tensor, datapoints.Image))
1014997
@pytest.mark.parametrize("label_type", (torch.Tensor, int))
1015998
@pytest.mark.parametrize("dataset_return_type", (dict, tuple))
1016-
@pytest.mark.parametrize("to_tensor", (transforms.ToTensor, transforms.ToImageTensor))
999+
@pytest.mark.parametrize("to_tensor", (transforms.ToTensor, transforms.ToImage))
10171000
def test_classif_preset(image_type, label_type, dataset_return_type, to_tensor):
10181001

10191002
image = datapoints.Image(torch.randint(0, 256, size=(1, 3, 250, 250), dtype=torch.uint8))
@@ -1074,7 +1057,7 @@ def test_classif_preset(image_type, label_type, dataset_return_type, to_tensor):
10741057

10751058
@pytest.mark.parametrize("image_type", (PIL.Image, torch.Tensor, datapoints.Image))
10761059
@pytest.mark.parametrize("data_augmentation", ("hflip", "lsj", "multiscale", "ssd", "ssdlite"))
1077-
@pytest.mark.parametrize("to_tensor", (transforms.ToTensor, transforms.ToImageTensor))
1060+
@pytest.mark.parametrize("to_tensor", (transforms.ToTensor, transforms.ToImage))
10781061
@pytest.mark.parametrize("sanitize", (True, False))
10791062
def test_detection_preset(image_type, data_augmentation, to_tensor, sanitize):
10801063
torch.manual_seed(0)

test/test_transforms_v2_consistency.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from torchvision.transforms import functional as legacy_F
3131
from torchvision.transforms.v2 import functional as prototype_F
3232
from torchvision.transforms.v2._utils import _get_fill
33-
from torchvision.transforms.v2.functional import to_image_pil
33+
from torchvision.transforms.v2.functional import to_pil_image
3434
from torchvision.transforms.v2.utils import query_size
3535

3636
DEFAULT_MAKE_IMAGES_KWARGS = dict(color_spaces=["RGB"], extra_dims=[(4,)])
@@ -630,7 +630,7 @@ def check_call_consistency(
630630
)
631631

632632
if image.ndim == 3 and supports_pil:
633-
image_pil = to_image_pil(image)
633+
image_pil = to_pil_image(image)
634634

635635
try:
636636
torch.manual_seed(0)
@@ -869,7 +869,7 @@ def test_pil_to_tensor(self):
869869
legacy_transform = legacy_transforms.PILToTensor()
870870

871871
for image in make_images(extra_dims=[()]):
872-
image_pil = to_image_pil(image)
872+
image_pil = to_pil_image(image)
873873

874874
assert_equal(prototype_transform(image_pil), legacy_transform(image_pil))
875875

@@ -879,7 +879,7 @@ def test_to_tensor(self):
879879
legacy_transform = legacy_transforms.ToTensor()
880880

881881
for image in make_images(extra_dims=[()]):
882-
image_pil = to_image_pil(image)
882+
image_pil = to_pil_image(image)
883883
image_numpy = np.array(image_pil)
884884

885885
assert_equal(prototype_transform(image_pil), legacy_transform(image_pil))
@@ -1182,7 +1182,7 @@ def make_datapoints(self, with_mask=True):
11821182
def make_label(extra_dims, categories):
11831183
return torch.randint(categories, extra_dims, dtype=torch.int64)
11841184

1185-
pil_image = to_image_pil(make_image(size=size, color_space="RGB"))
1185+
pil_image = to_pil_image(make_image(size=size, color_space="RGB"))
11861186
target = {
11871187
"boxes": make_bounding_box(canvas_size=size, format="XYXY", batch_dims=(num_objects,), dtype=torch.float),
11881188
"labels": make_label(extra_dims=(num_objects,), categories=80),
@@ -1286,7 +1286,7 @@ def make_datapoints(self, supports_pil=True, image_dtype=torch.uint8):
12861286

12871287
conv_fns = []
12881288
if supports_pil:
1289-
conv_fns.append(to_image_pil)
1289+
conv_fns.append(to_pil_image)
12901290
conv_fns.extend([torch.Tensor, lambda x: x])
12911291

12921292
for conv_fn in conv_fns:
@@ -1295,8 +1295,8 @@ def make_datapoints(self, supports_pil=True, image_dtype=torch.uint8):
12951295

12961296
dp = (conv_fn(datapoint_image), datapoint_mask)
12971297
dp_ref = (
1298-
to_image_pil(datapoint_image) if supports_pil else datapoint_image.as_subclass(torch.Tensor),
1299-
to_image_pil(datapoint_mask),
1298+
to_pil_image(datapoint_image) if supports_pil else datapoint_image.as_subclass(torch.Tensor),
1299+
to_pil_image(datapoint_mask),
13001300
)
13011301

13021302
yield dp, dp_ref

0 commit comments

Comments
 (0)