当前位置: 首页 > 科技观察

PULSE-一种基于隐式空间的图像超分辨率算法

时间:2023-03-19 20:10:02 科技观察

PULSE:一种基于隐空间率的图像超分辨率算法,不同于有监督的基于PSNR和基于GANs的方法。该方法是一种无监督的方法,即只能使用低分辨率的图像来恢复高质量、高分辨率的图像。目前代码开源:https://github.com/adamian98/pulse论文信息:1.Motivation图像超分辨率任务的基本目标是将一张低分辨率图像超分为与其对应的高分辨率图像图像。无论是基于PNSR还是基于GAN的监督学习方法,或多或少都会用到pixel-wiseerrorlossfunction,而这往往会导致图像更平滑,一些细节不是很好。于是作者改变了思路:**以前的方法是从LR逐步还原生成HR;如果能找到一张高分辨率图像HR的Manifold,并且从Manifold中找到一张高分辨率图像可以使用降采样还原为LR,那么搜索到的图像就是LR超分辨率的结果。**所以本文主要解决以下两个问题:如何找到高分辨率图像的Manifold?如何在高分辨率图片的Manifold上搜索一张图片,以便降采样还原LR?2.方法假设高分辨率图像的Manifold是M上的高分辨率图像。给定一个低分辨率图像,如果LR可以通过降采样操作DS恢复,那么可以认为它是超-LR的分辨率结果,问题定义如下:即当两者之间的差异小于某个阈值时。那么,本文的任务其实就是找一个如下图所示的:以上就是本文的核心内容,下面我们结合代码看看它是如何实现的。首先,我们需要一个生成模型来逼近高分辨率的Manifold。在这篇文章中,作者使用了StyleGAN预训练模型:StyleGAN生成器网络中有两个部分,一个是MappingNetwork用于将潜在代码映射到样式代码,一个SynthesisNetwork用于使用获得的样式代码映射后指导图像的生成。这里需要注意的是,本文只使用了StyleGAN的预训练模型,并没有对其参数进行训练和更新。加载两部分参数后,随机构造100,000个随机latentcode,使用新的latentcode计算MappingNetwork后的均值和方差:latent=torch.randn((1000000,512),dtype=torch.float32,device="cuda")latent_out=torch.nn.LeakyReLU(5)(mapping(latent))self.gaussian_fit={"mean":latent_out.mean(0),"std":latent_out.std(0)}这个均值和方差可以用来映射新的潜在代码。下一步是随机初始化潜在代码和噪声(StyleGAN要求):#initializelatentcodelatent=torch.randn((batch_size,18,512),dtype=torch.float,requires_grad=True,device='cuda')#initializenoiseforiinrange(18):#[?,1,4,4]->[?,1,1024,1024]res=(batch_size,1,2**(i//2+2),2**(i//2+2))new_noise=torch.randn(res,dtype=torch.float,device='cuda')if(i