Stable Diffusion核心算法DDPM解析

DDPM:Denoising Diffusion Probabilistic Model,去噪扩散概率模型

本文参考:一个视频看懂扩散模型DDPM原理推导|AI绘画底层模型_哔哩哔哩_bilibili

1、大概原理

从右往左x_0\rightarrow x_T为正向加噪过程,从左往右x_t\rightarrow x_0为逆向降噪过程。

在正向过程中不断加噪,经过T次之后得到x_T,我们希望x_T\sim N(0,1)

这样在推理过程中,我们可以从N(0,1) 随机取出x_T{'}(加‘ 表明这个是新值)。

如果我们能学得x_t\rightarrow x_{t-1}的降噪方法,就可以最终通过x_T{'}\rightarrow x_0{'}的新图片。

2、扩散模型的降噪方法预测什么

现在就是需要学x_t\rightarrow x_{t-1}的降噪方法,DDPM算法不是直接学预测x_{t-1}值的方法,而是预测x_{t-1}的条件概率分布p(x_{t-1}|x_t),然后从分布中取值得到x_{t-1}的值。此方法类似于deepar预测方法,预测的是分布而不是值。

那么为什么去预测分布而不是确切的x_{t-1}的值?

因为有了分布之后就可以采样取出x_{t-1}{'},模型就有了随机性。

进一步,假如得到p(x_{t-2}|x_{t-1}),就可以抽样得到x_{t-2}{'},这样一步步下去就可以从x_T{'}\rightarrow x_0{'}。所以,我们要学习的是p的分布,而不是确切的某张图。

结论:学习过程全程是在预测分布p

后续我们会看到模型在预测噪音,这个噪音不是x_tx_{t-1}之间的噪音,而是正态分布p中的\mu计算时涉及到的噪音\varepsilon

所以,我们通过预测\varepsilon得到\mu,进而得到p。也验证了我们的结论,即:学习过程全程是在预测分布p

3、条件概率分布的拆解

公式1p(x_{t-1}|x_t)=\frac{p(x_t|x_{t-1})\cdot p(x_{t-1})}{p(x_t)},根据贝叶斯公式对最初的条件概率分布进行了转换,新得到的算式包含了3个概率分布。

(1)第1个p的计算

第1个p为:p(x_t|x_{t-1})

x_{t-1}x_t为加躁过程中的概率分布,因为加躁过程是事先定义的,所以概率分布p也是可以被定义的。

现在我们定义加躁过程如下:

公式2x_t=\sqrt{\alpha _t}\cdot x_{t-1} + \sqrt{\beta_t}\varepsilon _t,其中\varepsilon _t\sim N(0,1)的噪音,\beta_t=1-\alpha_t

因为\varepsilon _t\sim N(0,1),所以\sqrt{\beta_t} \varepsilon_t \sim N(0, \beta_t)。(ps:方差需要取平方)

可以看出\beta_t为噪音的方差,它需要非常小接近0。只有加的噪音很小,前向、后向才是服从正态分布的。

进一步推导,x_t \sim N(\sqrt{\alpha_t} \cdot x_{t-1}, \beta_t),即:

公式3:p(x_t|x_{t-1}) \sim N(\sqrt{\alpha_t} \cdot x_{t-1}, \beta_t)

(2)第3个p的计算

第3个p为:p(x_t),它和第2个p是类似的。如果找到一个的计算方法,那么另一个也可以类似得到。

上一步我们得到每一步加躁过程的公式2,以及每一步加躁的条件概率分布公式3。

针对加躁过程,x_0 \rightarrow x_t \rightarrow \cdots \rightarrow x_{t-1} \rightarrow x_t,所以理论上可以用x_0来推导出x_t

对公式1进行改造:

公式4:p(x_{t-1}|x_t,x_0)=\frac{p(x_t|x_{t-1},x_0)\cdot p(x_{t-1}|x_0)}{p(x_t|x_0)}

因为加躁过程是马尔可夫过程,所以p(x_t|x_{t-1},x_0)只跟前一步有关,和再前一步无关,即和x_0也无关,所以p(x_t|x_{t-1},x_0)=p(x_t|x_{t-1})

p(x_t|x_0)是从x_0一步步得到x_t,所以不能再做简化。进而,公式4简化为:

公式5p(x_{t-1}|x_t,x_0)=\frac{p(x_t|x_{t-1})\cdot p(x_{t-1}|x_0)}{p(x_t|x_0)}

现在重新开始计算新的第3个p的值,从公式2开始推导如下(ps:括号表示其中含有部分参数但是未写出来,省略不重要的信息):

x_t=\sqrt{\alpha_t} \cdot x_{t-1} + \sqrt{\beta_t} \cdot \varepsilon_t \\ =\sqrt{\alpha_t}(\sqrt{\alpha_{t-1}} \cdot x_{t-2}+\sqrt{\beta_{t-1} }\cdot \varepsilon_{t-1}) + \sqrt{\beta_t} \cdot \varepsilon_t \\ = \cdots \\ =\sqrt{\alpha_t \cdots \alpha_1} \cdot x_0 + ()\varepsilon_t + \cdots + ()\varepsilon_2 + ()\varepsilon_1 \\ = \sqrt{\alpha_t \cdots \alpha_1} \cdot x_0 + ()\varepsilon

最后,经过不严谨的推导我们给出官方结果:

公式6p(x_t|x_0) \sim N(\sqrt{\bar{\alpha_t}} \cdot x_0, (1- \bar{\alpha_t}) \cdot \varepsilon_t ^{2}),其中\bar{\alpha_t} = \alpha_t \cdots \alpha_0表示连乘。

(3)扩散公式求解

上一步求得p(x_t|x_0),那么也可以类似求得p(x_{t-1}|x_0)

直接给出公式4的官方结果:

公式7p(x_{t-1}|x_t, x_0) \sim N(\bar \mu (x_0,x_t), \tilde{\beta_t})

其中\tilde{\beta_t}是超参,\bar{\mu} (x_0,x_t)的公式见如下:

公式8\bar{\mu }(x_0,x_t)=\frac{\sqrt{\bar{\alpha_{t-1}}} \cdot \beta_t}{1-\bar{\alpha_t}} \cdot x_0 + \frac{\sqrt{\alpha_t} \cdot(1-\bar{\alpha_{t-1}})}{1-\bar{\alpha_t}} \cdot x_t

因为\tilde{\beta_t}固定,所以求p(x_{t-1}|x_t,x_0)的任务就变成了求\bar{\mu} (x_0,x_t)

如果有了\bar{\mu }(x_0,x_t),那么根据如下公式可以得到预测的推理值:

公式9x_{t-1}=\bar{\mu }(x_0, x_t)+ \sqrt{\tilde{\beta_t}} \cdot \varepsilon _t\varepsilon _t \sim N(0,1)

如果直接根据公式7从p(x_{t-1}|x_t,x_0)中取出一个x_{t-1},该过程是不可导的(直接通过python包输入均值、方差取值的方式),那么逆向过程有问题,所以通过重参数技巧转换为公式9这样一个可求导的公式来表达x_{t-1}

在推理阶段x_0就是我们最终想要的值,该值未知,所以需要转换为已知因子的公式。

公式6经过重参数技巧转换后如下:

公式10x_t=\sqrt{\bar{\alpha_t}} \cdot x_0 + \sqrt{1-\bar{\alpha_t}} \cdot \varepsilon _t,进而得到:

公式11x_0=\frac{1}{\sqrt{\bar{\alpha_t}}}(x_t - \sqrt{1-\bar{\alpha_t}} \cdot \varepsilon _t),这其中的t为当前加噪阶段数,会变化。同时,这个x_0是中间过程的参数值,不可以作为最终的预测值,因为推理的p过程需要遵循马尔可夫过程,所以必须一步步推导到x_0

在公式7中,未知值是\bar{\mu} (x_0,x_t),而该值中的未知值是x_0,而x_0中的未知值是\varepsilon _t,该值无法通过现有公式计算推导得到

于是我们借助UNet网络,输入x_t,输出\varepsilon _t

将公式11代入公式8,可得到:

公式12\bar{\mu }(x_0, x_t)=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha_t}}} \cdot \varepsilon_t),公式中除了\varepsilon其他均为已知。

\varepsilon是通过UNet网络预测出来的,可以表示为\varepsilon _\theta (x_t, t)\theta为UNet模型参数。

*************扩散模型通过UNet网络得到预测图像的过程**************

UNet \rightarrow \varepsilon _t \rightarrow x_0 -> \bar{\mu }(x_0,x_t) \rightarrow p(x_{t-1}|x_t,x_0) \rightarrow x_{t-1}{'} \rightarrow \cdots \rightarrow x_0{'}

以上就是扩散模型DDPM最重要的逻辑

4、模型训练

根据公式12可知,UNet网络训练的是正态分布的噪音\varepsilon

问题1:模型训练时的输入输出?

答案:输入x_t,输出\varepsilon _t

问题2:那么哪个过程进行UNet网络参数的训练呢?

答案:加噪过程。加噪过程是训练阶段,降噪过程是推理阶段。

根据公式2可知,加噪过程的噪音是实现定义好的,所以我们可以比较预测的噪音\hat{\varepsilon }和真实\varepsilon的KL散度计算loss值,在官方说明中KL散度公式一通推导后可简化为计算这两个值的mse值。

问题3:训练时是否正向一步步推导的?

答案:不需要。在训练过程中,根据公式10 x_t=\sqrt{\bar{\alpha_t}} \cdot x_0 + \sqrt{1-\bar{\alpha_t}} \cdot \varepsilon _t可知,x_t可以通过\bar{\alpha_t}x_0\varepsilon _tt 这4个值计算得到。

\bar{\alpha_t}可以提前计算好放在内存中,x_0就是输入输入的图片集,\varepsilon _t就是输入的噪音,t是加噪阶段数。

所以正向中每一步皆可直接获取x_t值。

5、训练和推理的伪代码实现

(1)训练阶段

解读:

q(x_0)表示从数据集中取出图片

Uniform(\left \{1,...,T \right \})表示随机抽取一个加噪阶段数,如之前所述,加噪过程不需要一步步来。

\sqrt{\bar{\alpha_t}} \cdot x_0 + \sqrt{1-\bar{\alpha_t}} \cdot \varepsilon _tx_t

(2)推理阶段

 

 解读:

for t=T,...,1 do 表示逆向过程需要一步步来的。

第4步的复杂计算对应公式9,计算中的第一个公式对应公式12。

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

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

相关文章

Ubuntu发布java版本

1、连接服务器 2、进入目录 cd /usr/safety/app/3、上传jar文件 4、杀掉原java进程 1. 查看当前java进程 2. ps -ef|grep java 3. ycmachine:/usr/safety/app$ ps -ef|grep java root 430007 1 6 01:11 pts/0 00:02:45 /usr/local/java/jdk1.8.0_341/bin/j…

【LeetCode】205. 同构字符串

205. 同构字符串(简单) 方法:哈希映射 思路 判断两个字符串是不是同构字符串,只需要判断对应的字符是不是存在映射关系,我们可以使用 map 来保存字符间的映射关系。由于 “不同字符不能映射到同一个字符上&#xff0…

Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/appium‘

在使用npm uninstall -g appium卸载appium的过程中报错 Error: EACCES: permission denied, rename /usr/local/lib/node_modules/appium -> /usr/local/lib/node_modules/.appium-cfBVovI6 npm ERR! code EACCES npm ERR! syscall rename npm ERR! path /usr/local/lib/n…

智能报警系统:利用人工智能保障安全和及时应对危险

引言:随着人工智能的快速发展,智能报警系统成为了一种高效、及时应对危险和保障安全的重要工具。通过分析监控视频中的图像、声音以及其他传感器数据,人工智能可以自动检测和识别火灾、破坏、烟雾、异常温度等情况,并及时触发报警…

Python学习笔记_基础篇(十一)_socket编程

python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行…

虚拟拍摄,如何用stable diffusion制作自己的形象照?

最近收到了某活动的嘉宾邀请,我将分享: 主题:生成式人工智能的创新实践 简要描述:从品牌营销、智能体、数字内容创作、下一代社区范式等方面,分享LLM与图像等生成式模型的落地应用与实践经验。 领域/研究方向&#xff…

Zookeeper进阶篇 - Paxos协议算法、ZBA协议算法原理、Leader选举原理

Zookeeper底层原理篇,​让学习绚丽多彩起来!!!

Go语言GIN框架安装与入门

Go语言GIN框架安装与入门 文章目录 Go语言GIN框架安装与入门1. 创建配置环境2. 配置环境3. 下载最新版本Gin4. 编写第一个接口5. 静态页面和资源文件加载6. 各种传参方式6.1 URL传参6.2 路由形式传参6.3 前端给后端传递JSON格式6.4 表单形式传参 7. 路由和路由组8. 项目代码mai…

爬虫逆向实战(五)--猿人学第三题

一、数据接口分析 主页地址:猿人学第三题 1、抓包 通过抓包可以发现数据接口是api/match/3 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 无cookie是否加密? 无 二、发送请求 …

AE-卡通人物解说动画视频的制作

目录 1.导入卡通人物图片和音频文件 2.新建合成 3.在卡通人物图片上添加效果和表达式 4.在音频文件上添加效果和表达式 5.将卡通人物中的 CC Split2 中分割1 表达式链接到滑块中 6.卡通人物根据音频文件自动匹配口型。 AE制作卡通人物解说视频,卡通人物口型根据…

Android-网络访问技术Retrofit浅析

Retrofit是一种基于注解的网络请求库,专门用于在Android应用中进行网络访问。它使用简洁的方式定义了网络请求的接口,并自动将请求结果解析为Java对象。Retrofit的核心原理是利用了Java的动态代理技术,将网络请求接口的注解信息转化为具体的网…

Datawhale Django入门组队学习Task01

Task01 一.创建虚拟环境 python -m venv django_learn (django_learn那里是自己定的环境名字) 之前一直用conda管理虚拟环境,没咋用过virtualenv,然后我的powershell之前也设置了默认启动了base环境,然后输入activat…

网络通信原理TCP字段解析(第四十七课)

字段含义Source Port(源端口号)源端口,标识哪

GrapeCity Documents for Excel, Java Edition Crack

GrapeCity Documents for Excel, Java Edition Crack 增加了对SpreadJS.sjs文件格式的支持: 更快地将大型Microsoft Excel文件转换为.sjs格式。 使用较小的占用空间保存导出的文件。 将Excel/SpreadJS功能导入SpreadJS/从SpreadJS导出。 从.sjs文件中压缩的JSON文件…

轮腿机器人的PID控制

1 PID介绍 PID(Proportional Integral Derivative)控制系统。其实质是根据输入的偏差值,按比例、积分、微分的函数关系进行运算,运算结果用以输出进行控制。它是在长期的工程实践中总结出来的一套控制方法,实际运行经…

快速解决Ubuntu 中 wine 程序 中文显示为方块/显示错误/无法显示中文(2023)

解决办法就是在创建prefix的命令行里加上LANG“zh_CN.UTF8” LC_ALL“zh_CN.UTF8”,并安装cjkfonts,即可。 1、生成prefix、安装cjk字体 以下是基本流程: 现在假定wine和winetricks已经装好, // 先创建一个prefix,按…

当你出差在外时,怎样轻松访问远程访问企业局域网象过河ERP系统?

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻,不管是财务、生产、销售还是采购,都需要用到ERP系统来协助。…

LeetCode[274]H指数

难度:Medium 题目: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指…

【Docker】Docker Desktop配置资源:cpu、内存等(windows环境下)

Docker Desktop配置资源:cpu、内存等(windows环境下) 一、WSL2 以及 hyper-v区别,二者安装docker desktop1.WSL2和hyper-v区别2.安装Docker Desktop 二、docker desktop限额配置,资源配置方法 Docker 是指容器化技术&a…

卷积操作后特征图尺寸,感受野,参数量的计算

文章目录 1、输出特征图的尺寸大小2、感受野的计算3、卷积核的参数量 1、输出特征图的尺寸大小 如果包含空洞卷积,即扩张率dilation rate不为1时: 2、感受野的计算 例如,图像经过两个3*3,步长为2的卷积后感受野为: co…