1

使用图像和 keras ImageDataGenerator时应该使用哪个 kedro 数据集?我知道有ImageDataset但图像数量太大而无法放入内存。keras ImageDataGenerator 真正需要的只是图像数据集的本地文件夹位置,格式如下:

data/
    train/
        dogs/
            dog001.jpg
            dog002.jpg
            ...
        cats/
            cat001.jpg
            cat002.jpg
            ...
    validation/
        dogs/
            dog001.jpg
            dog002.jpg
            ...
        cats/
            cat001.jpg
            cat002.jpg
            ...

可以使用指定数据位置的参数,但我认为数据的适当位置应该是数据目录。是否有一种简单的方法可以在数据目录中指定此数据位置?

4

2 回答 2

1

我认为您的问题有两个部分很重要,需要分开;

  1. 是否可以配置自定义 ImageDataGenerator 数据集?(TLDR;是的)
  2. 是否可以使用与我的用例匹配的文件路径参数来配置上述内容?(TLDR;是的,但您可能不希望您的目录结构成为目录结构的默认视图,因为其他用户可能也无法使用它)。

是否可以配置自定义 ImageDataGenerator 数据集?

这是一些不完整的 Python 代码,可用于构建自定义数据集。如果您想要这样的解决方案,我会留给您使其正常工作。查看Kedro Github Repo中的示例数据集以获取灵感和从 kedro readthedocs创建自定义数据集的教程。

import tensorflow as tf 
from kedro.io.core import AbstractDataSet

class ImageDataGeneratorDataSet(AbstractDataSet):

    def __init__(
        self,
        filepath: str,
        load_args: Dict[str, Any] = None,
        save_args: Dict[str, Any] = None):
        
        self.filepath = filepath
        self.load_args = load_args
        self.save_args = save_args 


    def load(self):
        generator = tf.keras.preprocessing.image.ImageDataGenerator(**self.load_args)
        return generator.flow_from_directory(self.filepath)

    def save(self, data):
        raise Exception("Saving with the ImageDataGeneratorDataSet is not supported")

2:是否可以使用与我的用例匹配的文件路径参数来配置上述内容?

虽然我们可以修改上面的内容以接受一些参数并返回不同的迭代器,但如果目录结构不同,这可能会给我们带来问题。这是因为参数化很大程度上依赖于通用约定。

如果您的约定是data/{train/validation}/{dog/cat}/images...您提取和应用参数的解决方案,则可能与火车/验证和狗/猫的相应顺序相关联,并且可能不适用于可能具有data/{dog/cat}/{train/validation}/images....

更好的模式可能是实现一个解决方案(就像我在第一部分中概述的那样),在目录中为每个不同的训练/验证数据注册一个数据集,并在运行时在节点内组合迭代器以创建训练和验证迭代器。

例如,您将拥有数据集 train_cats、train_dogs、validation_cats、validation_dogs。在节点内,您可以将这些迭代器 izip 在一起(请参阅https://stackoverflow.com/a/243902/13341083)。

如果您最终采用这种方法,请提出 PR 并做出贡献 :) 祝您好运

于 2020-10-05T22:45:35.323 回答
1

如何设置路径,parameters.yml然后将其作为 ImageDataGenerator 的输入读取。它可能看起来像:

train_dogs_location: data/train/dogs/

根据什么是最好的修改上面的例子。您还可以考虑为conf/base/globals.yml文件中的所有数据集设置全局路径。例如,对于您的根数据文件夹。

于 2020-10-05T16:35:46.200 回答