Загрузка изображений разных размеров для обучения сверточной нейронной сети - PullRequest
1 голос
/ 01 апреля 2020

Поскольку я читаю во время моего исследования для моих исследований, нет необходимости кормить сверточную нейронную сеть входом того же размера, потому что мы можем применить так называемое пространственное пирамидальное объединение в один слой, чтобы получить эти изображения того же размера до наши полностью подключенные слои, где нам нужны входы одинакового размера. Это ясно для меня. Но я совершенно заблудился, как получить входные данные, в моем случае набор изображений разного размера, в полезном кадре данных или массиве ...

Я знаю, как загрузить одно изображение в Python , Я взял этот код, чтобы получить массив из одного изображения:

from PIL import Image 
import numpy as np 

# Open image and make sure it is RGB - not palette 
im = Image.open('C:/Users/tobis/OneDrive/Desktop/Masterarbeit/data/2017-IWT4S-HDR_LP-dataset/crop_h1/I00001.png').convert('RGB') 

# Make into Numpy array 
na = np.array(im) 

# Check shape
print(na.shape)

Но загрузка следующей картинки в этот массив для меня уже проблема. Возникает несколько вопросов: 1. Является ли массив полезным инструментом для работы с изображениями разных размеров? Или мне нужен pandas фрейм данных или что-то вроде этого? 2. Есть ли способ автоматизировать процесс загрузки этих изображений в мой массив данных / массив?

В настоящий момент я очень растерялся, потому что не представляю, как обойти эту проблему, потому что я не понимаю, как мы может обрабатывать загрузку этих изображений разных размеров и как Python работает с ними. Надеюсь, мои вопросы более или менее понятны.

Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2020
  1. Да, многомерные массивы (тензоры) очень полезны для хранения представлений изображений разных размеров. Избегайте Pandas для целей ввода данных - это намного менее вычислительно эффективнее, чем numpy массивы или тензоры (т. Е. Тензорный поток или pytorch)
  2. Абсолютно. Для этой цели express Keras имеет класс ImageDataGenerator . Некоторые примеры приведены на этой странице, а также из здесь :
# example of progressively loading images from file
from keras.preprocessing.image import ImageDataGenerator

# create generator
datagen = ImageDataGenerator()

# prepare an iterators for each dataset
train_it = datagen.flow_from_directory('data/train/', class_mode='binary')
val_it = datagen.flow_from_directory('data/validation/', class_mode='binary')
test_it = datagen.flow_from_directory('data/test/', class_mode='binary')

# confirm the iterator works
batchX, batchy = train_it.next()
print('Batch shape=%s, min=%.3f, max=%.3f' % (batchX.shape, batchX.min(), batchX.max()))

И у pytorch есть класс DataLoader . Пример:

# normalize data inputs
transform = transforms.Compose([
    transforms.ToTensor(),  # Transform to tensor
    transforms.Normalize((0.5,), (0.5,))  # Min-max scaling to [-1, 1]
])

# load train/test sets
trainset = torchvision.datasets.FashionMNIST(root=data_dir, train=True, download=True, transform=transform)
testset = torchvision.datasets.FashionMNIST(root=data_dir, train=False, download=True, transform=transform)

# define classes
classes = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal',
           'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

# initialize train/test generators
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)
testloader = torch.utils.data.DataLoader(testset, batch_size=5, shuffle=False)
...