DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

RandomRotation in PyTorch

Buy Me a Coffee

*Memos:

RandomRotation() can rotate zero or more images as shown below:

*Memos:

  • The 1st argument for initialization is degrees(Required-Type:int, float or tuple/list(int or float)): *Memos:
    • It's the range of the degrees (min, max).
    • A single value must be 0 <= x.
    • A single value is converted to (-min, +max) which is (-degrees, +degrees).
    • A tuple or list must be the 1D with 2 elements. *The 1st element must be less than or equal to the 2nd element.
  • The 2nd argument for initialization is interpolation(Optional-Default:InterpolationMode.NEAREST-Type:InterpolationMode).
  • The 3rd argument for initialization is expand(Optional-Default:False-Type:bool).
  • The 4th argument for initialization is center(Optional-Default:None-Type:tuple/list(int or float)). *It must be the 1D with 2 elements.
  • The 5th argument for initialization is fill(Optional-Default:0-Type:int, float or tuple/list(int or float)): *Memos:
    • A tuple or list must be the 1D with 3 elements.
  • The 1st argument is img(Required-Type:PIL Image or tensor/tuple/list(int or float)): *Memos:
    • It must be 2D or 3D. For 3D, the deepest D must have one element.
    • Don't use img=.
  • v2 is recommended to use according to V1 or V2? Which one should I use?.
from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import RandomRotation
from torchvision.transforms.functional import InterpolationMode

randomrotation = RandomRotation(degrees=90.0)
randomrotation = RandomRotation(degrees=[-90.0, 90.0], 
                                interpolation=InterpolationMode.NEAREST,
                                expand=False,
                                center=None,
                                fill=0)
randomrotation
# RandomRotation(degrees=[-90.0, 90.0],
#                interpolation=InterpolationMode.NEAREST,
#                expand=False,
#                fill=0)

randomrotation.degrees
# [-90.0, 90.0]

randomrotation.interpolation
# <InterpolationMode.NEAREST: 'nearest'>

randomrotation.expand
# False

print(randomrotation.center)
# None

randomrotation.fill
# 0

origin_data = OxfordIIITPet(
    root="data",
    transform=None
    # transform=RandomRotation(degrees=[0.0, 0.0])
)

p90_data = OxfordIIITPet( # `p` is plus.
    root="data",
    transform=RandomRotation(degrees=90.0)
    # transform=RandomRotation(degrees=[-90.0, 90.0])
)

p90p90_data = OxfordIIITPet(
    root="data",
    transform=RandomRotation(degrees=[90.0, 90.0])
)

m90m90expand_data = OxfordIIITPet( # `m` is minus.
    root="data",
    transform=RandomRotation(degrees=[-90.0, -90.0], expand=True)
)

p180p180offcenter_data = OxfordIIITPet(
    root="data",
    transform=RandomRotation(degrees=[180.0, 180.0], center=[270, 200])
)

m45m45fillgray_data = OxfordIIITPet(
    root="data",
    transform=RandomRotation(degrees=[-45.0, -45.0], fill=150)
)

p135p135fillpurple_data = OxfordIIITPet(
    root="data",
    transform=RandomRotation(degrees=[135.0, 135.0], fill=[160, 32, 240])
)

import matplotlib.pyplot as plt

def show_images(data, main_title=None):
    plt.figure(figsize=(10, 5))
    plt.suptitle(t=main_title, y=0.8, fontsize=14)
    for i, (im, _) in zip(range(1, 6), data):
        plt.subplot(1, 5, i)
        plt.imshow(X=im)
        plt.xticks(ticks=[])
        plt.yticks(ticks=[])
    plt.tight_layout()
    plt.show()

show_images(data=origin_data, main_title="origin_data")
show_images(data=p90_data, main_title="p90_data")
show_images(data=p90p90_data, main_title="p90p90_data")
show_images(data=m90m90expand_data, main_title="m90m90expand_data")
show_images(data=p180p180offcenter_data, main_title="p180p180offcenter_data")
show_images(data=m45m45fillgray_data, main_title="m45m45fillgray_data")
show_images(data=p135p135fillpurple_data, main_title="p135p135fillpurple_data")
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

Image description

Image description

Image description

Image description

Image description

from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import RandomRotation

my_data = OxfordIIITPet(
    root="data",
    transform=None
)

import matplotlib.pyplot as plt

def show_images(data, main_title=None, d=0.0, e=False, c=None, f=0):
    plt.figure(figsize=(10, 5))
    plt.suptitle(t=main_title, y=0.8, fontsize=14)
    for i, (im, _) in zip(range(1, 6), data):
        plt.subplot(1, 5, i)
        rr = RandomRotation(degrees=d, expand=e, center=c, fill=f) # Here
        plt.imshow(X=rr(im)) # Here
        plt.xticks(ticks=[])
        plt.yticks(ticks=[])
    plt.tight_layout()
    plt.show()

show_images(data=my_data, main_title="my_data")
show_images(data=my_data, main_title="p90_data", d=90.0)
show_images(data=my_data, main_title="p90p90_data", d=[90.0, 90.0])
show_images(data=my_data, main_title="m90m90expand_data", d=[-90, -90])
show_images(data=my_data, main_title="p180p180offcenter_data",
            d=[180.0, 180.0], c=[270, 200])
show_images(data=my_data, main_title="m45m45fillgray_data",
            d=[-45.0, -45.0], f=150)
show_images(data=my_data, main_title="p135p135fillpurple_data",
            d=[135.0, 135.0], f=[160, 32, 240])
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Top comments (0)