在训练卷积网络的数据预处理中调整图像大小

时间:2020-06-14 11:39:14

标签: python dataframe tensorflow machine-learning keras

我正在尝试从jpeg文件加载数据以训练卷积网络。图像很大,但是有2400万像素,因此加载和使用完整分辨率是不现实的。

要使图像具有更有用的格式,我尝试加载每个图像,重新缩放比例,然后将其附加到列表中。完成此操作后,我可以将列表转换为numpy数组,然后像往常一样馈入网络进行训练。

我的问题是我的数据集非常大,大约需要一秒钟的时间来调整每个图像的缩放比例,这意味着按照我目前已实现的方式调整每个图像的尺寸是不可行的:

length_training_DF = 30000
for i in range(length_training_DF):
    im = plt.imread(TRAIN_IM_DIR + trainDF.iloc[i]['image_name'] + '.jpg')
    image = block_reduce(im, block_size=(10, 10, 1), func=np.max)
    trainX.append(image)

我还使用了以下内容:

length_training_DF = 30000
from keras.preprocessing import image
for i in range(50):
    img = image.load_img(TRAIN_IM_DIR + trainDF.iloc[0]['image_name'] + '.jpg', target_size=(224, 224))
    trainX.append(ima)

有什么方法可以将这些图像更快地加载为网络训练格式?我已经考虑过使用keras数据集,也许通过使用tf.keras.preprocessing.image_dataset_from_directory(),但是存储图像数据的目录未正确格式化为包含该方法所需目标的文件夹。 / p>

图像用于二进制分类问题。

1 个答案:

答案 0 :(得分:2)

通常的方法是编写一个预处理脚本,该脚本可以加载大图像,对其进行缩放,并根据需要应用其他操作,然后按照ImageDataGenerator的要求将每个类保存到单独的目录中。

这样做至少有三个充分的理由:

  • 通常,您将花费数十次时间运行培训过程。您不想每次都进行缩放或例如自动白平衡。
  • ImageDataGenerator提供了增强训练数据集的重要方法。
  • 这是开箱即用的好发电机。您可能不想将整个数据集加载到内存中。
相关问题