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

我正在尝试从jpeg文件加载数据来训练一个卷积网络。这些图像非常大,包含2400万像素,因此加载和使用全分辨率是不切实际的。

为了将图像转换为更实用的格式,我尝试加载每张图像,重新调整其尺寸,然后将其添加到列表中。完成后,我可以将列表转换为numpy数组,并像往常一样输入网络进行训练。

我的问题是我的数据集非常大,每张图像调整尺寸需要大约一秒钟,这意味着以我目前的方式调整每张图像的大小是不可行的:

length_training_DF = 30000for 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 = 30000from keras.preprocessing import imagefor 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(),但存储图像数据的目录没有正确地格式化为包含相同目标的文件夹,这是该方法所要求的。

这些图像用于二分类问题。


回答:

通常的方法是编写一个预处理脚本,加载大图像,重新调整它们的尺寸,如果需要,还可以应用其他操作,然后将每个类别保存到单独的目录中,这是ImageDataGenerator所要求的。

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

  • 通常,您将运行数十次训练过程。您不希望每次都进行重新调整尺寸或例如自动白平衡。
  • ImageDataGenerator提供了增强您的训练数据集的重要方法。
  • 它是一个开箱即用的好生成器。您可能不希望将整个数据集加载到内存中。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注