Latent Diffusion 论文笔记

这篇博客深入解析了Latent Diffusion模型,介绍了其结构,包括自编码器与Diffusion模型的联合训练、基于LPIPS的压缩与感知损失、VQ方法的应用以及优化目标。模型通过联合学习和自编码器的VQ层实现了高分辨率图像的高效生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Latent Diffusion 论文笔记

论文:

High-Resolution Image Synthesis with Latent Diffusion Models

https://arxiv.org/abs/2112.10752

https://github.com/CompVis/latent-diffusion

模型结构

在这里插入图片描述

简单来说,就是先用一个编码器 E \mathcal{E} E 把图片压缩到隐空间( H × W × 3 → h × w × c H\times W\times3\to h\times w\times c H×W×3h×w×c ),然后让 Diffusion 模型 ϵ θ \epsilon_\theta ϵθ 在压缩后的特征上工作,最后用解码器 D \mathcal{D} D 还原成一个图片。

训练分成两个阶段,先训练自编码器,再训练 Diffusion 。

训练自编码器的时候用 LPIPS 做约束。

自编码器实际上是 VQ-VAE ,只是 VQ 层放到了解码器里。也就是说, Diffusion 阶段操作的是 VQ 前的隐空间特征。

根据论文的描述,编码器和解码器应该是卷积结构,没有注意力层的,只有 UNet 里面有注意力层。

可以看到 diffusion 的这部分使用了 UNet 架构,并且结合了 cross-attention

他提到 ϵ θ \epsilon_\theta ϵθ 中的 cross-attention 层的 K 和 V 是由 τ θ \tau_\theta τθ 产生的,Q 是由 z T z_T zT 产生的

训练时 ϵ θ \epsilon_\theta ϵθ τ θ \tau_\theta τθ 是联合学习的

基于感知损失的图像压缩

压缩就是一个编码器一个解码器,编码器把图像映射到隐空间的特征,解码器把特征映射为图像

注意图像是 H × W × 3 H\times W\times3 H×W×3 的,特征是 h × w × c h\times w\times c h×w×c

我们的感知压缩模型是基于以前的工作,包括一个由感知损失和基于补丁的对抗性目标组合训练的自动编码器。

他的感知损失就是指 LPIPS
patch-based 应该是指 PatchGAN 对抗损失吧。

也就是说,自编码器用了两个损失,一个是LPIPS感知损失,一个是 patch-based 对抗损失。

两阶段图像合成

两阶段应该指的就是,压缩性学习和生成性学习分开。

他们尝试了两种对隐空间的约束,一种是用 KL 散度约束到正态分布(就和 VAE 一样),一种是 VQ 方法(和VQ-GAN 一样,只是量化层放到了 decoder 里)

他们发现使用 VQ 方法更好

应该就是说,他们的编码器和解码器之间用了一个 VQ 层

他提到,自回归需要较大的运算量,由此会导致特征空间维数必须较少,由此会导致编码器和解码器需要更多的参数去拟合先验(数十亿参数)

为了减少运算量,同时减少特征对原图像的压缩率(也就是增加特征维数),他们的自编码器使用卷积作为backbone

优化目标

自编码器的优化:

似乎就是用 LPIPS 用来衡量重建损失,以此训练一个带 VQ 层的自编码器。

Diffusion 模型的优化目标:

L L D M : = E E ( x ) , y , ϵ ∼ N ( 0 , 1 ) , t [ ∥ ϵ − ϵ θ ( z t , t , τ θ ( y ) ) ∥ 2 2 ] L_{LDM} := \mathbb{E} _{\mathcal{E}(x),y,\epsilon∼\mathcal{N}(0,1),t} \left[\left \| \epsilon − \epsilon_\theta(z_t, t, \tau_\theta(y)) \right\|^2_2\right] LLDM:=EE(x),y,ϵN(0,1),t[ϵϵθ(zt,t,τθ(y))22]

看起来和原版的 Diffusion Model 挺像的,只是多了个 τ θ \tau_\theta τθ 函数。

注意 ϵ θ \epsilon_\theta ϵθ 是工作在隐空间中的,这意味着 z t z_t zt 是隐空间中的特征, ϵ θ \epsilon_\theta ϵθ 的输出也是隐空间中的特征,训练也是在隐空间中发生的。

其中 τ θ \tau_\theta τθ 是一个转换器,将(多模态的)监督信号 y y y 转换为隐空间中的监督信号,是一个需要学习的模型。根据不同模态的 y y y 可以设计不同的 τ θ \tau_\theta τθ

训练时 ϵ θ \epsilon_\theta ϵθ τ θ \tau_\theta τθ 是联合学习的

### Stable Diffusion 论文解读与总结 #### 背景介绍 Stable Diffusion 是一种基于扩散模型(Diffusion Models)的图像生成技术,其核心在于通过逐步去除噪声来生成高质量的图像。为了理解 Stable Diffusion 的原理及其背后的机制,需要先了解一些基础知识,例如编码器的工作方式以及潜在扩散模型(Latent Diffusion Models, LDMs)的概念[^1]。 #### 早期工作与发展 在深入研究 Stable Diffusion 前,回顾其早期发展是非常重要的。最初的理论框架建立在变分自编码器(VAE)、条件生成对抗网络(cGAN),以及其他生成模型的基础上。这些模型为后来的扩散模型奠定了坚实的基础。特别是 VAE 和 CLIP 文本编码器的设计理念,在 Stable Diffusion 中得到了进一步扩展和应用[^3]。 #### 核心组件解析 Stable Diffusion 主要由以下几个部分组成: 1. **VAE (Variational Autoencoder)** 变分自编码器用于将高维像素空间映射到低维潜空间,从而减少计算复杂度并提高效率。这一过程使得模型能够在较低维度的空间中操作,同时保留足够的信息以重建原始图像[^3]。 2. **CLIP Text Encoder** CLIP 模型负责处理输入文本提示,并将其转换成可以指导 U-Net 进行图像生成的嵌入向量。这种跨模态的能力使 Stable Diffusion 不仅能够生成视觉内容,还能根据自然语言描述调整输出风格[^3]。 3. **U-Net 结构** U-Net 是一个经典的卷积神经网络架构,广泛应用于医学影像分析等领域。在 Stable Diffusion 中,它被用来执行去噪任务,即从含噪数据中恢复清晰的目标图像。具体来说,U-Net 接收来自 CLIP 编码器的条件信号以及当前迭代阶段的状态作为输入,最终输出经过改进后的特征表示。 4. **加噪与去噪流程** 扩散模型的核心思想是模拟物理系统的热力学行为:首先对初始干净样本施加随机扰动形成一系列中间状态;随后训练一个逆向过程学习如何逆转此变化直至完全还原原貌。这种方法具有较强的泛化能力,适用于多种类型的媒体创作场景[^3]。 #### 技术优势与挑战 相比传统 GAN 方法可能存在的模式崩溃问题,扩散模型展现出更好的稳定性表现。然而,由于涉及大量连续采样步骤,整体运行时间相对较长也是一个不可忽视的因素。针对这一点,《High-Resolution Image Synthesis with Latent Diffusion Models》提出了利用隐变量加速收敛速度的新思路,显著提升了实际部署中的用户体验[^2]。 ```python import torch from diffusers import StableDiffusionPipeline model_id = "runwayml/stable-diffusion-v1-5" pipe = StableDiffusionPipeline.from_pretrained(model_id) prompt = "A beautiful landscape painting under the sunset." image = pipe(prompt).images[0] image.save("output_image.png") ``` 以上代码片段展示了如何加载预训练好的 Stable Diffusion 模型并通过简单的 API 调用完成定制化的艺术作品生成任务。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值