我正在尝试使用GAN将SSIM作为损失函数来填充图像的缺失部分。填充很好,但是当我发现实际输出与预测输出之间的差异时,它会在差异图像中显示相同的缺失部分。我希望实际图像和预测图像的像素值差异尽可能小。
图像像素范围是-7000至180000。我将其归一化为[0,1]。
有什么解决方案可以改善吗?
答案 0 :(得分:0)
GAN确实有可能。实际上,填充图像的缺失部分是GAN最酷的应用之一。您可以在GAN应用程序上出色的article的图像修复主题下找到所需的内容。
您可以在此处找到已实现的图像修复代码。 https://github.com/pathak22/context-encoder
尽管如此,您可能拥有巨大的(至少10000s左右)完整的图像数据集。 我建议的损失函数如下,它可能会在生成器(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)张尺寸的图像给出了可接受的结果。
所以要有耐心和好运。