PyTorch でのサイズ変更

Mary-Kate Olsen
リリース: 2025-01-19 22:12:10
オリジナル
938 人が閲覧しました

コーヒー買ってきて☕

*メモ:

  • 私の投稿では OxfordIIITPet() について説明しています。

Resize() は、以下に示すように 0 個以上の画像のサイズを変更できます。

*メモ:

  • 初期化の最初の引数は size(Required-Type:int または tuple/list(int)) です。 *メモ:
    • [幅、高さ]です。
    • 1
    • タプル/リストは 1 つまたは 2 つの要素を持つ 1D でなければなりません。
    • 単一の値 (int または tuple/list(int`)) が画像の小さい方の幅または高さの端に適用され、もう一方の大きい幅または高さの端もサイズ変更されます。 *メモ:
    • 画像の幅が高さより小さい場合、[サイズ、サイズ * 幅 / 高さ] となります。
    • 画像の幅が高さよりも大きい場合、[サイズ * 幅 / 高さ , サイズ] となります。
    • 画像の幅が高さと等しい場合、それは [サイズ、サイズ] です。
  • 初期化の 2 番目の引数は interpolation(Optional-Default:InterpolationMode.BILINEAR-Type:InterpolationMode) です。
  • 初期化の 3 番目の引数は max_size(Optional-Default:None-Type:int) です。 *メモ:
    • サイズが単一の値(int または tuple/list(int`)) の場合にのみサポートされます。
    • サイズが適用された後、より大きな画像の幅または高さの端がそれを超える場合は、より大きな画像の幅または高さの端に適用されて画像サイズが制限され、他の小さな画像の幅または高さの端も以前よりも小さくなります。
  • 初期化の 4 番目の引数は、antialias(Optional-Default:True-Type:bool) です。 ※補間がInterpolationMode.BILINEARまたはInterpolationMode.BICUBICの場合はFalseを設定しても常にTrueとなります。
  • 最初の引数は img(Required-Type:PIL Image or tensor(int, float, complex or bool)) です。 *メモ:
    • テンソルは、1 つ以上の要素の 3D または複数の D テンソルでなければなりません。
    • img=.
    • は使用しないでください。
  • V1 または V2 に従って 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート