注:点击感兴趣的标题可以直接跳转到该文章。
主要是:
扩散过程 x t = α ‾ t x 0 x_t=\sqrt {\overline{\alpha}_ {t}}x_ {0} xt=αtx0 + 1 − α ‾ t \sqrt {1-\overline {\alpha} }_ {t} 1−αt z ‾ t \overline {z}_t zt
逆扩散过程: q ( X t − 1 ∣ X t X 0 ) = N ( X t − 1 ; 1 α t X t − β t α t ( 1 − α ˉ t ) Z , 1 − α ˉ t − 1 1 − α ˉ t β t ) , Z ∼ N ( 0 , I ) q\left(X_{t-1} \mid X_{t} X_{0}\right)=N\left(X_{t-1} ; \frac{1}{\sqrt{\alpha_t}} X_{t}-\frac{\beta_{t}}{\sqrt{\alpha_{t}\left(1-\bar{\alpha}_{t}\right)}} Z, \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_{t}} \beta_{t}\right), Z \sim N(0, I) q(Xt−1∣XtX0)=N(Xt−1;αt1Xt−αt(1−αˉt)βtZ,1−αˉt1−αˉt−1βt),Z∼N(0,I)的公式推导,以及扩散模型的简介。
以一个代码例子介绍了扩散模型的整个过程,在这篇有DDPM的损失函数的推导。
L simple ( θ ) = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] L_{\text{simple}}(\theta) = \mathbb{E}_{t,x_0, \epsilon} \Bigg[ \bigg\Vert \epsilon - \textcolor{lightgreen}{\epsilon_\theta}(\sqrt{\bar\alpha_t} x_0 + \sqrt{1-\bar\alpha_t}\epsilon, t) \bigg\Vert^2 \Bigg] Lsimple(θ)=Et,x0,ϵ[ ϵ−ϵθ(αˉtx0+1−αˉtϵ,t) 2]
在这篇文章主要介绍了一种非马尔科夫的前向过程,不同于 DDPM 基于马尔可夫的 Forward Process,但是
它们训练方法相同
,因此在 DDPM 基础上加上 DDIM 采样方案即可。并且DDIM 的采样是确定的,即给定了同样的初始噪声 x t x_t xt ,DDIM 能够生成相同的结果 x 0 x_0 x0 。
然后是给出了采样公式的推导,即
x τ i − 1 = α τ i − 1 ( x τ i − 1 − α τ i ϵ θ ( x τ i ) α τ i ) + 1 − α τ i − 1 − σ τ i 2 ⋅ ϵ θ ( x τ i ) + σ τ i ϵ τ i x_{\tau_{i-1}} = \sqrt{\alpha_{\tau_{i-1}}}\Bigg( \frac{x_{\tau_i} - \sqrt{1 - \alpha_{\tau_i}}\epsilon_\theta(x_{\tau_i})}{\sqrt{\alpha_{\tau_i}}} \Bigg) \\ + \sqrt{1 - \alpha_{\tau_{i- 1}} - \sigma_{\tau_i}^2} \cdot \epsilon_\theta(x_{\tau_i}) \\ + \sigma_{\tau_i} \epsilon_{\tau_i} xτi−1=ατi−1(ατixτi−1−ατiϵθ(xτi))+1−ατi−1−στi2⋅ϵθ(xτi)+στiϵτi其中 ϵ τ i \epsilon_{\tau_i} ϵτi 是随机噪声,
τ \tau τ 是 [ 1 , 2 , … , T ] [1,2,\dots,T] [1,2,…,T] 的子序列,长度为 S S S,和
σ τ i = η 1 − α τ i − 1 1 − α τ i 1 − α τ i α τ i − 1 \sigma_{\tau_i} = \eta \sqrt{\frac{1 - \alpha_{\tau_{i-1}}}{1 - \alpha_{\tau_i}}} \sqrt{1 - \frac{\alpha_{\tau_i}}{\alpha_{\tau_{i-1}}}} στi=η1−ατi1−ατi−11−ατi−1ατi请注意,DDIM 论文中的 α t \alpha_t αt 是指来自 DDPM 的 α ˉ t {\color{lightgreen}\bar\alpha_t} αˉt。
最后介绍了respacing,是一种加速采样的技巧。
并且给出了相关主要代码的分析。
这篇主要介绍的是类条件扩散模型,从而推广到多模态的条件。
这篇主要基于Improved Denoising Diffusion Probabilistic Models和DDIM就是在DDPM的基础上做了一些优化,例如学习方差,设置cosine类型的betas,新的混合目标函数和重要性采样等等。
然后这篇工作对Unet进行了一些架构的优化。
然后是条件生成包括:训练过程中的Condition和采样过程中的Guidance。
都给出了公式的证明和代码示例。
这篇工作主要是基于Diffusion Models Beat GANs on Image Synthesis和CLIP。
多模态的引导扩散模型进行采样。直接用训练好的非条件的扩散模型,无需重复训练。文字guided是用一个微调的CLIP模型,数据集无需文本注释。
给出了论文的介绍复现的指引等。
这这篇中介绍了一个【生成模型新方向】score-based generative models(其实和扩散模型大同小异)
给出了原理介绍,然后是对应的代码分析。
包括训练过程的代码和采样的代码,有很详细的代码注释。
这种score-based generative model有如下的优点:
- 可以得到GAN级别的采样效果,而无需对抗学习(adversarial training)
- 灵活的模型结构
- 精确的对数似然估计计算(exact log-likelihood computation)
- 唯一可识别表征学习(uniquely identifiable representation learning)
- 流程可逆,我理解是不需要像StyleGAN的模型训练一个feature网络,可能也不需要像FLOW那么大的计算量。
- 在SDG开源的代码上面加了详细且丰富的注释,帮助阅读和理解。
- 梳理的代码的逻辑和文章的主要贡献代码。包括:
- 1、主要的采样模块
- 2、具体采样模块
- 3、微调的CLIP
为什么Diffusion Models扩散模型可以称为Score-based Models?
这篇博客
- 深入的总结了score-based generative models
- 以表格的形式给出了Diffusion Models和Score-based Models的相同点和不同点
- 以及扩散模型当前的主要挑战。
这篇博客详细介绍了:
- 击败GANs的新生成式模型:score-based model(diffusion model)原理
- 包括其优缺点、训练方法、采样方法、网络结构以及可控生成。
- 然后是其应用场景、代码、实验和展望。
对于前面所说的classifier guided diffusion有几个问题:
- 需要训练额外的分类器,并且该分类器必须在有噪声的数据上训练,因此通常不可能插入预训练的分类器。
- 因为分类器引导在采样期间将分数估计与分类器梯度混合,所以分类器引导的扩散采样可以被解释为试图将图像分类器与基于梯度的对抗性攻击混淆。(与GAN的训练有点类似,不稳定)
那么基于此,提出了Classifier-Free Diffusion Guidance,后续非常多的工作都是基于其来进行的,例如DALL·E 2、Imagen等吸引人眼球的模型基本上都是以它为基础做的。
那么Classifier-Free Diffusion Guidance是如何训练的呢?效果到底如何?原理是什么?在这篇文章都有详细讲解。
提到多模态,那么必看的论文就非CLIP莫属了,那么CLIP到底是如何训练的?以及其如何进行zero-shot推理的?效果如何?局限性又是什么?
CLIP是一个多模态的大模型,用了4亿个(图像、文本)对进行对比学习,学习之后可以直接进行zero-shot推理,并且不需要像ImageNet那样标注1000个类,而是可以人为给出文本提示,进行图片和文本之间的相似度计算,而且迁移效果很好。
有网友将其视为扩散模型的有力竞争者!并表示 Consistency Models 无需对抗性训练,这使得它们更容易训练,不容易出现模式崩溃。还有网友认为扩散模型的时代即将结束。更有网友测试了生成速度,3.5 秒生成了 64 张分辨率 256×256 的图片,平均一秒生成 18 张。
爆火的扩散模型将要结束了吗?
Consistency Models是如何训练的呢?效果如何?
Consistency Models与扩散模型有什么区别和联系?
基于神经网络的,离散的表征学习。
这篇博客主要介绍VQVAE,将VQ的思想引入VAE中,在隐空间进行生成,代表工作如Stable Diffusion,DALLE和VQGAN。现在很多预训练的大模型都用到VQVAE。
可以带着一些问题去思考和学习。
VQVAE于VAE有何不同?
embedding space、编码器以及解码器分别是如何训练的?
VQVAE解决了什么问题,以及可以用到哪些工作上面?
看过了VQVAE的原理,那么VQVAE的代码上面是如何实现的呢?
这篇文章详细的介绍了VQVAE的代码原理,包含丰富的注释解析。希望对大家理解VQVAE有些许帮助。
来看看VQ-VAE-2相对于之前的版本有何异同之处吧。
总的来看这篇文章的新颖之处在于:
- 多层的VQVAE,顶部的层负责全局信息,底部的层负责局部细节。
- 架构的改进,例如self-attention的加入以及更好的稳定化方法、扩展tpu模型和在样品多样性和样品质量之间进行权衡的机制。
- 可以生成高分辨率的图像。
VQGAN是StableDiffusion作者的前期论文,希望大家对于表征学习、GAN以及Transformer自回归建模(GPT)的理解有一定的帮助。
分享的这篇文章综合了CNN的局部建模优势与Transformer的全局建模优势,并且基于VQVAE,具体如下:
- 首先是利用CNN(包括编码器和解码器)来学习一个有效的codebook来表示图片(VQVAE)。然而使用transformers将图像表示为潜在图像成分的分布,需要我们突破压缩的极限。这里就增加了基于patch的鉴别器和感知损失,提出了VQGAN,以在增加压缩率的情况下保持良好的感知质量keep good perceptual quality at increased compression rate.(自然也就用到了注意力机制,具体参考下文)
- 那么Transformer如何应用到图像生成呢?之前说道VQVAE其实就是找到对应codebook中的索引,由索引找到codebook中的向量就可以轻松重建图像。这里Transformer就是自回归的进行下一个索引的预测 p ( s ) = ∏ i p ( s i ∣ s < i ) p(s) =\prod_i p(s_i|s_{p(s)=∏ip(si∣s<i)。
- 知道了如何生成的,那么下面的问题就是如何进行条件生成的呢?给定一个条件c,需要计算的就是 p ( s ∣ c ) = ∏ i p ( s i ∣ s < i , c ) p(s|c) =\prod_i p(s_i|s_{p(s∣c)=∏ip(si∣s<i,c),如果条件信息c有空间范围,我们首先学习另一个VQGAN,利用transformer的自回归结构,用新获得的codebook Z C \mathcal{Z}_C ZC再次获得一个基于索引的表示 r ∈ { 0 , … , ∣ Z c ∣ − 1 } h c × w c r∈\{0,…, |Zc|−1\}^{hc×wc} r∈{0,…,∣Zc∣−1}hc×wc,然后我们可以简单地将r预置prepend到s(s是图像codebook索引),并将负对数似然的计算限制在条目 p ( s ∣ s < i , r ) p(s | s_{p(s∣s<i,r)。
- 那么高分辨率的图像如何生成呢?transformer的注意机制限制了其输入s的序列长度h·w。虽然我们可以调整我们的VQGAN的下采样块数m来将大小为H×W的图像缩小到 h = H / 2 m × w = W / 2 m h=H/2^m×w=W/2^m h=H/2m×w=W/2m,但我们观察到超过临界值m的重建质量下降,这取决于所考虑的数据集。因此,为了生成百万像素的图像,我们必须进行分块patch-wise和裁剪,在训练期间将s的长度限制在最大可行的大小。为了对图像进行采样,我们以
滑动窗口
的方式使用transformer,如图3所示(点入文章去看).
Stable Diffusion图像编码器和解码器基于VQGAN,然后用的扩散模型是Classifier-Free Diffusion Model,条件编码器用的是CLIP或者a domain specific encoder(如BERT),通过cross-attention融入到UNet中。采样过程用了DDIM加速和条件采样classifier guided diffusion(UNet架构也是用的这个一样的)。
其中VQGAN和CLIP是直接加载预训练模型,训练时只需要训练扩散模型。
方法鸟瞰;
- 首先,通过一个VAE编码器得到隐空间的一个表征,得到维度变小但是和像素空间等效的隐向量,在这个隐空间中做Diffusion。然后将Diffusion采样的结果(隐向量)输入VAE的解码器输出图像。
- 其次,从隐向量 z T z_T zT到z的Diffusion采样过程的每一步会通过一个cross-attention来将条件加入,这里的条件可以是多模态的例如CLIP。
- 然后,是
感知压缩阶段
perceptual compression可以理解为VAE的编码器压缩图像像素空间到一个隐空间,语义压缩
semantic compression扩散模型输入 x t , t x_t,t xt,t和条件 y y y能够预测t时刻的噪声就是学习到了图像的语义。- 可以用于百万级像素图像的生成,也可用于超分和图像inpainting。
在这篇文章中详细的讲解了Consistency Models复现的过程,以及复现结果的分析。包括遇到的bug,以及解决方案,在评论区也有讨论,同时也欢迎大家在评论区一起交流学习!
这篇文章是Score-Based Generative Modeling through Stochastic Differential Equations的精读,在公式层面上简单的证明了DDPM与基于分数的扩散模型直接的关系,值得一看。
简单的说,基于分数的模型是用随机微分方程SDE对数据进行连续的扰动,并且DDPM的噪声扰动过程是 Variance Preserving (VP) SDEs的离散化。
Kihong Kim, Yunho Kim, Seokju Cho, Junyoung Seo, Jisu Nam, Kychul Lee, Seungryong Kim, KwangHee Lee
GitHub地址:https://github.com/hxngiee/DiffFace(作者说预计9月前发布代码)
论文地址:https://arxiv.org/abs/2212.13344
Project page:https://hxngiee.github.io/DiffFace/这是第一个将扩散模型应用于换脸任务的方法。在training stability,high fidelity和controllability方面都有一定的优势。
在扩散模型训练时用了条件训练,采样时也用了条件引导采样,都是为了保存源脸的身份信息。目标脸的属性背景保存用的方法是target-preserving blending策略。
扩散模型的训练和采样方法大多基于Diffusion Models Beat GANs on Image Synthesis,不过本文增加了一些trick,例如通过在 x t x_t xt直接预测 x 0 x_0 x0来获得没有噪声的图像,从而直接喂给预训练的分类器(人脸专家模型,如 D I \mathcal{D}_I DI表示身份嵌入器转移源脸的身份信息
, D F \mathcal{D}_F DF表示人脸解析器保留目标脸的属性如表情、姿态和形状
, D G \mathcal{D}_G DG表示注视估计器保留目标眼睛的注视方向
。)。在理解了扩散模型之后这部分其实不难看懂。
其次是target-preserving blending保留目标的背景与源脸的身份,利用一个人脸解析器face parser给出一个语义人脸面具semantic facial mask。将合成的结果与获得的目标hard mask M进行元素级积,但是这里通过改变mask强度来更好地保留目标的结构属性(mask太度会损失目标图像的结构属性)图3展示了该方法的概述。
Wenliang Zhao, Yongming Rao, Weikang Shi, Zuyan Liu, Jie Zhou, Jiwen Lu† Tsinghua University
【Paper】>【Code】暂无>【Project】暂无
Pipeline:
将face swapping重新定义为conditional inpainting task。
简单的来说就是以identity feature and facial landmarks为条件,修复3D-aware mask中的区域。
这里需要注意的是这里用了Stable Diffusion,就是训练了一个VQGAN,将图像压缩到latent space,在这个latent space上面进行训练。
这里也利用了RAFS的方法,还将区域特征(如眼睛、鼻子、嘴巴)作为另一个条件输入。
然后在扩散过程中用了midpoint估计法来计算ID loss。
To deal with the misalignment between the shape of the source face and the target face, the mask M \mathcal{M} M must cover both the original landmark of the target face ℓ t g t ℓ^{tgt} ℓtgt and the 3D-aware landmark ℓ s w a p ℓ^{swap} ℓswap. In our implementation, we simply compute a convex hull of the concatenation of the two sets of landmarks [ ℓ t g t , ℓ s w a p ] [ℓ^{tgt},ℓ^{swap}] [ℓtgt,ℓswap]to obtain the 3D-aware mask M s w a p \mathcal{M}^{swap} Mswap.
这样 M s w a p \mathcal{M}^{swap} Mswap可能会很不自然。
首先,由于我们将人脸交换定义为conditional inpainting,因此不能完全保留目标人脸的一些细节属性;
其次,由于生成式的原因,我们的方法是不确定性的,因此有时会出现不稳定性。
第三,我们的方法不能处理遮挡。
Ziqi Huang, Kelvin C.K. Chan, Yuming Jiang, Ziwei Liu†
S-Lab, Nanyang Technological University
【Paper】 >【Code】 >【Project】
Pipeline:
- 首先需要明确的是这篇工作是一个Face Generation and Editing工作,其利用预训练的单模态扩散模型,而无需重新训练。【有文本驱动生成和编辑人脸,同时绘制人脸形状(面具驱动),mask-driven】
- 其次,提出了由Unet实现的动态扩散器,它预测空间和时间变化的影响函数,在每个迭代步骤上有选择地增强或抑制给定模态的贡献。
- 使用的是Stable Diffusion即LDM。
Jiseob Kim1,2, Jihoon Lee2, Byoung-Tak Zhang1
1Seoul National University, 2Kakao Brain
【Paper】 >【Code】 暂无>【Project】暂无
Pipeline:
- 首先,本文用supervised contrastive loss来训练了一个身份嵌入器,以promoting a smoother space。与trained for a purely discriminative task的Arcface身份提取器特征不同。
- 然后生成器基于的是noise conditional score network(NCSN++),也就是扩散模型!设计的损失函数就三个,非常简单。架构上面修改的两个地方是:the time embedding is replaced with the identity embedding and a direct skip connection from the input to the output is added。生成器训练用到的损失分别为:1. Id loss 2.chg loss(simpler pixel-level change loss) 3. 对抗损失(StyleGAN2相同的) 。其中的一些训练Trick查看4.2节。
- identity embedder is based on ResNet50 architecture。网络架构细节在Appendix。
【Paper】 > 【Code】
整个文章的Pipeline or 贡献:
- 能够蒸馏无分类器引导的扩散模型。
- 分为两阶段蒸馏,第一阶段用一个学生模型匹配无分类器扩散模型的输出 x ^ θ w ( z t ) = ( 1 + w ) x ^ c , θ ( z t ) − w x ^ θ ( z t ) \hat{\mathrm{x}}_{\bm\theta}^{w}(\mathrm{z}_t)=(1+w)\hat{\mathrm{x}}_{c, \bm\ θ}(\mathrm{z}_t)-w\hat{\mathrm{x}}_{\bm\theta}(\mathrm{z}_t) x^θw(zt)=(1+w)x^c, θ(zt)−wx^θ(zt);为了引入制导权重 w w w,这里提出了一个 w w w-conditioned model其中 w w w 作为学生模型的输入。为了更好地捕获特征,将傅立叶嵌入应用于 w w w,然后将其合并到扩散模型主干中,其方式类似于time-step。
- 第二阶段:学生模型每次匹配对应教师模型采样步的一半,例如将教师模型中的 2 N 2N 2N 个步骤蒸馏为学生模型中的 N N N 个步骤后,我们可以使用 N N N 个步骤的学生模型作为新的教师模型,重复相同的过程,并将教师模型蒸馏为 N / 2 N/2 N/2步学生模型。
在每一步中,我们都使用教师的参数初始化学生模型。- 这里还提供了一个N-step deterministic and stochastic sampling,即用噪声随机扰动。并且使用的是 v \mathrm{v} v-prediction模型。