ddpm和ddim小记

2024-08-31 17:36
文章标签 ddpm ddim 小记

本文主要是介绍ddpm和ddim小记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  前面分析了DDPM和DDIM,但是仍然感觉对其理解不是和透彻,最近又学习了下,简单记录一下进一步的理解。为了方便理解,这里直接以两个像素的灰度图像为例。前面讲过无论是DDPM还是DDIM,他们的训练过程都是一样的,都遵循下面的这个公式:
x t = α t ˉ x 0 + 1 − α t ˉ ϵ x_t = \sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\epsilon xt=αtˉ x0+1αtˉ ϵ
  但是在采样的时候有些不同,DDPM是遵循马尔科夫性质的,DDIM是直接一步到位。因此DDIM的采样过程要远远快于DDPM,而DDPM的多样性要好于DDIM。
  我们先以采样为例,假设采样的两像素都服从正态分布(为什么是假设为高斯分布而不是均值分布或者其他的分布呢?因为我们再扩散模型采样的时候就是直接从高斯随机噪声中采样得到的,这些噪声点就是服从高斯分布的,所以这里直接以高斯分布举例子。其实我觉得换成其他的分布也可以,只不过正态分布式在自然界中是最常见的,DDPM采样的核心其实就是通过不断堆叠多个的正态分布来模拟原始数据集的一个复杂分布情况,原始数据集的分布会有很多种情况,可能服从正态分布,也可能服从均值分布,泊松分布,瑞丽分布等等,采样过程其实就是在模拟这个过程),如下图所示的概率密度图,越亮的地方表示该像素被选取到的概率是越大的,也就是对分别对应这个两个分布对应的 μ \mu μ处,两个分布的 σ \sigma σ分别对应这图中发亮的地方的半径, σ \sigma σ越大,表示椭圆的半径越大,反之越小,如果两个像素的高斯分布的 σ \sigma σ一样,那么这个椭圆就变成了圆。

在这里插入图片描述
  有了上面的密度图假设,我们现在来随机取一个点,假设取值对应这坐标上的(0.5,0.5),有了这个点,我们就能得到一个两像素的图,像素值分别为0.5,0.5。同理我们可以设想一下,把这两像素的图扩展到(100,100,3),每个像素均服从正态分布,那么上面的二维概率密度图是不是可以扩展到了 100 × 100 × 3 = 30000 100 \times100 \times 3=30000 100×100×3=30000维度,这个维度我们可能无法想想,但是道理同二维一样的,我们随机从30000维空间中选取一个点,是不是就确定了一张图像。
  现在我们假设一下,有一个两像素的数据集,很多张图像,几千万张,上亿张图像,这个数据集一定有一个分布,但是这个分布我不知道,我现在需要通过扩散模型来学习这个分布。训练的时候就是从这个数据集里面选取图像加高斯噪声,假设1000步,每张图像都加了1000步的高斯噪声之后,我们可以再统计下加完噪声的这个噪声数据集的分布情况,你会意外的发现,这个噪声数据集竟然服从正态分布。其实这一点一比较好理解,我们刚才说了,DDPM 采样的时候其实就是通过不断的堆叠不同正态分布来模拟原始的数据分布的,那么训练的时候是在不断地加噪声,每次加的噪声都是分布一样的,那么最终生成的噪声数据分布肯定是跟你加的这个噪声分布一致呀。采样的时候就是根据这个噪声数据集,每次采样的时候都会调整正态分布的情况,最终学习到原始数据集的分布。DDPM是逐步调整吗,DDIM是一步到位,在看下这两个采样公式:
DDPM:
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z \mathbf{x}_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta\left(\mathbf{x}_t, t\right)\right)+\sigma_t \mathbf{z} xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz
可见DDPM只能一步一步来。
DDIM:
x s = α ˉ s ( x k − 1 − α ˉ k ϵ θ ( x k ) α k ‾ ) + 1 − α ˉ s − σ 2 ϵ θ ( x k ) + σ ϵ x_s=\sqrt{\bar{\alpha}_s}\left(\frac{x_k-\sqrt{1-\bar{\alpha}_k} \epsilon_\theta\left(x_k\right)}{\sqrt{\overline{\alpha_k}}}\right)+\sqrt{1-\bar{\alpha}_s-\sigma^2} \epsilon_\theta\left(x_k\right)+\sigma \epsilon xs=αˉs (αk xk1αˉk ϵθ(xk))+1αˉsσ2 ϵθ(xk)+σϵ
DDIM可以直接从第k步跳到s步,实现了采样的加速。

这篇关于ddpm和ddim小记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124548

相关文章

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

logback小记

1、需要的maven依赖: <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version><!--<scope>test</scope>--></dependency><!-- https://mvnrepository.com/artifa

策略模式的小记

策略模式 策略模式支付系统【场景再现】硬编码完成不同的支付策略使用策略模式,对比不同(1)支付策略接口(2)具体的支付策略类(3)上下文(4)客户端(5)小结 策略模式 定义:策略模式是一种行为设计模式,在运行时改变对象的行为。 目的:定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。 结构: 策略接口:声明了所有支持的所有算法的公共接口。具体策略:实现了策略

类的加载过程与初始化小记

//部分内容来自“狂神说java” 代码验证 解释 1.加载类的信息,加载到内存中,如例子,将Test05和A类的信息加载到方法区, 2.加载完成后,立马生成一个class对象,如例 java.lang.class对象代表Test05类..., 3.执行main方法,通过<clinit>进行初始化 类的初始化

记录|单例模式小记

目录 前言一、单例模式1.1 什么是单例模式1.2 常见单例模式 二、单例模式对比更新时间 前言 参考文章: 去读队友写的代码的时候由于看不懂才去学习的。 一般情况下,这种是用于数据库的开销避免。 例如: public class DBConnectionManager{private static DBConnectionManager instance;

VC6安装过程小记

用几百M的安装盘,最后总是挂掉。 可以用43M的visual c++ VC6-green-english.rar,解压缩后运行sin.bat。 如果出现如下错误,确认VC的Tools->Options…下面的include配置是否正确,根据自己的实际情况修改即可。 无法打开包含文件 'afxres.h' 这个绿色版本是Eng的。