载入天数...载入时分秒... 总访问量次 🎉
扩散模型
1 duffusion 的基本概念
diffusion 是如何运作的
给一个带有噪声的图像,作为 Denoise 网络的输入,输出是减少了一些噪声的图像……依次经过 Denosie,经过有限次去噪过程,得到最后输入的图像。每一步都有一个编号,第一步是 1000,最后一步是 1。这个过程称为 Reverse Process(逆向过程)
Denoise 是复用的,但是由于每次输入图象质量不一样,因此并不是真的只用一个 Denoise,而是既输入图像,也输入此时的步数 step
在 Denoise 网络中,主要完成:
- Noise predictor 通过输入的图像 image 和步数 step 预测一个噪声 noise
- 输入图像减去预测的噪声 noise 得到输出去噪图像
为什么要预测噪声?产生 noise 和产生 image 的难度是不一样的,产生 noise 要简单
如何去训练 noise predictor?
训练的资料是人工创造出来的,从数据集中随机采集一张图像出来,然后随机采样一个高斯噪声,图像相加得到有噪声的图像。然后持续添加噪声,步数和去噪一样。这个加噪的过程称为前向过程(forward process / Diffusion Process)
此时步数相同的两个过程的图像,reverse process 中的是输入图像,forward process 中的是标签
Text-to-Image
像 stable diffusion 等模型,训练数据集来自于 LAION 数据集,总共有 5.85B 张图像,并且是文字-图像成对的资料
Denoise 模块的输入是 image,text,step
Stable Diffusion
框架组成:
Text Encoder:将文本转为向量
生成模型:将向量和噪声生成一个中间产物(图片的压缩版本,可以看懂也可以看不懂)
Decoder:将中间产物转为图像
三个部分分开训练,然后合起来再微调
Stable Diffusion 结构
DALL-E 和 Imagen 都是类似结构
Encoder
衡量 Encoder 的好坏有两个指标:
- FID:Frechet Inception Distance
- 首先有一个 Pre-train 的 CNN model,然后将输入图像输入到其中,不经过最后 softmax 这一层而直接输出。将这个输出看作是一个 Gaussian 分布,同时也把原来的图像看作是 Gaussian 分布,计算这两个分布的 Frechet distance 越小越好,需要 sample 大量的样本
- CLIP:Contrastive Language-Image Pre-Training
- 在 400million image-text pairs 中训练出来,其中有一个 Text-Encoder 和 Image-Encoder。将产生的图像和文字分别丢进去,两个 encoder 产生的向量的距离有多大。越小越好
Decoder
不需要文字和图像的 pair 的 data,不需要文字输入
如果中间产生的图像是小图,则训练 Decoder 只需要把图像及其缩小版作为训练数据集
如果中间产生的是 latent representation,则需要训练一个 Auto-Encoder,Encoder 将图像转为 Latent Representation,然后再通过 Decoder 还原为原图像,然后就将 Decoder 拿出来用
Generation Model
- 如果中间产物是 Latent Representation:
将训练的 Auto-Encoder 中的 Encoder 拿出来,产生一些 Latent representation,将噪声加入到这些 Latent Representation 中。然后 train 一个 noise predictier 在 Latent Representatio n 上进行训练。然后 Denoise 的输入是中间产物和文本向量
原理解析
![]http://cdn.zghhui.me/img//cdn.zghhui.me/img/Pasted image 20231227161621.png)