当前位置:首页|资讯|AIGC

AIGC: FastDPM 笔记

作者:刹那-Ksana-发布时间:2023-07-24

注意,FastDPM ≠ DPM Fast。前者(即这篇笔记的对象)是 2106.00132,后者是 2206.00927

连续化

对于离散的扩散过程,我们首先希望将其连续化。

t 和噪音等级 r (这两个变量都是连续的),扩散步数就是当前扩散所处的位置,噪音等级用来形容当前图片上高斯噪声的强度。然后,我们设定两个函数 %5Cmathcal%7BR%7D 和 %5Cmathcal%7BT%7D ,这两个函数可以对扩散步数 t 和"噪音等级" r 进行互换: r%3D%5Cmathcal%7BR%7D(t)%2Ct%3D%5Cmathcal%7BT%7D(r)

那这两个函数具体是什么呢?

对于函数 R 来说,论文里首先将其定义为 %5Cmathcal%7BR%7D(t)%3D%5Csqrt%7B%5Cbar%7B%5Calpha_t%7D%7D. 顺便一说,%5Cbar%7B%5Calpha_t%7D%3D%5Cprod_%7Bi%3D1%7D%5Et%5Calpha_i%2C%20%5Calpha_t%3D1-%5Cbeta_t. 并且,根据定义,我们知道 r%5Cin(0%2C1).

%5Chat%7B%5Cbeta%7D%3D%5Cfrac%7B1-%5Cbeta_1%7D%7B%5CDelta%20%5Cbeta%7D%5Cbeta_1%2C%5CDelta%20%5Cbeta 都是常数),然后将公式 %5Cbar%7B%5Calpha_t%7D%3D%5Cprod_%7Bi%3D1%7D%5Et%5Calpha_i 进行改写:

%20%5Cbar%7B%5Calpha%7D_t%20%3D%20%5Cprod_%7Bi%3D1%7D%5Et%20(1-%5Cbeta_i)%20%0A%20%20%20%20%3D%20%5Cprod_%7Bi%3D1%7D%5Et%20%5Cleft(1-%5Cbeta_1-(i-1)%5CDelta%5Cbeta%20%5Cright)%0A%20%20%20%20%3D%20(%5CDelta%5Cbeta)%5Et%5Cprod_%7Bi%3D0%7D%5E%7Bt-1%7D%5Cleft(%5Chat%7B%5Cbeta%7D-i%5Cright)%20%5C%5C%0A%3D(%5CDelta%5Cbeta)%5Et%20%5Cfrac%7B%5Chat%7B%5Cbeta%7D!%7D%7B(%5Chat%7B%5Cbeta%7D-t)!%7D%3D%20(%5CDelta%5Cbeta)%5Et%20%5CGamma%5Cleft(%5Chat%7B%5Cbeta%7D%2B1%5Cright)%20%5CGamma%5Cleft(%5Chat%7B%5Cbeta%7D-t%2B1%5Cright)%5E%7B-1%7D

这里的 Gamma 函数相当于是在离散和连续之间架起了一个桥梁。

%5Cmathcal%7BR%7D(t)%3D%5Csqrt%7B%5Cbar%7B%5Calpha_t%7D%7D 的定义,我们得到了函数 R 的具体形式:

%5Cmathcal%7BR%7D(t)%20%3D%20(%5CDelta%5Cbeta)%5E%7B%5Cfrac%20t2%7D%5CGamma%5Cleft(%5Chat%7B%5Cbeta%7D%2B1%5Cright)%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D%20%5CGamma%5Cleft(%5Chat%7B%5Cbeta%7D-t%2B1%5Cright)%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D

%5Cmathcal%7BT%7D%3D%5Cmathcal%7BR%7D%5E%7B-1%7D, 论文中是利用了一个二分法搜索来寻找符合下面条件的数值解。

2%5Clog%20%5Cmathcal%7BR%7D(t)%20%20%3D%20t%5CDelta%5Cbeta%20%2B%20%5Cleft(%5Chat%7B%5Cbeta%7D%2B%5Cfrac12%5Cright)%5Clog%5Chat%7B%5Cbeta%7D%20%20-%20%5Cleft(%5Chat%7B%5Cbeta%7D-t%2B%5Cfrac12%5Cright)%5Clog(%5Chat%7B%5Cbeta%7D-t)-t%20%5Cnonumber%20%5C%5C%0A%2B%20%5Cfrac%7B1%7D%7B12%7D%5Cleft(%5Cfrac%7B1%7D%7B%5Chat%7B%5Cbeta%7D%7D-%5Cfrac%7B1%7D%7B%5Chat%7B%5Cbeta%7D-t%7D%5Cright)%20%2B%5Cmathcal%7BO%7D(T%5E%7B-2%7D)

如果没看懂上面公式,没关系,我也没看懂,以上的公式在算法里面其实并不是那么的重要。

前向(加噪)与逆向(去噪)过程

T 步的话,那么我们选一个比 T 小的值 S 然后获得一个新的序列,%5Chat%7Bx%7D_0%2C%5Chat%7Bx%7D_1%2C...%2C%5Chat%7Bx%7D_S. 且 %5Chat%7Bx%7D_s%5Csim%20%5Cmathcal%7BN%7D(%5Chat%7Bx%7D_s%3B%20r_s%5Chat%7Bx%7D_0%2C(1-r_s%5E2)I).

r_s 的值,进而求得 %5Chat%7Bx%7D_s 的值,这种方式论文里面称作 VAR。另一种是我们指定一系列的扩散时间点 (即,从原来的扩散步数 %5C%7B1%2C2%2C...%2CT%5C%7D 里面选出一个子集),根据时间点推算出 r_s 的值,进而求得 %5Chat%7Bx%7D_s 的值,这种方式论文里面称作 STEP。

那么预先指定的这个序列如何获得呢,论文里面给出了两种比较靠谱的策略,一种是 Linear 策略,一种是 Quadratic 策略. 对于 VAR 来说,

%5Ctext%7BLinear%3A%20%7D%20%5Ceta_s%3D(1%2Bcs)%5Ceta_0%20%5C%5C%0A%5Ctext%7BQuadratic%3A%20%7D%20%5Ceta_s%3D(1%2Bcs)%5E2%5Ceta_0

对于 STEP 来说,

%5Ctext%7BLinear%3A%20%7D%20%5Ctau_s%3D%5Clfloor%7Bcs%7D%20%5Crfloor%2Cc%3DT%2FS%20%5C%5C%0A%5Ctext%7BQuadratic%3A%20%7D%20%5Ctau_s%3D%5Clfloor%7Bcs%5E2%7D%20%5Crfloor%2Cc%3D%5Cfrac%7B4%7D%7B5%7D%5Ccdot%20%5Cfrac%7BT%7D%7BS%5E2%7D

上面这些符号的意思,不用太去深究。个人的第六感认为,其实论文里面重要的是这两种策略,把离散的过程变成连续的过程并不是什么特别稀奇的事情。但是如何选取序列,让生成的图像不过于劣化,是比较重要的地方。

然后是去噪过程,论文里面也给出了两种方法,一种基于 DDPM,一种基于 DDIM. 但是这里因为只有公式,没有什么特别的地方,就略过了。

完。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1