LDM: High-Resolution Image Synthesis with Latent Diffusion Models CVPR 2022

目录

Abstract

Motivation

Contribution

Method

Perceptual Image Compression

Latent Diffusion Models

Generative Modeling of Latent Representations

Conditioning Mechanisms

Experiment

景观图像的语义合成

使用LDM进行图像超分

使用LDM进行图像补全

Code

Conclusion



💡首先训练好一个AutoEncoder自编码模型,把输入图片进行压缩转化到潜在空间(即感知压缩,将高维特征压缩到低维),然后在潜在空间进行diffusion操作,并在扩散过程引入条件机制,通过cross-attention的方法来实现多模态训练(即语义压缩

Abstract

通过将图像形成过程分解为降噪自编码器的顺序应用,扩散模型(DMs)在图像数据和其他数据上实现了最先进的合成结果。此外,它们的形成过程允许引导机制来控制图像生成过程而无需再训练。然而,由于这些模型通常直接在像素空间中操作,优化功能强大的DM通常会消耗数百个GPU数天,而且由于顺序计算,推理也非常昂贵。为了在有限的计算资源上进行DM的训练,同时保持其质量和灵活性,本文将其应用于预训练的自编码器的潜在空间。与之前的工作相比,在这种表示上训练扩散模型第一次允许在复杂性降低和细节保留之间达到一个接近最优的点,极大地提高了视觉保真度。通过在模型结构中引入交叉注意层,LDM将扩散模型转化为强大而灵活的生成器,用于文本或边界框等一般的条件输入,并以卷积的方式实现高分辨率合成。LDM在图像修复和基于类别的条件图像合成方面取得了新的最好的结果,并在各种任务上具有很强的竞争力,包括无条件图像生成、文本到图像合成和超分辨率,同时与基于像素的DMs相比显著减少了计算需求。

Motivation

**计算资源的限制:**DM的计算成本、时间成本太高

➡️训练一个编解码网络AutoEncoder,将大分辨率图像编码到小空间再做DDPM,本质上是vq-vae

VQGAN,全称Taming Transformers for High-Resolution Image Synthesis,是一种用于高清图像生成的模型。它结合了Transformer和GAN(生成对抗网络)的优势,通过两阶段生成方法实现图像合成:先用基于CNN的VQGAN压缩图像,再用Transformer生成压缩图像。VQGAN改进自VQVAE,使用感知误差和基于图块的判别器提升图像清晰度。

Contribution

  • 在显著降低计算成本的同时,LDM在多个任务(无条件图像合成、inpainting、超分辨率)和数据集上实现了具有竞争力的性能。与基于像素的扩散方法相比,还显著降低了推理成本
  • 与之前的工作(同时学习编码器/解码器架构和基于分数的先验)相比,本文的方法不需要对重构和生成能力进行精确的加权。这确保了高忠实度的重建,需要非常少的潜空间正则化。

Method

作者提出通过压缩与生成阶段的显式分离来规避这一缺陷(见图2)。为了实现这一目标,作者使用了自编码器,该模型学习的空间在感知上与图像空间等效,但显著降低了计算复杂度。

  • 通过离开高维图像空间,得到的DM计算效率更高,因为采样是在低维空间上执行的
  • 利用了Unet模型的归纳偏差,这使得它们对具有空间结构的数据特别有效,因此减轻了以前方法所要求的激进的、降低质量的压缩的需求
  • 本文得到了通用目的的压缩模型,其潜在空间可用于训练多个生成模型,也可用于其他下游应用,如单幅图像基于CLIP引导的图像合成

Perceptual Image Compression

本文的感知压缩模型基于之前的工作《Taming Transformers for High-Resolution Image Synthesis》(CVPR 2022)由感知损失和基于patch的对抗损失训练的自编码器组成。这确保了重建被限制在图像流形中,通过加强局部真实感并避免了仅依赖像素空间损失(如L2或L1)所带来的模糊。

GitHub - CompVis/taming-transformers: Taming Transformers for High-Resolution Image Synthesis

为了避免任意高方差的潜在空间,文中使用两种不同的正则化进行实验。

  1. **KL正则:**将隐空间约束到标准正态分布,对学习到的潜在空间的标准正常值施加轻微的KL -惩罚,类似VAE。
  2. **VQ正则:**在解码器中使用向量量化层[Neural Representation Learning],但量化层被解码器吸收,从连续到离散,类似VQGAN(在decoder时丢弃量化层)因为后续DM的设计被用于处理学习到的潜在空间z = E(x)的二维结构,所以可以使用相对温和的压缩率并实现非常好的重构。

这与之前的工作形成了对比,之前的工作《Taming Transformers for High-Resolution Image Synthesis》(CVPR 2022)依赖于学习空间z的任意1D顺序来对其分布进行自回归建模,从而忽略了z的大部分固有结构。因此,本文的压缩模型更好地保留了x的细节

<aside> 💡

NOTE:本文LDM的潜在特征空间是通过pretrained model得到的

</aside>

Latent Diffusion Models

扩散模型是通过逐步对正态分布去噪来学习数据分布p(x)的概率模型,这对应于学习长度为T的马尔可夫链的反向过程。

Generative Modeling of Latent Representations

通过训练感知压缩模型,现在可以进入一个高效、低维的潜在空间,其中高频的、难以察觉的细节被抽象掉了。与高维像素空间相比,该空间更适合基于似然的生成模型,因为它们现在可以

  1. 专注于更重要的语义
  2. 在更低维、计算效率更高的空间训练

与以前在高度压缩、离散的潜在空间中依赖自回归、基于注意力的Transformer模型不同 ,LDM可以利用模型提供的图像特定的归纳偏差。这包括主要从2D卷积层构建底层UNet的能力,并使用重新加权的边界进一步将目标集中在与感知最相关的位置上。

模型的主干网络 εθ (◦, t) 被实现为以时间为条件条件的UNet。由于前向过程是固定的,因此可以在训练期间从 E 中高效地获得zt,并且可以通过 D 将来自 p(z) 的样本解码到图像空间。

Conditioning Mechanisms

与其他类型的生成模型类似,扩散模型原则上能够对p(z|y) 形式的条件分布进行建模。这可以通过条件去噪自编码器θ (zt, t, y)来实现,并为通过输入y(例如文本、语义图或其他图像到图像的转换)控制合成过程铺平了道路任务。

<aside> 💡

然而在图像合成背景下,将DM 的生成能力与除类别标签或输入图像的模糊版本之外的其他类型的条件相结合是迄今为止尚未充分探索的研究领域。

</aside>

为了预处理来自各种模式(例如语言提示)的 y,本文引入了特定领域的编码器τθ将 y 投影到中间表示τθ (y) ∈ RM ×dτ ,然后通过UNet 中间层的交叉注意力机制实现Attention机制

image.png

在图像条件对的基础上,我们通过

image.png

其中τθ和Eθ都是通过公式3进行联合优化的。这种条件化机制是灵活的,因为τθ可以与特定领域的专家一起参数化,例如当y是基于文本提示的Transformer。

Experiment

作者在CelebA-HQ、FFHQ、lsun - church和- bedroom上训练2562幅图像的无条件模型,并评估i)样本质量和ii)对数据集管的覆盖率,表1总结了结果。在CelebA-HQ上,LDM实现了最先进的FID为5.11,优于之前基于似然的模型和GANs。相比之下,LDM在固定空间中训练扩散模型,避免了在潜在空间上学习先验与重构质量之间权衡的困难。

景观图像的语义合成

image.png

使用LDM进行图像超分

image.png

使用LDM进行图像补全

image.png

Code

LDM:扩散模型,用于生成对应采样时间t的样本,核心代码如下:

    def p_losses(self, x_start, cond, t, noise=None):
        noise = ms.numpy.randn(x_start.shape)
        x_noisy = self.q_sample(x_start=x_start, t=t, noise=noise) // time=t时加噪后的样本
        model_output = self.apply_model(x_noisy, t, cond) // UNet预测的噪声,cond表示FrozenCLIPEmbedder生成的条件
 
        if self.parameterization == "x0":
            target = x_start
        elif self.parameterization == "eps":
            target = noise
        else:
            raise NotImplementedError()
 
        loss_simple = self.get_loss(model_output, target, mean=False).mean([1, 2, 3]) //计算预测noise与真实noise的损失值
 
        logvar_t = self.logvar[t]
        loss = loss_simple / ops.exp(logvar_t) + logvar_t
        loss = self.l_simple_weight * loss.mean()
 
        loss_vlb = self.get_loss(model_output, target, mean=False).mean((1, 2, 3))
        loss_vlb = (self.lvlb_weights[t] * loss_vlb).mean()
        loss += (self.original_elbo_weight * loss_vlb)
        
        return loss

Conclusion

本文提出了隐藏空间扩散模型,这是一种简单有效的方法,可以显著提高去噪扩散模型的训练效率和采样效率,而不降低其质量。基于这一点作者进一步和交叉注意力机制结合,在没有任务特定架构的广泛条件图像合成任务中显示出较先进的方法和更好的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值