首页 > 后端开发 > Python教程 > 在 PyTorch 中调整大小

在 PyTorch 中调整大小

Mary-Kate Olsen
发布: 2025-01-19 22:12:10
原创
938 人浏览过

请我喝杯咖啡☕

*备忘录:

  • 我的帖子解释了 OxfordIIITPet()。

Resize() 可以调整零个或多个图像的大小,如下所示:

*备忘录:

  • 初始化的第一个参数是 size(必需类型:int 或 tuple/list(int)): *备注:
    • 它是[宽度,高度]。
    • 必须是 1
    • 元组/列表必须是具有 1 或 2 个元素的一维。
    • 单个值(int 或 tuple/list(int`))应用于较小图像的宽度或高度边缘,然后另一个较大的宽度或高度边缘也会调整大小: *备注:
    • 如果图像宽度小于其高度,则为 [尺寸, 尺寸 * 宽度 / 高度]。
    • 如果图像宽度大于其高度,则为 [尺寸 * 宽度 / 高度 , 尺寸]。
    • 如果图像宽度等于其高度,则为 [size, size]。
  • 初始化的第二个参数是插值(Optional-Default:InterpolationMode.BILINEAR-Type:InterpolationMode)。
  • 初始化的第三个参数是 max_size(Optional-Default:None-Type:int): *备注:
    • 仅当 size 为单个值(int 或 tuple/list(int`))时才支持。
    • 应用尺寸后,如果较大图像的宽度或高度边缘超过它,则会将其应用于较大图像的宽度或高度边缘以限制图像尺寸,然后其他较小图像的宽度或高度边缘也会变得比之前小。
  • 初始化的第四个参数是抗锯齿(可选默认值:True-Type:bool)。 *即使设置为 False,插值为 InterpolationMode.BILINEAR 或 InterpolationMode.BICUBIC 时也始终为 True。
  • 第一个参数是img(必需类型:PIL图像或张量(int,float,complex或bool)): *备注:
    • 张量必须是一个或多个元素的 3D 或多维张量。
    • 不要使用img=。
  • v2建议按照V1还是V2使用?我应该使用哪一个?
from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import Resize
from torchvision.transforms.functional import InterpolationMode

resize = Resize(size=100)
resize = Resize(size=100,
                interpolation=InterpolationMode.BILINEAR,
                max_size=None,
                antialias=True)
resize
# Resize(size=[100],
#        interpolation=InterpolationMode.BILINEAR,
#        antialias=True)

resize.size
# [100]

resize.interpolation
# <InterpolationMode.BILINEAR: 'bilinear'>

print(resize.max_size)
# None

resize.antialias
# True

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

p1000_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=1000)
    # transform=Resize(size=[1000])
)

p100_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=100)
)

p50_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=50)
)

p10_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=10)
)

p100p180_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=[100, 180])
)

p180p100_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=[180, 100])
)

p100ms110_data = OxfordIIITPet(
    root="data",
    transform=Resize(size=100, max_size=110)
)

import matplotlib.pyplot as plt

def show_images1(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.tight_layout()
    plt.show()

show_images1(data=origin_data, main_title="origin_data")
show_images1(data=p1000_data, main_title="p1000_data")
show_images1(data=p100_data, main_title="p100_data")
show_images1(data=p50_data, main_title="p50_data")
show_images1(data=p10_data, main_title="p10_data")
print()
show_images1(data=origin_data, main_title="origin_data")
show_images1(data=p100p180_data, main_title="p100p180_data")
show_images1(data=p180p100_data, main_title="p180p100_data")
print()
show_images1(data=p100_data, main_title="p100_data")
show_images1(data=p100ms110_data, main_title='p100ms110_data')

# ↓ ↓ ↓ ↓ ↓ ↓ The code below is identical to the code above. ↓ ↓ ↓ ↓ ↓ ↓
def show_images2(data, main_title=None, s=None, ms=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)
        if not s:
            s = im.size
        resize = Resize(size=s, max_size=ms) # Here
        plt.imshow(X=resize(im)) # Here
    plt.tight_layout()
    plt.show()

show_images2(data=origin_data, main_title="origin_data")
show_images2(data=origin_data, main_title="p1000_data", s=1000)
show_images2(data=origin_data, main_title="p100_data", s=100)
show_images2(data=origin_data, main_title="p50_data", s=50)
show_images2(data=origin_data, main_title="p10_data", s=10)
print()
show_images2(data=origin_data, main_title="origin_data")
show_images2(data=origin_data, main_title="p100p180_data", s=[100, 180])
show_images2(data=origin_data, main_title="p180p100_data", s=[180, 100])
print()
show_images2(data=origin_data, main_title="p100_data", s=100)
show_images2(data=origin_data, main_title="p100ms110_data", s=100, ms=110)
登录后复制

Image description

Image description

Image description

Image description

Image description


Image description

Image description

Image description


Image description

Image description

以上是在 PyTorch 中调整大小的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板