加载不同大小的图像以训练卷积神经网络

时间:2020-04-01 16:30:42

标签: python arrays conv-neural-network

正如我在研究中所读的,我的研究没有必要用相同大小的输入来提供卷积神经网络,因为我们可以将所谓的空间金字塔池应用为一层,以便在获得之前具有相同大小的图像我们的全连接层,我们需要相同大小的输入。我很清楚 但是我完全迷失了如何在有用的数据框或数组中获取输入(在我的情况下为一堆大小不同的图像)...

我知道,如何将一张图片加载到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.数组是处理这些不同大小图像的有用工具吗?还是我需要熊猫数据框或类似的东西? 2.有没有一种方法可以自动将这些图像加载到我的数据框/数组中?

此刻我很困惑,因为我无法想象如何解决此问题,因为我不了解我们如何处理不同大小的图像的加载以及Python如何使用这些图像。希望我的问题或多或少都清楚。

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 是的,多维数组(张量)对于存储不同大小的图像表示非常有用。避免将Pandas用于数据输入-与numpy数组或张量(即tensorflow或pytorch)相比,计算效率低得多
  2. 绝对。为此,Keras使用了ImageDataGenerator class。该页面以及here上的一些示例:
# 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 class。示例:

# 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)
相关问题