Интуитивное понимание библиотеки torchvision - с 14 визуальными примерами преобразований (Часть 2/3)
Для Части 1 (введение в модули в torchvision
) перейдите по ссылке ниже.
В этой статье
Мы будем экспериментировать с
- некоторые базовые преобразования изображений при загрузке набора данных в ваши скрипты PyTorch
1. преобразует
transforms
- это простые функции преобразования изображений, которые могут выполняться последовательно вскоре после загрузки dataset
(изображений). Это общие шаги для преобразования изображения с помощью torchvision
—
- Определите свой конвейер пользовательских преобразований (используя
torchvision.transforms.Compose
)
(Это просто означает, что нужно перечислить различные преобразования, которые необходимо выполнить в вашем наборе изображений)
2. Загрузите свой datasets
и передайте преобразование, которое вы только что определили в качестве аргумента.
3. Это создаст dataset
с указанными вами преобразованиями.
4. Теперь вы можете загрузить dataset
с помощью DataLoader
Давайте посмотрим код - и все станет ясно, как голубое небо в летний полдень. 😏
import torch import torchvision import matplotlib.pyplot as plt from PIL import Image my_transform = transforms.Compose([ transforms.RandomGrayscale(p=0.5), transforms.CenterCrop(100), transforms.RandomHorizontalFlip(p=0.5), transforms.ToTensor(), ]) my_dataset= torchvision.datasets.ImageFolder(root='../data', transform=my_transform) my_dataloader = torch.utils.data.DataLoader(my_dataset, batch_size=16, shuffle=True, num_workers=4)
Вот образец изображения из набора данных ДО и после применения вышеуказанного transforms
Что происходит в коде?
Подробное объяснение кода
my_transform = transforms.Compose([ transforms.RandomGrayscale(p=0.5), transforms.CenterCrop(100), transforms.RandomHorizontalFlip(p=0.5), transforms.ToTensor(), ])
В коде мы определяем преобразования, которые нам нужно сделать на ваших изображениях. Следующие 4 преобразования выполняются в том порядке, в котором они упоминаются.
- Оттенки серого (преобразование в черно-белое)
- CenterCrop (обрезать изображение от центра до изображения 100x100 пикселей)
- HorizontalFlip (Отразить по горизонтали)
- ToTensor (и, наконец, преобразовать все в тензор изображения)
Примечание: мы просто определяем, какие преобразования должны быть выполнены. Сами преобразования фактически не выполняются (пока).
transforms.RandomGrayscale(p=0.5)
Здесь p=0.5
означает, что с вероятностью 50% изображение будет преобразовано в изображение в оттенках серого. Или, другими словами, вы можете предположить, что примерно 50% изображений в вашем наборе данных будут преобразованы в оттенки серого.
my_dataset = torchvision.datasets.ImageFolder(root='../data', transform=my_transform)
Определите местоположение и передайте объект конвейера преобразования (my_transform
). Это применит указанные выше 4 преобразования в последовательности, как указано в функции the transforms.Compose
.
my_dataloader = torch.utils.data.DataLoader(my_dataset, batch_size=16, shuffle=True, num_workers=4)
Наконец, загрузите преобразованный набор данных в DataLoader. Здесь мы загружаем их партиями по 16 (batch_size=16
), каждый раз выбирая случайные тензоры изображений (shuffle=True
), с 4 мультипроцессами (num_workers=4
)
Некоторые примеры преобразований
Вот некоторые из преобразований, определенных в библиотеке torchvision.transforms
:
1.ColorJitter
my_transform = transforms.Compose([ transforms.ColorJitter(0.7,0.5,0.5,0.5) #transforms.ToTensor() ])
Примечание. При этом случайным образом изменяются значения brightness
, contrast
, saturation
и hue
для каждого изображения.
2.RandomRotation
3.RandomErasing
my_transform = transforms.Compose([ transforms.RandomErasing(p=0.5) ])
4. functional.adjust_contrast()
img = Image.open(“../data/cars/Acura_RLX_.jpg”) T_img = transforms.functional.adjust_contrast(img,2) plt.imshow(T_img)
5.functional.adjust_gamma()
T_img = transforms.functional.adjust_gamma(img,1.9) plt.imshow(T_img)
6. functional.adjust_hue()
7. functional.adjust_saturation()
8. Resize
9. GaussianBlur
my_transform = transforms.Compose([ transforms.GaussianBlur(19) ])
10. centercrop
my_transform = transforms.Compose([ transforms.CenterCrop(100) ])
11. Normalize
my_transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0., 0.456, 0.406), (0.229, 0.224, 0.225)), ])
12. FiveCrop
13 . Pad
14 . RandomPerspective
my_transform = transforms.Compose([ transforms.RandomPerspective(distortion_scale=0.7,p=1, interpolation=2, fill=0), transforms.ToTensor() ])
Краткие сведения о преобразованиях:
- Вы можете выполнять любое количество преобразований с помощью
transforms.Compose
method - Эти преобразования будут выполняться в том же порядке, который вы указали (если вы не укажете, что это должно выполняться в случайном порядке, используя либо
transforms.RandomApply
(где случайные преобразования, которые вы укажете в списке, будут применены к набору данных)
или transforms.RandomOrder
(где преобразования будут применяться в случайном порядке к наборам данных.
В следующей части (Часть 3) мы рассмотрим проблему классификации изображений, воспользуемся некоторыми torchvision
функциями и попытаемся ее решить.