我在网上找到了下面的代码片段,并且在 google colab 上进行了基本的图像分类训练。
有人可以用简单的术语解释一下当我们执行 RandomResizedCrop、RandomHorizontalFlip、Normalize、To Tensors 时到底发生了什么?
摘自出版物 -> https://openreview.net/pdf?id=YicbFdNTTy 图像被分解为补丁,并标准化并输入神经网络。
from torchvision.transforms import (CenterCrop,
Compose,
Normalize,
RandomHorizontalFlip,
RandomResizedCrop,
Resize,
ToTensor)
from transformers import ViTImageProcessor
processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224-in21k")
image_mean = processor.image_mean
image_std = processor.image_std
size = processor.size["height"]
normalize = Normalize(mean=image_mean, std=image_std)
_train_transforms = Compose(
[
RandomResizedCrop(size),
RandomHorizontalFlip(),
ToTensor(),
normalize,
]
)
_val_transforms = Compose(
[
Resize(size),
CenterCrop(size),
ToTensor(),
normalize,
]
)
def train_transforms(examples):
examples['pixel_values'] = [_train_transforms(image.convert("RGB")) for image in examples['image']]
return examples
def val_transforms(examples):
examples['pixel_values'] = [_val_transforms(image.convert("RGB")) for image in examples['image']]
return examples
food['train'].set_transform(train_transforms)
food['test'].set_transform(val_transforms)
随机调整大小裁剪:
它的作用:随机裁剪输入图像并调整其大小。
底层:从原始图像中选择随机裁剪,然后将其调整为指定大小。
随机水平翻转:
它的作用:水平随机翻转图像。
底层: 以一定概率(通常为 0.5 次)翻转图像。
标准化:
它的作用:标准化图像像素值。
底层:减去平均值并除以每个颜色通道的标准差,以标准化像素值。
到张量:
它的作用:将图像转换为 PyTorch 张量。
底层: 将图像数据(最初采用 numpy 数组或 PIL 图像的形式)转换为 PyTorch 用于计算的张量格式。
示例
import torchvision.transforms as transforms
from torchvision.datasets import CIFAR10
from torch.utils.data import DataLoader
# Define transformations
transform = transforms.Compose([
transforms.RandomResizedCrop(224), # Crop and resize
transforms.RandomHorizontalFlip(), # Random horizontal flip
transforms.ToTensor(), # Convert to tensor
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # Normalize
])
# Load CIFAR-10 dataset with transformations
train_dataset = CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
# Iterate through batches (example)
for images, labels in train_loader:
# Perform training or further processing here
print(images.size(), labels.size())