PyTorch スタディ ノート - 変換

1.Transformの概念と基本的な使い方

transformsコンピュータ ビジョン ツールキットtorchvisionの下には、画像データを変換するための多くのクラスがあり、これらは画像データの読み取りステップに不可欠です。

transforms使用される主なクラスは次のとおりですtransforms.ToTensor。 PIL Image または ndarray をテンソルに変換し、[0-1] に正規化できます。[0-1] への正規化は 255 で直接除算されることに注意してください。独自の ndarray データのスケールが変更された場合は、自分で変更する必要があります。

なぜテンソルデータ型が必要なのですか? バックプロパゲーション ニューラル ネットワークに必要ないくつかの基本的なパラメーターがパックされているため、ニューラル ネットワークでのトレーニングのためにイメージ タイプをテンソル タイプに変換する必要があります。

例えば:

from PIL import Image
from torchvision import transforms
import cv2

img_path = 'dataset/hymenoptera_data/train/ants_image/0013035.jpg'
img_PIL = Image.open(img_path)  # <class 'PIL.JpegImagePlugin.JpegImageFile'>

tensor_trans = transforms.ToTensor()  # 创建 ToTensor 的实例对象
img_tensor1 = tensor_trans(img_PIL)  # 将 PIL Image 转换成 tensor
print(type(img_tensor1))  # <class 'torch.Tensor'>

img_cv = cv2.imread(img_path)  # <class 'numpy.ndarray'>
img_tensor2 = tensor_trans(img_cv)  # 将 OpenCV Image 转换成 tensor
print(type(img_tensor2))

2. Transform の共通クラス

  • transforms.Compose: Compose は、複数の変換を組み合わせることができます。たとえば、次のコードは、最初に PIL イメージの中心を切り取ってから、テンソルに変換できます。
img_path = 'dataset/hymenoptera_data/train/ants_image/0013035.jpg'
img_PIL = Image.open(img_path)

trans = transforms.Compose([
    transforms.CenterCrop(100),
    transforms.ToTensor()
])

img_trans = trans(img_PIL)
  • transforms.CenterCrop: パラメータを に渡す必要がありますsize。これは、(size, size)の、パラメータも にすることができます(height, width)例えば:
img_PIL.show()

trans_centercrop = transforms.CenterCrop((100, 150))
img_centercrop = trans_centercrop(img_PIL)
img_centercrop.show()
  • transforms.RandomCrop: パラメータを渡す必要があります。sizeこれは、サイズ(size, size)が、パラメータも にすることができます(height, width)
  • transforms.Normalize(mean, std): データをチャネルごとに標準化します。つまり、最初に平均値を引きmean、次に標準偏差で割りますstdHWC形式は で、処理式は次のようになりますoutput[channel] = (input[channel] - mean[channel]) / std[channel]。例:
trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img_PIL)

# 如果 input 的范围是[0, 1],那么用该参数归一化后的范围就变为[-1, 1]
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
print(img_norm)
  • transforms.Resize: パラメータ(height, width)および interpolation。つまり、リセット イメージの解像度は であり(h, w)、整数も に渡すことができますsize。これにより、短辺は にスケーリングされsize、反対側は に従ってスケーリングされます。元の画像サイズ。interpolation補間方法を選択します。デフォルトは ですPIL.Image.BILINEAR。次に例を示します。
trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img_PIL)

print(img_tensor.size())  # torch.Size([3, 512, 768]),tensor 图像使用 size() 获取大小,PIL 图像使用 size

trans_resize = transforms.Resize((256, 300))
img_resize = trans_resize(img_tensor)
print(img_resize.size())  # torch.Size([3, 256, 300]),修改比例

trans_resize = transforms.Resize(30)
img_resize = trans_resize(img_tensor)
print(img_resize.size())  # torch.Size([3, 30, 45]),与原图等比例
  • transforms.ToPILImage:: テンソルまたは ndarray データを PIL イメージ タイプ データに変換します。パラメータmodeのデフォルトNone です。これは 1 チャネルを意味し、 mode=33 チャネルを意味します。デフォルトの変換は RGB であり、4 チャネルはデフォルトで RGBA に変換されます。

おすすめ

転載: blog.csdn.net/m0_51755720/article/details/128056409