论文阅读_扩散模型_DDPM

英文名称: Denoising Diffusion Probabilistic Models
中文名称: 去噪扩散概率模型
论文地址: http://arxiv.org/abs/2006.11239
代码地址1: https://github.com/hojonathanho/diffusion (论文对应代码 tensorflow)
代码地址2: https://github.com/AUTOMATIC1111/stable-diffusion-webui stable-diffusion-webui/modules/models/diffusion/ddpm_edit.py (推荐 pytorch)
时间: 2020-12-16
作者: Jonathan Ho, 加州大学伯克利分校
引用量: 3286

读后感

论文优化了扩散模型的具体实现,并证明了扩散模型可生成高质量的图像。具体方法是结合扩散概率模型和朗之万动力学去噪的加权变分训练模型。

学习路径

论文中公式很多,有些依赖DM论文,VAE论文,还有跳步,虽然方法部分不长,但是很难读明白。至今看到最好的解读是:

  • The Annotated Diffusion Model(英文)
    文章除了原理,还提供了核心代码分析。

方法

扩散模型

扩散模型由加噪 q 和去噪 p 两部分组成,如图-2所示,先从右往左看下边部分加噪q,x0是原始图像,经过T步逐渐加噪变为纯高斯噪声XT(时间步常设为 T=1000),其中每一步的图像xt根据上一步的xt-1通过加少量高斯噪声得到;再看上边部分去噪pθ,它是q的逆过程,每一步通过xt得到xt-1,最终还原图像x0,p由神经网络实现,θ 是神经网络参数,最后得到的深度学习模型就是可用噪声生成真实图像的网络。

每个时间步加噪力度不同,这里 用 β 控制加噪的力度:
0 < β 1 < β 2 < . . . < β T < 1 0<\beta_1<\beta_2<...<\beta_T<1 0<β1<β2<...<βT<1
也就是说加噪的力度越来越大,这也很容易理解,加噪过程中先从小的噪声加起,在恢复图像的逆过程中,去噪越来越精细。加噪到了第T步时,图像就变成了纯噪声。

加噪过程 q 的每一步依赖上一步的图片:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q\left(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}\right)=\mathcal{N}\left(\mathbf{x}_{t} ; \sqrt{1-\beta_{t}} \mathbf{x}_{t-1}, \beta_{t} \mathbf{I}\right) q(xtxt1)=N(xt;1βt xt1,βtI)
加入高斯噪声N。它的两个参数分别是均值(根据前一时间步Xt-1的图像)和方差(小的噪声BtI)。
向后去噪的过程定义为p,理论上使用它可还原原始图像,但它相对难以实现。
p θ ( x t ∣ x t − 1 ) p_{\theta}(x_t|x_{t-1}) pθ(xtxt1)
这里的 θ 是待学习的神经网络权重。假设这个反向过程也是高斯的,也需要均值和方差。
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta (\mathbf{x}_{t-1} | \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mu_\theta(\mathbf{x}_{t},t), \Sigma_\theta (\mathbf{x}_{t},t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))
也就是说,这里需要对均值、方差建模,求取网络权重 θ,且模型是和时间步t相关的,具体操作时通过位置嵌入将 t 编码到输入数据中。DDPM论文中建议只对均值建模,将方差设为常数,这样更简单一些。

目标函数

损失函数定义为,所有时间步损失之和:
L = L 0 + L 1 + . . . + L T L=L_0+L_1+...+L_T L=L0+L1+...+LT
其中每个时间步(除了第0个时间步是原图)以外,计算的都是正向反向两个高斯分布的KL散度。

简化计算加噪过程

由于高斯分布的积累也是高斯分布,所以在加噪过程中,可以直接计算出第t步的数据,从而简化从0-t的多步计算,这里又引入了一个变量 α:
α t : = 1 − β t a n d α ˉ t : = Π s = 1 t α s \alpha_t := 1 - \beta_t\ and\ \bar{\alpha}_t := \Pi_{s=1}^{t} \alpha_s αt:=1βt and αˉt:=Πs=1tαs
两个α可视为β的函数,可以提前计算出来。使得由x0直接计算出xt,而不用逐步迭代。
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(\mathbf{x}_t | \mathbf{x}_0) = \cal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1- \bar{\alpha}_t) \mathbf{I}) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)

用预测噪声代替预测均值

另一个优化是:通过重新参数化高斯分布的均值,让神经网络从一个均值预测器变成了噪声预测器,即:让神经网络学习对图片的附加噪声建模(这里只考虑高斯分布的均值建模,先不考虑方差)。实验证明,该方法效果更好。经过数学推导,均值与噪声关系如下:
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) \mu_{\theta}\left(\mathbf{x}_{t}, t\right)=\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}-\frac{\beta_{t}}{\sqrt{1-\bar{\alpha}_{t}}} \epsilon_{\theta}\left(\mathbf{x}_{t}, t\right)\right) μθ(xt,t)=αt 1(xt1αˉt βtϵθ(xt,t))
第t步损失函数Lt如下:
∥ ϵ − ϵ θ ( x t , t ) ∥ 2 = ∥ ϵ − ϵ θ ( α ˉ t x 0 + ( 1 − α ˉ t ) ϵ , t ) ∥ 2 . \| \mathbf{\epsilon} - \mathbf{\epsilon}_\theta(\mathbf{x}_t, t) \|^2 = \| \mathbf{\epsilon} - \mathbf{\epsilon}_\theta( \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{(1- \bar{\alpha}_t) } \mathbf{\epsilon}, t) \|^2. ϵϵθ(xt,t)2=ϵϵθ(αˉt x0+(1αˉt) ϵ,t)2.
其中 ϵ 是在时间步 t 采样的噪声,εθ 是神经网络。

算法

最终求的是误差网络e的权重参数θ。

在训练过程中:

  • 抽取样本图片x0
  • 随机抽取时间步t
  • 采样高斯噪声ϵ,使用该噪声和时间步t生成第t步的加噪图像
  • 训练神经网络基于加噪图像xt和该步βt来预测噪声

在推理过程中:

  • 取一个高斯噪声做为XT图片
  • 通过T步对其进行去噪
  • 随机取z作为高斯噪声的方差参数
  • 代入上述公式,利用神经网络预测的 ϵ 为第t步图片去噪,从而得到第t-1步图片
  • 最终还原原始图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/64607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java八股文面试[数据库]——索引的基本原理、设计原则

索引的设计原则 索引覆盖是什么&#xff1a; 索引&#xff08;在MySQL中也叫做“键&#xff08;key&#xff09;”&#xff09; 是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。 索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时&#xff0c;索引…

【小沐学Unity3d】3ds Max 多维子材质编辑(Multi/Sub-object)

文章目录 1、简介2、精简材质编辑器2.1 先创建多维子材质&#xff0c;后指定它2.2 先指定标准材质&#xff0c;后自动创建多维子材质 3、Slate材质编辑器3.1 编辑器简介3.2 编辑器使用 结语 1、简介 多维子材质&#xff08;Multi/Sub-object&#xff09;是为一个模形&#xff0…

使用Vue3和Vite升级你的Vue2+Webpack项目

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

使用PAM保障开发运营安全

硬编码凭据和 DevOps 系统中缺乏凭据安全性是组织的巨大漏洞。以明文形式访问凭据的恶意内部人员可以在 IT 中建立和扩展其立足点 基础设施&#xff0c;构成巨大的数据被盗风险。 什么是PAM 特权访问管理 &#xff08;PAM&#xff09; 是指一组 IT 安全管理原则&#xff0c;可…

解决gitee仓库中 .git 文件夹过大的问题

最近&#xff0c;许多项目都迁移到gitee。使用的也越来越频繁&#xff0c;但是今天突然收到一个仓库爆满的提示。让我一脸懵逼。本文将详细为你解答&#xff0c;这种情况如何处理。 1、起因 我收到的报错如下&#xff1a; remote: Powered by GITEE.COM [GNK-6.4] remote: T…

RDMA性能优化经验浅谈

一、RDMA概述 首先我们介绍一下RDMA的一些核心概念&#xff0c;当然了&#xff0c;我并不打算写他的API以及调用方式&#xff0c;我们更多关注这些基础概念背后的硬件执行方式和原理&#xff0c;对于这些原理的理解是能够写出高性能RDMA程序的关键。 Memory Region RDMA的网…

在访问一个网页时弹出的浏览器窗口,如何用selenium 网页自动化解决?

相信大家在使用selenium做网页自动化时&#xff0c;会遇到如下这样的一个场景&#xff1a; 在你使用get访问某一个网址时&#xff0c;会在页面中弹出如上图所示的弹出框。 首先想到是利用Alert类来处理它。 然而&#xff0c;很不幸&#xff0c;Alert类处理的结果就是没有结果…

ModaHub魔搭社区:自动化机器学习神器Auto-Sklearn

Auto-Sklearn Auto-Sklearn是一个开源库,用于在 Python 中执行 AutoML。它利用流行的 Scikit-Learn 机器学习库进行数据转换和机器学习算法。 它是由Matthias Feurer等人开发的。并在他们 2015 年题为“efficient and robust automated machine learning 高效且稳健的自动…

YOLOv7框架解析

YOLOv7概念 YOLOv7是基于YOLO系列的目标检测算法&#xff0c;由Ultra-Light-Fast-Detection&#xff08;ULFD&#xff09;和Scaled-YOLOv4两种算法结合而来。它是一种高效、准确的目标检测算法&#xff0c;具有以下特点&#xff1a; 1. 高效&#xff1a;YOLOv7在保持准确率的…

说说TIME_WAIT和CLOSE_WAIT区别

分析&回答 TCP协议规定&#xff0c;对于已经建立的连接&#xff0c;网络双方要进行四次握手才能成功断开连接&#xff0c;如果缺少了其中某个步骤&#xff0c;将会使连接处于假死状态&#xff0c;连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接&#xf…

MySQL索引和查询优化

文章目录 1.Mysql索引2. b- tree 与 b tree3.覆盖索引和回表查询4.查询优化1.Explain 5.优化实战举例**用户搜索****订单查询****分页查询** 1.Mysql索引 MySQL索引是一种用于提高数据库查询效率的数据结构。它可以加快数据检索的速度&#xff0c;减少查询所需的IO操作和计算…

leetcode 1365. 有多少小于当前数字的数字

2023.9.2 本题直观的解法就是双层for循环暴力求解&#xff1a; 暴力解&#xff1a; class Solution { public:vector<int> smallerNumbersThanCurrent(vector<int>& nums) {vector<int> ans;for(int i0; i<nums.size(); i){int temp 0;//比当前元素…

浅谈安防视频监控平台EasyCVR视频汇聚平台对于夏季可视化智能溺水安全告警平台的重要性

每年夏天都是溺水事故高发的时期&#xff0c;许多未成年人喜欢在有水源的地方嬉戏&#xff0c;这导致了悲剧的发生。常见的溺水事故发生地包括水库、水坑、池塘、河流、溪边和海边等场所。 为了加强溺水风险的提示和预警&#xff0c;完善各类安全防护设施&#xff0c;并及时发现…

解决 git clone 时出现Failed to connect to 127.0.0.1 port 1573问题

今天去拉一个仓库代码&#xff0c;往常都是一下就拉下来了&#xff0c;今天却报错&#xff0c;报错信息如下&#xff1a; 原因&#xff1a;这种情况是因为代理在git中配置的&#xff0c;但是本身环境就有SSL协议了&#xff0c;所以取消git的https或者http代理即可 方法如下&…

LeetCode-455-分发饼干-贪心算法

题目描述&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff…

SpringBoot整合Redis使用

目录 1、redis介绍2、redis五种数据类型2.1 String&#xff08;字符串&#xff09;2.2 List&#xff08;列表&#xff09;2.3 Set&#xff08;集合&#xff09;元素唯一不重复2.3 Hash&#xff08;哈希&#xff09;2.4 zSet&#xff08;有序集合&#xff09; 3、SpringBoot整合…

Ros noetic 机器人坐标记录运动路径和发布 实战教程(A)

前言: 网上记录Path的写入文件看了一下还挺多的,有用yaml作为载体文件,也有用csv文件的路径信息,也有用txt来记录当前生成的路径信息,载体不重要,反正都是记录的方式,本文主要按yaml的方式写入,后文中将补全其余两种方式。 其中两种方式的主要区别在于,加载yaml所需要…

2、[春秋云镜]CVE-2022-30887

文章目录 一、靶标介绍二、复现过程 一、靶标介绍 二、复现过程 &#xff08;1&#xff09;打开网址。 &#xff08;2&#xff09;查看源代码 邮件格式&#xff1a;第一个符号不准为&#xff0c;后续符号有、.&#xff1b; 密码格式&#xff1a;匹配所有小写字母&#xff0c…

JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白

问题1: JasperReport打印出来的整个pdf文件为空白文件&#xff1b; 问题2&#xff1a;JasperReport定义变量后打印PDF变量为null&#xff1b; 问题1原因是因为缺少数据源JRDataSource JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印…

Ansible自动化运维之playbooks剧本

文章目录 一.playbooks介绍1.playbooks简述2.playbooks剧本格式3.playbooks组成部分4.运行playbooks及检测文件配置 二.模块实战实例1.playbooks模块实战实例2.vars模块实战实例3.指定远程主机sudo切换用户4.when模块实战实例5.with_items迭代模块实战实例6.Templates 模块实战…