首頁 >後端開發 >Python教學 >PyTorch 中的隨機旋轉

PyTorch 中的隨機旋轉

Susan Sarandon
Susan Sarandon原創
2024-12-29 02:47:11679瀏覽

請我喝杯咖啡☕

*備忘錄:

  • 我的貼文解釋了 RandomHorizo​​ntalFlip()。
  • 我的貼文解釋了 RandomVerticalFlip()。
  • 我的帖子解釋了 OxfordIIITPet()。

RandomRotation() 可以旋轉零個或多個影像,如下所示:

*備忘錄:

  • 初始化的第一個參數是度數(必要型別:int、float 或 tuple/list(int 或 float)): *備註:
    • 單一值必須為 0
    • 元組或列表必須是具有 2 個元素的一維。 *第一個元素必須小於或等於第二個元素。
  • 初始化的第二個參數是插值(Optional-Default:InterpolationMode.NEAREST-Type:InterpolationMode)。
  • 初始化的第三個參數是expand(Optional-Default:False-Type:bool)。
  • 初始化的第四個參數是 center(Optional-Default:None-Type:tuple/list(int or float))。 *必須是2個元素的一維。
  • 初始化的第五個參數是 fill(Optional-Default:0-Type:int, float or tuple/list(int or float)): *備註:
    • 元組或列表必須是具有 3 個元素的一維。
  • 第一個參數是img(必需類型:PIL映像或張量/元組/列表(int或float)): *備註:
    • 它必須是 2D 或 3D。對於 3D,最深的 D 必須有一個元素。
    • 不要使用img=。
  • v2建議依照V1還是V2使用?我應該使用哪一個?
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
)

p90_data = OxfordIIITPet( # `p` is plus.
    root="data",
    transform=RandomRotation(degrees=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")

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

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))

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

RandomRotation in PyTorch

以上是PyTorch 中的隨機旋轉的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn