Transforms V1的各种操作
Transforms V1文档
与前面笔记同样的,以树叶分类竞赛数据集为例,下面代码写了一个函数,并可视化变换操作后的结果
import torch
import numpy as np
import pandas as pd
import math
import os
from torch.utils.data import Dataset
from matplotlib import pyplot as plt
from sklearn.preprocessing import LabelEncoder
from PIL import Image
from torchvision import transforms
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"使用设备: {device}")
class CustomDataset(Dataset):
def __init__(self, data_dir, data_transform=None):
self.data = pd.read_csv(data_dir)
self.transform = data_transform
self.data['label'] = LabelEncoder().fit_transform(self.data['label'])
def __len__(self):
return len(self.data)
def __getitem__(self, index):
image_path = 'D:/tmp/A-TMP/models/classify-leaves/'+self.data.iloc[index]['image']
label = self.data.iloc[index]['label']
image = Image.open(image_path).convert('RGB')
if self.transform:
image = self.transforms(image)
return image, label
train_csv_file = 'D:/tmp\A-tmp\models\classify-leaves/train.csv'
eg_dataset = CustomDataset(train_csv_file, data_transform=None)
def show_transforms(trans_operation, seed=None):
if seed is not None:
np.random.seed(seed)
idx = np.random.randint(0, len(eg_dataset))
image_raw, _ = eg_dataset[idx]
image_trans = trans_operation(image_raw)
plt.figure(figsize=(6,2))
plt.subplot(1,2,1)
plt.imshow(image_raw)
plt.title("image_raw")
plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(image_trans)
plt.title(f"{trans_operation.__class__.__name__}{getattr(trans_operation, 'degrees', '')}")
plt.axis('off')
plt.tight_layout()
plt.show()
show_transforms(transforms.RandomCrop(100), seed=42)
| 几何变换 | |
|---|
Resize(size[, interpolation, max_size, …]) | 将输入图像调整为给定大小。 |
RandomCrop(size[, padding, pad_if_needed, …]) | 从随机位置裁剪给定图像。 |
RandomResizedCrop(size[, scale, ratio, …]) | 随机裁剪图像的一部分并将其调整为给定大小。 |
CenterCrop(size) | 从中心裁剪给定图像。 |
FiveCrop(size) | 将给定图像裁剪为四个角和中心裁剪。 |
TenCrop(size[, vertical_flip]) | 将给定图像裁剪为四个角和中心裁剪,外加这些的翻转版本(默认使用水平翻转)。 |
Pad(padding[, fill, padding_mode]) | 在所有边上用给定的“填充”值填充给定图像。 |
RandomRotation(degrees[, interpolation, …]) | 按角度旋转图像。 |
RandomAffine(degrees[, translate, scale, …]) | 保持中心不变的图像随机仿射变换。 |
RandomPerspective([distortion_scale, p, …]) | 以给定的概率对给定图像执行随机透视变换。 |
ElasticTransform([alpha, sigma, …]) | 使用弹性变换转换张量图像。 |
RandomHorizontalFlip([p]) | 以给定的概率随机水平翻转给定图像。 |
RandomVerticalFlip([p]) | 以给定的概率随机垂直翻转给定图像。 |