视觉变形金刚 (ViT) - 澄清问题

问题描述 投票:0回答:1

我在网上找到了下面的代码片段,并且在 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)
machine-learning deep-learning neural-network huggingface-transformers vision-transformer
1个回答
0
投票

随机调整大小裁剪:

它的作用:随机裁剪输入图像并调整其大小。
底层:从原始图像中选择随机裁剪,然后将其调整为指定大小。

随机水平翻转:

它的作用:水平随机翻转图像。
底层: 以一定概率(通常为 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())
© www.soinside.com 2019 - 2024. All rights reserved.