Skip to content

Commit 540551a

Browse files
committed
update crop to new main standards
1 parent e287fc1 commit 540551a

File tree

6 files changed

+60
-72
lines changed

6 files changed

+60
-72
lines changed

test/common_utils.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -276,17 +276,6 @@ def combinations_grid(**kwargs):
276276
return [dict(zip(kwargs.keys(), values)) for values in itertools.product(*kwargs.values())]
277277

278278

279-
def cvcuda_to_pil_compatible_tensor(tensor: "cvcuda.Tensor") -> torch.Tensor:
280-
tensor = cvcuda_to_tensor(tensor)
281-
if tensor.ndim != 4:
282-
raise ValueError(f"CV-CUDA Tensor should be 4 dimensional. Got {tensor.ndim} dimensions.")
283-
if tensor.shape[0] != 1:
284-
raise ValueError(
285-
f"CV-CUDA Tensor should have batch dimension 1 for comparison with PIL.Image.Image. Got {tensor.shape[0]}."
286-
)
287-
return tensor.squeeze(0).cpu()
288-
289-
290279
class ImagePair(TensorLikePair):
291280
def __init__(
292281
self,

test/test_transforms_v2.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
assert_equal,
2626
cache,
2727
cpu_and_cuda,
28-
cvcuda_to_pil_compatible_tensor,
2928
freeze_rng_state,
3029
ignore_jit_no_profile_information_warning,
3130
make_bounding_boxes,
@@ -3525,7 +3524,7 @@ def test_functional(self, make_input):
35253524
(F.crop_video, tv_tensors.Video),
35263525
(F.crop_keypoints, tv_tensors.KeyPoints),
35273526
pytest.param(
3528-
F._geometry._crop_cvcuda,
3527+
F._geometry._crop_image_cvcuda,
35293528
"cvcuda.Tensor",
35303529
marks=pytest.mark.skipif(not CVCUDA_AVAILABLE, reason="test requires CVCUDA"),
35313530
),
@@ -3552,7 +3551,7 @@ def test_functional_image_correctness(self, kwargs, make_input):
35523551
actual = F.crop(image, **kwargs)
35533552

35543553
if make_input is make_image_cvcuda:
3555-
image = cvcuda_to_pil_compatible_tensor(image)
3554+
image = F.cvcuda_to_tensor(image)[0].cpu()
35563555

35573556
expected = F.to_image(F.crop(F.to_pil_image(image), **kwargs))
35583557

@@ -3674,7 +3673,7 @@ def test_transform_image_correctness(self, param, value, seed, make_input):
36743673
torch.manual_seed(seed)
36753674

36763675
if make_input is make_image_cvcuda:
3677-
image = cvcuda_to_pil_compatible_tensor(image)
3676+
image = F.cvcuda_to_tensor(image)[0].cpu()
36783677

36793678
expected = F.to_image(transform(F.to_pil_image(image)))
36803679

@@ -4527,7 +4526,7 @@ def test_functional(self, make_input):
45274526
(F.resized_crop_video, tv_tensors.Video),
45284527
(F.resized_crop_keypoints, tv_tensors.KeyPoints),
45294528
pytest.param(
4530-
F.resized_crop_image,
4529+
F._geometry._resized_crop_image_cvcuda,
45314530
"cvcuda.Tensor",
45324531
marks=pytest.mark.skipif(not CVCUDA_AVAILABLE, reason="test requires CVCUDA"),
45334532
),
@@ -4584,7 +4583,7 @@ def test_functional_image_correctness(self, make_input, interpolation):
45844583
)
45854584

45864585
if make_input is make_image_cvcuda:
4587-
image = cvcuda_to_pil_compatible_tensor(image)
4586+
image = F.cvcuda_to_tensor(image)[0].cpu()
45884587

45894588
expected = F.to_image(
45904589
F.resized_crop(
@@ -5026,7 +5025,7 @@ def test_functional(self, make_input):
50265025
(F.center_crop_video, tv_tensors.Video),
50275026
(F.center_crop_keypoints, tv_tensors.KeyPoints),
50285027
pytest.param(
5029-
F._geometry._center_crop_cvcuda,
5028+
F._geometry._center_crop_image_cvcuda,
50305029
"cvcuda.Tensor",
50315030
marks=pytest.mark.skipif(not CVCUDA_AVAILABLE, reason="test requires CVCUDA"),
50325031
),
@@ -5072,7 +5071,7 @@ def test_image_correctness(self, output_size, make_input, fn):
50725071
actual = fn(image, output_size)
50735072

50745073
if make_input is make_image_cvcuda:
5075-
image = cvcuda_to_pil_compatible_tensor(image)
5074+
image = F.cvcuda_to_tensor(image)[0].cpu()
50765075

50775076
expected = F.to_image(F.center_crop(F.to_pil_image(image), output_size=output_size))
50785077

@@ -6376,7 +6375,7 @@ def test_functional(self, make_input, functional):
63766375
(F.five_crop, F.five_crop_video, tv_tensors.Video),
63776376
pytest.param(
63786377
F.five_crop,
6379-
F._geometry._five_crop_cvcuda,
6378+
F._geometry._five_crop_image_cvcuda,
63806379
"cvcuda.Tensor",
63816380
marks=pytest.mark.skipif(not CVCUDA_AVAILABLE, reason="test requires CVCUDA"),
63826381
),
@@ -6386,7 +6385,7 @@ def test_functional(self, make_input, functional):
63866385
(F.ten_crop, F.ten_crop_video, tv_tensors.Video),
63876386
pytest.param(
63886387
F.ten_crop,
6389-
F._geometry._ten_crop_cvcuda,
6388+
F._geometry._ten_crop_image_cvcuda,
63906389
"cvcuda.Tensor",
63916390
marks=pytest.mark.skipif(not CVCUDA_AVAILABLE, reason="test requires CVCUDA"),
63926391
),
@@ -6458,7 +6457,7 @@ def test_correctness_image_five_crop(self, make_input, fn):
64586457
actual = fn(image, size=self.OUTPUT_SIZE)
64596458

64606459
if make_input is make_image_cvcuda:
6461-
image = cvcuda_to_pil_compatible_tensor(image)
6460+
image = F.cvcuda_to_tensor(image)[0].cpu()
64626461

64636462
expected = F.five_crop(F.to_pil_image(image), size=self.OUTPUT_SIZE)
64646463

@@ -6489,7 +6488,7 @@ def test_correctness_image_ten_crop(self, make_input, fn_or_class, vertical_flip
64896488
actual = fn(image, **kwargs)
64906489

64916490
if make_input is make_image_cvcuda:
6492-
image = cvcuda_to_pil_compatible_tensor(image)
6491+
image = F.cvcuda_to_tensor(image)[0].cpu()
64936492

64946493
expected = F.ten_crop(F.to_pil_image(image), size=self.OUTPUT_SIZE, vertical_flip=vertical_flip)
64956494

torchvision/transforms/v2/_geometry.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
get_bounding_boxes,
2727
has_all,
2828
has_any,
29-
is_cvcuda_tensor,
3029
is_pure_tensor,
3130
query_size,
3231
)
@@ -140,6 +139,9 @@ class Resize(Transform):
140139

141140
_v1_transform_cls = _transforms.Resize
142141

142+
if CVCUDA_AVAILABLE:
143+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
144+
143145
def __init__(
144146
self,
145147
size: Union[int, Sequence[int], None],
@@ -195,7 +197,8 @@ class CenterCrop(Transform):
195197

196198
_v1_transform_cls = _transforms.CenterCrop
197199

198-
_transformed_types = Transform._transformed_types + (is_cvcuda_tensor,)
200+
if CVCUDA_AVAILABLE:
201+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
199202

200203
def __init__(self, size: Union[int, Sequence[int]]):
201204
super().__init__()
@@ -255,7 +258,8 @@ class RandomResizedCrop(Transform):
255258

256259
_v1_transform_cls = _transforms.RandomResizedCrop
257260

258-
_transformed_types = Transform._transformed_types + (is_cvcuda_tensor,)
261+
if CVCUDA_AVAILABLE:
262+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
259263

260264
def __init__(
261265
self,
@@ -365,7 +369,8 @@ class FiveCrop(Transform):
365369

366370
_v1_transform_cls = _transforms.FiveCrop
367371

368-
_transformed_types = Transform._transformed_types + (is_cvcuda_tensor,)
372+
if CVCUDA_AVAILABLE:
373+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
369374

370375
def __init__(self, size: Union[int, Sequence[int]]) -> None:
371376
super().__init__()
@@ -411,7 +416,8 @@ class TenCrop(Transform):
411416

412417
_v1_transform_cls = _transforms.TenCrop
413418

414-
_transformed_types = Transform._transformed_types + (is_cvcuda_tensor,)
419+
if CVCUDA_AVAILABLE:
420+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
415421

416422
def __init__(self, size: Union[int, Sequence[int]], vertical_flip: bool = False) -> None:
417423
super().__init__()
@@ -820,7 +826,8 @@ class RandomCrop(Transform):
820826

821827
_v1_transform_cls = _transforms.RandomCrop
822828

823-
_transformed_types = Transform._transformed_types + (is_cvcuda_tensor,)
829+
if CVCUDA_AVAILABLE:
830+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
824831

825832
def _extract_params_for_v1_transform(self) -> dict[str, Any]:
826833
params = super()._extract_params_for_v1_transform()
@@ -1132,7 +1139,8 @@ class RandomIoUCrop(Transform):
11321139
Default, 40.
11331140
"""
11341141

1135-
_transformed_types = Transform._transformed_types + (is_cvcuda_tensor,)
1142+
if CVCUDA_AVAILABLE:
1143+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
11361144

11371145
def __init__(
11381146
self,
@@ -1415,6 +1423,9 @@ class RandomResize(Transform):
14151423
v0.17, for the PIL and Tensor backends to be consistent.
14161424
"""
14171425

1426+
if CVCUDA_AVAILABLE:
1427+
_transformed_types = Transform._transformed_types + (_is_cvcuda_tensor,)
1428+
14181429
def __init__(
14191430
self,
14201431
min_size: int,

torchvision/transforms/v2/_transform.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from torch import nn
99
from torch.utils._pytree import tree_flatten, tree_unflatten
1010
from torchvision import tv_tensors
11-
from torchvision.transforms.v2._utils import check_type, has_any, is_cvcuda_tensor, is_pure_tensor
11+
from torchvision.transforms.v2._utils import check_type, has_any, is_pure_tensor
1212
from torchvision.utils import _log_api_usage_once
1313

1414
from .functional._utils import _get_kernel
@@ -91,7 +91,10 @@ def _needs_transform_list(self, flat_inputs: list[Any]) -> list[bool]:
9191

9292
needs_transform_list = []
9393
transform_pure_tensor = not has_any(
94-
flat_inputs, tv_tensors.Image, tv_tensors.Video, PIL.Image.Image, is_cvcuda_tensor
94+
flat_inputs,
95+
tv_tensors.Image,
96+
tv_tensors.Video,
97+
PIL.Image.Image,
9598
)
9699
for inpt in flat_inputs:
97100
needs_transform = True

torchvision/transforms/v2/functional/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from torchvision.transforms import InterpolationMode # usort: skip
22

3-
from ._utils import is_pure_tensor, register_kernel, is_cvcuda_tensor # usort: skip
3+
from ._utils import is_pure_tensor, register_kernel # usort: skip
44

55
from ._meta import (
66
clamp_bounding_boxes,

0 commit comments

Comments
 (0)