Интуитивное понимание библиотеки torchvision - с 14 визуальными примерами преобразований (Часть 2/3)

Для Части 1 (введение в модули в torchvision ) перейдите по ссылке ниже.



В этой статье

Мы будем экспериментировать с

  • некоторые базовые преобразования изображений при загрузке набора данных в ваши скрипты PyTorch

1. преобразует

transforms - это простые функции преобразования изображений, которые могут выполняться последовательно вскоре после загрузки dataset (изображений). Это общие шаги для преобразования изображения с помощью torchvision

  1. Определите свой конвейер пользовательских преобразований (используя 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 функциями и попытаемся ее решить.