如何使用 Keras ImageDataGenerator 来提供 pix2pix CNN 模型?

How to use Keras ImageDataGenerator for feeding a pix2pix CNN model?

我正在尝试使用 keras ImageDataGenerator 来训练 pix2pix CNN 模型。它将输入图像映射到输出图像。我们知道 keras ImageDataGenerator 可以很容易地用于图像分类,但我在训练 pix2pix 模型时遇到了问题。这是我的尝试:

自定义生成器:

class JoinedGen(tf.keras.utils.Sequence):
    def __init__(self, input_gen, target_gen):
        self.input_gen = input_gen
        self.target_gen = target_gen

        assert len(input_gen) == len(target_gen)

    def __len__(self):
        return len(self.input_gen)

    def __getitem__(self, i):
        x = self.input_gen[i]
        y = self.target_gen[i]

        return x, y

    def on_epoch_end(self):
        self.input_gen.on_epoch_end()
        self.target_gen.on_epoch_end()
        self.target_gen.index_array = self.input_gen.index_array

使用 ImageDataGenerator 实现:

generator = ImageDataGenerator(shear_range=0.2,
       zoom_range=0.2,
       horizontal_flip=True,
       validation_split=0.3) 

  
input_gen = generator.flow_from_directory(path, 
                                          classes=['area'], 
                                          shuffle=False,
                                          target_size=(256, 256),   
                                          class_mode=None,
                                          batch_size=32,
                                          subset='training')

target_gen = generator.flow_from_directory(path, 
                                          classes=['sat'],
                                          shuffle=False, 
                                          target_size=(256, 256),
                                          class_mode=None,
                                          batch_size=32,
                                          subset='training')

input_gen_val = generator.flow_from_directory(path, 
                                          classes=['area'], 
                                          shuffle=False,
                                          target_size=(256, 256),   
                                          class_mode=None,
                                          batch_size=32,
                                          subset='validation')

target_gen_val = generator.flow_from_directory(path, 
                                          classes=['sat'],   
                                          shuffle=False, 
                                          target_size=(256, 256),
                                          class_mode=None,
                                          batch_size=32,
                                          subset='validation')

但是当我使用 input_gen.next()[0]target_gen.next()[0] 请求两个训练生成器的第一张图像时,它没有给我相应的输入和输出!

正如 Keras 文档中所述,解决方案是“为 fit 和 flow 方法提供相同的种子和关键字参数 - seed = 1”。

只需添加到flow_from_directory方法seed = 1

查看 link 了解更多信息 here