Структурирование CIFAR100 для resnet18

Вопрос или проблема

Это, вероятно, базовый вопрос, так как я начинаю с компьютерного зрения. Я пытаюсь использовать resnet18 из pytorch и работать с набором данных CIFAR-100. Одно изображение имеет размер 3x32x32, и модель не может обработать это, выдавая ошибку. Она может обрабатывать массивы размером 224, 128, 64. Как мне структурировать свои изображения, чтобы их можно было обработать с помощью resnet18 (не другой архитектуры)?

PyTorch предлагает ряд преобразований, и вы можете просто применить преобразование для изменения размера ваших изображений при загрузке данных. Например, используя эти преобразования (здесь используется CIFAR10 в качестве примера, который тоже идет с изображениями 3x32x32):

# преобразование для обучающих данных
transform_train = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])
    ])

# преобразование для тестовых данных
transform_test = transforms.Compose([
    transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])
    ])

# загрузка данных и применение преобразований
train_data = datasets.CIFAR10('data', train=True,
                              download=True, transform=transform_train)
test_data = datasets.CIFAR10('data', train=False,
                             download=True, transform=transform_test)

Оба, transforms.RandomResizedCrop(224) и transforms.Resize(224) дают желаемый размер. (случайное кадрирование применяется как увеличение данных для дальнейшего разнообразия обучающих данных) Больше информации о доступных преобразованиях вы найдете в документации PyTorch.

Как небольшое замечание: требование к размеру одинаковое для всех предобученных моделей в PyTorch – не только для Resnet18:

Все предобученные модели ожидают, что входные изображения нормализованы одинаково, т.е. мини-пакеты 3-канальных RGB-изображений формы (3 x H x W), где H и W должны быть не меньше 224. Изображения должны быть загружены в диапазон [0, 1], а затем нормализованы с использованием mean = [0.485, 0.456, 0.406] и std = [0.229, 0.224, 0.225].

Ответ или решение

Для работы с архитектурой ResNet18 и использованием датасета CIFAR-100 в библиотеке PyTorch, необходимо учитывать важнейшие аспекты, такие как размер изображения и его нормализация. Давайте подробно разберем, как структурировать изображения для модели ResNet18.

Введение

CIFAR-100 — это популярный набор данных для задач компьютерного зрения, который включает изображения размером 3x32x32 пикселя. Однако, предварительно обученные модели, такие как ResNet18, ожидают изображения размером минимум 224×224 пикселя.

Преобразование изображений

Для корректной обработки входных данных модели, необходимо использовать соответствующие трансформации, предоставляемые PyTorch. Вы можете воспользоваться следующими примерами для настройки ваших тренировочных и тестовых данных.

Трансформация для тренировочных данных

import torchvision.transforms as transforms
from torchvision import datasets

transform_train = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], 
                         std=[0.229, 0.224, 0.225])
])

train_data = datasets.CIFAR100('data', train=True, 
                               download=True, transform=transform_train)

Здесь transforms.RandomResizedCrop(224) выполняет случайное кадрирование и изменение размера изображения до требуемого для модели формата 224×224. Это также позволяет реализовать дополнительное увеличение данных для улучшения устойчивости модели к различным условиям.

Трансформация для тестовых данных

transform_test = transforms.Compose([
    transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], 
                         std=[0.229, 0.224, 0.225])
])

test_data = datasets.CIFAR100('data', train=False, 
                              download=True, transform=transform_test)

В данном случае transforms.Resize(224) обеспечивает простое изменение размера изображений до формата 224×224, необходимого для успешного пропускания через модель ResNet18.

Нормализация

Важно правильно нормализовать изображения в соответствии с требованиями предобученных моделей. Это включает приведение яркости изображений к диапазону [0, 1], а также нормализацию с использованием среднего значения [0.485, 0.456, 0.406] и стандартного отклонения [0.229, 0.224, 0.225].

Заключение

Понимание размера входных изображений и необходимости их нормализации является ключевым при работе с предобученными моделями. Правильно подобранные трансформации помогут адаптировать ваши данные для ResNet18, минимизируя вероятность появления ошибок при передаче данных через сеть. Для получения дальнейших сведений настоятельно рекомендуем ознакомиться с документацией PyTorch, где подробно описаны различные подходы и стратегии работы с изображениями.

Оцените материал
Добавить комментарий

Капча загружается...