记录自己学习过程中的笔记,可能存在一些错误,欢迎讨论交流。
链接1:十分钟读懂Diffusion:图解Diffusion扩散模型 - 知乎 (zhihu.com)
学习完链接1,可知道:
1,stable diffusion的前向扩散过程,是不断地往原图X0里面添加噪声,一直到T步之后得到XT;反向扩散过程,是从XT,预测XT-1到XT的噪声,然后用XT-预测得到的第T步的噪声得到XT-1,不断重复该过程得到X0。
2,训练的loss,是网络预测的噪声与真实的噪声的L2损失。
链接2:扩散模型之DDPM - 知乎 (zhihu.com)
链接2是关于扩散模型的公式推导,较难理解,看完之后暂且先记住了以下内容:
1,如果每一步所添加的方差序列β1-βT都知道了,那么加了T次噪声之后的图片可以直接由X0计算得到:
2,这里借用链接2中的一张图片,左边是训练时候的样子,由1可知,红色框内的公式就是XT,将XT和时间步长t作为输入,去预测噪声,并将预测得到的噪声与添加的真实的噪声计算损失。
右边是从XT还原到X0,预测每一步的噪声,然后用XT一次次减去预测的噪声,可得到X0.
链接3:AIGC专栏3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例_Bubbliiiing的博客-CSDN博客
链接3详细介绍了stable diffusion的各部分构成。有以下点需要注意:
1,VAE变分自编码器是提前训练好的,它其中的encoder会将图片进行压缩,而decoder会将压缩后的图片进行还原。
2,文本编码和时间步长编码可以通过两种方式融合到图片潜在空间(也就是压缩后的图片),一是使用torch.cat直接堆叠,二是使用cross Attention。
3,选择在压缩后的图片上进行扩散过程,占用的显存和内存都比较小,可以在一般的设备上运行(显存6G左右即可顺利运行)
链接4:[零基础] Stable Diffusion 原理详解_哔哩哔哩_bilibili
链接4是一个视频,其中讲到了刚才没有说到的CFG,classifier free guidance,是为了解决在加入了文本特征之后,网络比较难以注意到本文特征的问题。首先,用U-Net预测没有文本特征引导的原图X0,然后用U-Net预测有文本特征引导的原图X0_word,利用(X0_word - X0)我们可以得到文本特征的区域,提高它的权重,并将其加到X0上,比如这个权重是8,那么最终的输出就是X0+8*(X0_word - X0)。
链接4还有的知识点,利用正向提示词预测得到的噪声,减去负向提示词得到的噪声,使得我们预测输出的噪声更加靠近正向提示词,远离负向提示词。
其它有关的链接:
链接5,B站上发布一键部署stable diffusion的up主,感谢:秋葉aaaki的个人空间_哔哩哔哩_bilibili
链接6,DDPM的学习:DDPM解读(一)| 数学基础,扩散与逆扩散过程和训练推理方法 - 知乎 (zhihu.com)
链接7,stable diffusion的一些说明与使用:文生图模型之Stable Diffusion - 知乎 (zhihu.com)
链接8,扩展学习,XT到XT-1为什么预测的是噪声而不是XT-1,可以简单解释,我们在训练过程中不想让每个XT都最终对应到同一个X0上,所以改成预测噪声,更加具有随机性。扩散模型(diffusion model)为什么不训练一个模型,使用x(t)预测x(t-1)? - 知乎 (zhihu.com)