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
、次に標準偏差で割りますstd
。HWC
形式は で、処理式は次のようになります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=3
3 チャネルを意味します。デフォルトの変換は RGB であり、4 チャネルはデフォルトで RGBA に変換されます。