_meta.py 1.74 KB
Newer Older
1
from typing import Any, Dict, Union
Philip Meier's avatar
Philip Meier committed
2

3
import torch
4

5
6
from torchvision import datapoints, transforms as _transforms
from torchvision.transforms.v2 import functional as F, Transform
7

8
9
from .utils import is_simple_tensor

10
11

class ConvertBoundingBoxFormat(Transform):
12
    _transformed_types = (datapoints.BoundingBox,)
13

14
    def __init__(self, format: Union[str, datapoints.BoundingBoxFormat]) -> None:
15
16
        super().__init__()
        if isinstance(format, str):
17
            format = datapoints.BoundingBoxFormat[format]
18
19
        self.format = format

20
    def _transform(self, inpt: datapoints.BoundingBox, params: Dict[str, Any]) -> datapoints.BoundingBox:
21
        return F.convert_format_bounding_box(inpt, new_format=self.format)  # type: ignore[return-value]
22
23


24
class ConvertDtype(Transform):
25
26
    _v1_transform_cls = _transforms.ConvertImageDtype

27
    _transformed_types = (is_simple_tensor, datapoints.Image, datapoints.Video)
28

29
30
31
32
    def __init__(self, dtype: torch.dtype = torch.float32) -> None:
        super().__init__()
        self.dtype = dtype

33
    def _transform(
Philip Meier's avatar
Philip Meier committed
34
35
        self, inpt: Union[datapoints._TensorImageType, datapoints._TensorVideoType], params: Dict[str, Any]
    ) -> Union[datapoints._TensorImageType, datapoints._TensorVideoType]:
36
37
38
39
40
41
        return F.convert_dtype(inpt, self.dtype)


# We changed the name to align it with the new naming scheme. Still, `ConvertImageDtype` is
# prevalent and well understood. Thus, we just alias it without deprecating the old name.
ConvertImageDtype = ConvertDtype
42
43


44
class ClampBoundingBox(Transform):
45
    _transformed_types = (datapoints.BoundingBox,)
46

47
    def _transform(self, inpt: datapoints.BoundingBox, params: Dict[str, Any]) -> datapoints.BoundingBox:
48
        return F.clamp_bounding_box(inpt)  # type: ignore[return-value]