【问题标题】:Loading images of different sizes to train convolutional neural network加载不同大小的图像训练卷积神经网络
【发布时间】:2020-04-02 02:15:58
【问题描述】:

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

我知道,如何将一张图片加载到 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 如何处理这些图像。我希望,我的问题或多或少是清楚的。

谢谢!

【问题讨论】:

    标签: python arrays conv-neural-network


    【解决方案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)
    

    【讨论】:

    猜你喜欢
    • 2018-05-01
    • 2016-08-17
    • 2016-12-27
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2018-06-22
    • 2020-09-10
    相关资源
    最近更新 更多