【问题标题】:Is it possible to use GAN for filling only the missing part of image instead of generating whole image?是否可以使用 GAN 仅填充图像的缺失部分而不是生成整个图像?
【发布时间】:2019-07-13 17:23:44
【问题描述】:

我正在尝试使用 GAN 来填充图像的缺失部分,使用 SSIM 作为损失函数。填充很好,但是当我发现实际输出和预测输出之间的差异时,它会在差异图像中显示相同的缺失部分。我希望实际图像和预测图像的像素值差异尽可能小。

图像像素范围是 -7000 到 180000。我将其归一化为 [0,1]。

有什么办法可以改善吗?

【问题讨论】:

    标签: python machine-learning keras deep-learning generative-adversarial-network


    【解决方案1】:

    使用 GAN 确实可以。事实上,填补图像的缺失部分是 GAN 最酷的应用之一。您可以在这篇关于 GAN 应用程序的优秀 article 的主题图像修复中找到您需要的内容。

    您可以在此处找到已实现的图像修复代码。 https://github.com/pathak22/context-encoder

    不过,您可能有一个巨大的(至少 10000 秒左右)完整的图像数据集。 我建议的损失函数如下,它可以在生成器(G)和鉴别器(D)之间产生一场战斗。

    def loss_func(logits_in,labels_in):
        return tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logits_in,labels=labels_in))
    
    
    G = generator(z)
    D_output_real,D_logits_real=discriminator(real_images)
    D_output_fake,D_logits_fake=discriminator(G,reuse=True)
    
    D_real_loss=loss_func(D_logits_real,tf.ones_like(D_logits_real)*0.94) #Smoothing for generalization
    D_fake_loss=loss_func(D_logits_fake,tf.zeros_like(D_logits_real))
    D_loss=D_real_loss+D_fake_loss
    
    G_loss= loss_func(D_logits_fake,tf.ones_like(D_logits_fake))
    

    但是,GAN 的计算成本非常高。因为生成器和鉴别器之间的战斗可能会持续数周才能得到你想要的结果,特别是在图像分辨率很高的情况下。只是为了给你一些线索,我在我的 RTX 2080 Ti GPU 上运行一个 GAN 来生成图像,运行了 3 周,在 200000 个 (218,160) 大小的图像中给出了可接受的结果。

    所以要有耐心,祝你好运。

    【讨论】:

    • 感谢您的回复。我有一个 1024*512 大小的图像,带有大约 1024*8 的遮罩部分。 GAN 能够完全填充图像,但我想最小化差异。 b/w 实际和预测。让我试试这个。谢谢
    • 最近,GPT-3 也被证明可以解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2010-11-16
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多