021_SSSS_Diffusion Models Already Have a Semantic Latent Space

本文介绍了一种在Diffusion模型中实现可控语义编辑的方法,通过引入非对称反向过程(Asyrp)及h-space,能够在不改变原有模型的基础上实现高质量的图像编辑。

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

Diffusion Models Already Have a Semantic Latent Space

1. Introduction

本文指出,现有的Diffusion模型可以在不同的领域有出色的表现,但是缺少可以控制其生成过程的语义隐空间(Semantic Latent Sapce)。本文提出了非对称的反向过程(Asymmetric reverse process,Asyrp),拥有可以控制的隐式语义空间,称作h-sapce。并且本文提出了一种新方法,可以达到versatile editing和quality boosting。

在这里插入图片描述

首先来看一下现有的diffusion图像编辑方法及其缺陷。图中(a)部分利用图像引导生成过程,但是这种方法很容易导致生成没有意义的结果。(b)部分利用额外引入的分类器来实现引导图像的生成,但是这种方法需要额外训练一个分类网络,而且通常会降低生成的质量,而且会改变生成的内容。(c)部分的DiffusionCLIP则需要对整个diffusion模型进行微调,代价比较大。(d)部分是本文的方法,可以在不改变训练好的Diffusion的基础上实现语义的编辑。

本文的主要贡献:
(1)提出了Asyrp,非对称的反向过程,可以对训练好的Diffusion模型的隐空间进行语义编辑。
(2)在这个隐式的语义空间h-space中,对不同的图像的隐变量做相同的shift可以达到相同语义的编辑效果。
(3)实验证明本文的方法在现有的DDPM++,IDDPM,ADM等Diffusion模型和不同的数据集上都可以达到需要的效果。

2. Methodology

首先来回顾一下DDIM的设计:

在这里插入图片描述

作者对这个式子的表示做了一些简化,用 Pt(ϵtθ(xt))P_t(\epsilon^{\theta}_t (x_t))Pt(ϵtθ(xt)) 来表示对于 x0x_0x0 预测的部分predict,用 Dt(ϵtθ(xt))D_t(\epsilon^{\theta}_t (x_t))Dt(ϵtθ(xt)) 来表示对于 x0x_0x0 的方向进行修正的部分。

在这里插入图片描述

由于Diffusion利用网络输出的结果是每一步的噪声 ϵtθ\epsilon^{\theta}_tϵtθ 这个噪声也可以看作是一种从 xtx_txtx0x_0x0 的方向信息。那么一种很直观的思路就是直接对Diffusion模型中利用神经网络输出的 ϵtθ\epsilon^{\theta}_tϵtθ 进行修正。

但是直接把这种修正的思路用在反向过程中,并不能达到很好的效果。因为 PtP_tPtDtD_tDt 两部分中 ϵtθ\epsilon^{\theta}_tϵtθ 的改变会相互抵消。作者用一个Theorem来描述这种情况。

在这里插入图片描述

证明过程如下:
在这里插入图片描述

以1000步的DDPM为例,β\betaβ线性的从0.0001增大到0.02,分别取DDIM的 η=0\eta = 0η=0η=1.0\eta = 1.0η=1.0。当 η=1.0\eta = 1.0η=1.0 也就对应于DDPM的采样过程。把 △ϵ\triangle \epsilonϵ 前的参数输出可视化:

在这里插入图片描述

在这里插入图片描述

从图中可以看出,这个参数基本上是 10−2∼10−310^{-2} \sim 10^{-3}102103 数量级的。作者额外补充了实验证明这一点, 如图所示,(a)中的是利用原始DDIM采样得到的结果,而(b)中则是对 PtP_tPtDtD_tDt 中的 ϵtθ\epsilon^{\theta}_tϵtθ 同时加上一个随机的扰动 zzz,即 ϵ~tθ=ϵtθ+z\tilde{\epsilon}^{\theta}_t = \epsilon^{\theta}_t + zϵ~tθ=ϵtθ+z 采样得到的结果,可以看出二者几乎一样。

在这里插入图片描述

2.1 Asymmetric Reverse Process

为了解决上面提到的两相抵消的问题,作者提出了非对称的反向过程,也就是只在 PtP_tPt 部分加入对 ϵtθ\epsilon^{\theta}_tϵtθ 的调整信息 △ϵ\triangle \epsilonϵϵ~tθ=ϵtθ+△ϵ\tilde{\epsilon}^{\theta}_t = \epsilon^{\theta}_t + \triangle \epsilonϵ~tθ=ϵtθ+ϵ

在这里插入图片描述

同时,为了达到编辑图像的效果,作者用CLIP loss来约束额外加入的调整信息 △ϵ\triangle \epsilonϵ

在这里插入图片描述

其中 PteditP_t^{edit}Ptedit 表示加入了 △ϵ\triangle \epsilonϵ 预测得到的 x0x_0x0, 而 PtsourceP_t^{source}Ptsource 表示未加入 △ϵ\triangle \epsilonϵ (也即按照原始DDIM)得到的预测的 x0x_0x0。相应的CLIP loss就是在约束这二者的差别要和文本 yref,ysourcey^{ref}, y^{source}yref,ysource 对应的差别要一致。同时,为了避免图像在想要编辑的内容之外有太大的变动,在CLIP loss之外加入了对于图像内容保持的损失。

2.2 h-space

考虑到现有的几乎所有的Diffusion模型都用了UNet的结构,为了降低输入的规模,提高效率,同时在提高编辑的质量。作者不在 ϵtθ\epsilon^{\theta}_tϵtθ 的原始空间做语义的编辑,而是在UNet的bottle-neck,也就是最深层的特征 hth_tht 来进行编辑。这个空间称作 h-space

在这里插入图片描述

这样的设计有如下优点:

在这里插入图片描述

2.3 Implicit Neural Directions

这个部分很简单,也就是说,作者用一个简单的网络 ftf_tft 接受bottle-neck feature hth_tht 和 时间步 ttt 作为输入,得到每一步需要的 △ht\triangle h_tht。于是 Ptedit=Pt(ϵtθ(xt∣ft))P_t^{edit} = P_t (\epsilon_t^{\theta}(x_t | f_t))Ptedit=Pt(ϵtθ(xtft))

这个简单的网络可以不在所有的时间步上进行训练,而是在DDIM挑好的简化的步数上进行训练,从而降低训练时间。

3. Generative Process Design

这个部分将上一部分作者提出的编辑方法如何在实际的Diffusion模型中应用做了系统的描述。本文的方法主要是针对预训练好的Diffusion模型的反向采样过程进行改动,现有的Diffusion模型反向采样过程可以再early stage得到high-level context而在later stage得到fine details。因此作者将其分成三个阶段:
(1)在第一个阶段 [T,tedit][T, t_{edit}][T,tedit] 利用Asyrp进行编辑;
(2)第二阶段 [tedit,tboost][t_{edit}, t_{boost}][tedit,tboost] 则是用DDIM的采样方法,但是 η=0\eta = 0η=0 ,这样可以保持图像的内容尽可能保持不变;
(3)第三阶段 [tboost,0][t_{boost}, 0][tboost0] 则是用DDIM的采样方法,但是 η=1\eta = 1η=1 ,这样可以提高得到的最终结果的质量;

在这里插入图片描述

那么现在的问题就是如何确定两个分界点 tedit,tboostt_{edit}, t_{boost}tedit,tboost

在这里插入图片描述

作者利用LPIPS来衡量editing strength和quality deficiency,从而达到既能够达到很好的编辑效果,又不会导致图像质量下降太多。

对于 teditt_{edit}tedit,作者设计 teditt_{edit}tedit 能够使得 LPIPS(x,Ptedit)=0.33LPIPS(x, P_{t_{edit}}) = 0.33LPIPS(x,Ptedit)=0.33, 这样可以有最小的editing interval,同时有足够强的editing strength。同时为了使得这个 teditt_{edit}tedit 可以适用于多种地方,作者加入了基于CLIP的cosine距离项,LPIPS(x,Ptedit)=0.33−δLPIPS(x, P_{t_{edit}}) = 0.33 - \deltaLPIPS(x,Ptedit)=0.33δ 其中 δ=0.33d(ET(ysource),ET(ytarget))\delta = 0.33 d(E_T(y_{source}), E_T(y_{target}))δ=0.33d(ET(ysource),ET(ytarget))ddd就表示两者的cosine距离。

对于 tboostt_{boost}tboost,作者设计 LPIPS(x,xt)=1.2LPIPS(x, x_t) = 1.2LPIPS(x,xt)=1.2 即为 tboostt_{boost}tboost

4. Experiments

图像编辑效果
在这里插入图片描述

h-space的线性性质
在这里插入图片描述

更多实验结果见原文。

### 基于Denoising Diffusion Probabilistic Models (DDPM) 的RePaint Inpainting 技术复现 #### 方法概述 RePaint 是一种基于去噪扩散概率模型(DDPM)的图像修复技术,其核心思想是通过条件化的扩散过程来生成缺失区域的内容。该方法利用已知区域的信息作为条件输入,并通过对噪声逐步去除的方式恢复完整的图像[^2]。 为了实现 RePaint Inpainting 技术的复现,可以按照以下思路构建: --- #### 数据准备 在训练过程中,需要准备好带有随机遮罩的图像数据集。这些遮罩可以采用多种形式,例如矩形、自由绘制的笔刷形状或其他复杂模式。具体来说: - 使用公开的数据集(如 CelebA 或 ImageNet),并为其添加人工合成的遮罩。 - 遮罩的设计应多样化,以便模型能够适应不同的场景和复杂的遮挡情况[^3]。 --- #### 扩散模型架构 扩散模型的核心在于定义前向扩散过程和反向生成过程。以下是具体的实现细节: 1. **前向扩散过程** 定义一个逐渐增加噪声的过程 \( q(x_t|x_0) \),其中 \( t \) 表示时间步长。此过程可以通过高斯噪声逐层叠加完成: \[ q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1},\beta_t I) \] 这里的参数 \( \beta_t \) 控制每一步加入的噪声量[^1]。 2. **反向生成过程** 反向生成的目标是从纯噪声中重建原始图像。这一过程由神经网络学习得到,通常表示为: \[ p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t,t), \sigma_t^2I) \] 其中,\( \mu_\theta(x_t,t) \) 是通过 U-Net 结构预测的均值函数。 --- #### 条件化策略 为了让扩散模型专注于修复被遮盖的部分,需引入条件化机制。具体做法如下: - 将遮罩后的图像 \( x_m \) 和对应的二值遮罩矩阵 \( m \) 输入到模型中。 - 修改损失函数以仅关注未知区域的像素误差。即,在计算重构误差时忽略已知区域的影响: \[ L(\theta) = \sum_{i=1}^{T}\|m_i \odot (\hat{x}_i - x_i)\|^2 \] 此处 \( m_i \) 表示第 \( i \)-th 时间步上的遮罩矩阵。 --- #### 训练与推理流程 1. **训练阶段** - 构造带遮罩的图像对 \( (x_m, m) \) 并将其送入 DDPM 中进行端到端优化。 - 调整超参数(如噪声调度表 \( \beta_t \))、批次大小以及总迭代次数以获得最佳性能。 2. **推理阶段** 给定一张含有缺失区域的新图像及其对应遮罩,执行以下操作: - 初始化全白噪声图作为起始状态; - 按照预训练好的逆采样路径逐步减少噪声直至最终输出清晰的结果。 ```python import torch from torchvision import transforms from diffusers.models.unet_2d_condition import UNet2DConditionModel def inpaint_with_repaint(image_tensor, mask_tensor, model_path): """ Perform inpainting using Repaint method. Args: image_tensor (torch.Tensor): Input masked image tensor of shape [C,H,W]. mask_tensor (torch.Tensor): Binary mask tensor indicating missing regions. model_path (str): Path to pre-trained diffusion model checkpoint. Returns: torch.Tensor: Restored full-image tensor. """ device = 'cuda' if torch.cuda.is_available() else 'cpu' # Load pretrained denoising diffusion probabilistic model unet_model = UNet2DConditionModel.from_pretrained(model_path).to(device) # Define noise scheduler and other hyperparameters here... beta_schedule = ... # Example: linear or cosine schedule noisy_image = add_noise_to_image(image_tensor.clone(), beta_schedule[-1]) * (1-mask_tensor) + image_tensor*mask_tensor restored_image = reverse_diffusion_process(noisy_image=noisy_image, condition=image_tensor, mask=mask_tensor, steps=len(beta_schedule), model=unet_model) return restored_image.clamp(0., 1.) # Helper functions omitted for brevity but should include `add_noise_to_image` & `reverse_diffusion_process`. ``` 上述代码片段展示了一个简化版本的 RePaint 推理逻辑框架,实际应用还需补充更多细节配置。 --- #### 性能评估指标 针对生成质量可选用 SSIM、PSNR 等传统度量标准外加感知相似性得分 FID(Fréchet Inception Distance)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值