对抗性 GAN 中的调整层大小

问题描述 投票:0回答:0

关于在顺序模型中调整层的大小已经提出了很多问题,但我找不到任何可以解决我的特定架构的问题。

我正在创建一个对抗性 GAN。首先输入图像(大小为 224 224 3)并通过生成器发送,生成器输出相同大小的生成图像。然后将此图像提供给鉴别器和目标网络 (VGG16),两者都期望输入为 224 224 3。

这是我当前的代码:

 def __init__(self):
        # input image dimensions
        inputs = Input(shape=(224, 224, 3))

        optimizer_g = Adam(0.0002)
        optimizer_d = SGD(0.01)

        # Build generator
        outputs = self.build_generator(inputs)
        self.G = Model(inputs, outputs)
        self.G._name = 'Generator'
        # self.G.summary()

        # Build discriminator and train it
        outputs = self.build_discriminator(self.G(inputs))
        self.D = Model(inputs, outputs)
        self.D.compile(loss=tensorflow.keras.losses.binary_crossentropy, optimizer=optimizer_d, metrics=[self.custom_acc])
        self.D._name = 'Discriminator'
        # self.D.summary()

        # We use VGG16 trained with ImageNet dataset.
        self.target = VGG16(weights='imagenet')
        self.target.trainable = False

        # Build GAN: stack generator, discriminator and target
        img = (self.G(inputs) / 2 + 0.5) * 255  # image's pixels will be between [0, 255]

        ## Image is now preprocessed before being fed to VGG16
        self.stacked = Model(inputs=inputs, outputs=[self.G(inputs),
                                self.D(self.G(inputs)), self.target(preprocess_input(img))])
        self.stacked.compile(loss=[self.generator_loss, tensorflow.keras.losses.binary_crossentropy,
                                   tensorflow.keras.losses.categorical_crossentropy], optimizer=optimizer_g)
        self.stacked.summary()

我现在遇到的问题是,我需要让这个网络适用于任何图像尺寸。这意味着生成器将以图像 600 800 3 为例,输出 600 800 3 然后需要将此图像调整为 (224 224 3) 以便提供给鉴别器和 VGG16。 (我无法更改鉴别器或 VGG16 的输入,生成器的输出需要在两者之间调整大小)。

我尝试了很多方法在生成器之后使用 Resizing()、Reshape() 甚至 tf.image.resize() 添加调整大小层,但我无法使它们适合我的网络。我不确定我是否应该在生成器之后添加一个新的

Model()
或者我是否应该更改
build_discriminator()
self.D = Model(inputs, outputs)

的输入

任何人都可以在这件事上启发我并向我解释我如何通过调整大小的过程将所有这些模型互连起来吗?

提前致谢!

PS:我没有粘贴生成器和判别器的代码,但如果您需要查看它们的代码,它们已从 github 中获取https://github.com/niharikajainn/adv_gan_keras/blob/master/adv_gan。 py.

python tensorflow keras image-resizing generative-adversarial-network
© www.soinside.com 2019 - 2024. All rights reserved.