【扩撒模型之DDPM】Denoising Diffusion Probabilistic Models论文解读

在这里插入图片描述

0 摘要

本文使用扩散概率模型合成了高质量的图像结果,扩散概率模型是一类受非平衡热力学启发的潜变量模型。本文最佳结果是通过根据扩散概率模型和朗之万动力学的去噪分数匹配之间的新颖联系设计的加权变分界进行训练来获得的,并且本文的模型自然地承认渐进式有损解压缩方案,该方案可以解释为自回归解码的推广。在 CIFAR10 和 LSUN 数据集上,本文都获得了不错的分数。

本文github链接:https://github.com/hojonathanho/diffusion.

论文连接:https://arxiv.org/abs/2006.11239

1 引言

各种深度生成模型最近在各种数据模式中展示了高质量的样本。生成对抗网络(GAN)、自回归模型、 flows 和变分自动编码器(VAE)合成了引人注目的图像和音频样本,并且基于能量的建模和评分匹配取得了显着的进步,产生了与 GAN 相当的图像。

在这里插入图片描述

扩散概率模型是使用变分推理训练的参数化马尔可夫链,以在有限时间后生成与数据匹配的样本。该链的转换被学习以逆转扩散过程,这是一个马尔可夫链,在采样的相反方向上逐渐向数据添加噪声,直到信号被破坏。当扩散包含少量高斯噪声时,将采样链转换设置为条件高斯就足够了,从而允许特别简单的神经网络参数化。
在这里插入图片描述
本文表明扩散模型能够产生高质量的样本,有时比在其他类型的生成模型上生成的结果更好。此外,本文还证明了扩散模型的某种参数化与训练过程中多个噪声水平上的去噪分数匹配采样过程中的退火朗之万动力学等价。本文使用这个参数获得了最好的样本质量结果,所以本文认为这个等价性是本文的主要贡献之一。

本文表明扩散模型的采样过程是一种渐进式解码,它类似于自回归解码的比特排序,极大地扩展了自回归模型通常可以实现的功能。

2 训练与推理

在这里插入图片描述
训练过程,其实就是不断迭代得到最佳的参数,来使推到得到的目标损失函数最小:
在这里插入图片描述
目标函数的物理意义直观理解就是:让模型输出和随机生成的噪音 距离差值最小。我们的模型的目标其实就是在生成噪音。更准确的说是在生成真实信号与标准高斯分布噪音之间多余的那部分噪音信号,我们可以通过用 标准高斯分布噪音 减去 生成的噪音信号 得到我们最后的 合成信号。

Inference 也就是上面算法右图中的Sampling 过程:用 上一轮输出的带噪音信号减去模型生成的噪音信号乘上一个系数,而第一轮的输入就是一个完完全全的标准高斯分布噪音。

3 实验

表 1 显示了 CIFAR10 的 IS 分数、FID 分数和负对数似然值(无损编码长度)。我们的 FID 得分为3.17,与文献中的大多数模型(包括类条件模型)相比,我们的无条件模型达到了更好的样本质量。按照标准做法,我们的 FID 分数是针对训练集计算的;当我们针对测试集计算时,分数为 5.24,仍然优于许多文献中的训练集 FID 分数。
在这里插入图片描述

Inception Score(IS)和Fréchet Inception Distance(FID)是用于衡量深度学习生成模型生成图像质量的指标。

  • IS结合了两个方面的评估:图像质量的期望值(Exp)和图像质量分布的分歧度(KL)
  • FID通过比较生成图像和真实图像在特征空间中的分布距离来衡量它们之间的差异,具体而言,FID使用了真实图像和生成图像在Inception网络的中间层的特征向量上的统计特性。

指标详细参考:https://www.zhihu.com/search?type=content&q=Inception%20scores

在这里插入图片描述

4 结论

本文利用扩散模型生成了高质量的图像样本,并发现了扩散模型与马尔可夫链训练的变分推理、去噪分数匹配和退火朗格文动力学(以及基于能量的扩展模型)、自回归模型和渐进有损压缩之间的联系。由于扩散模型似乎对图像数据具有极佳的归纳偏差,我们期待着研究它们在其他数据模式中的用途,以及作为其他类型生成模型和机器学习系统的组成部分。

### 基于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
发出的红包

打赏作者

AI 菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值