Stable Diffusion 笔记一:网络结构拆解

SD由三大组件组成:VAE,CLIP,Unet。

一VAE:

VAE是Variational Autoencoder的缩写,中文名变分自编码器,是一种基于深度学习的生成模型。

1潜空间图片与像素图片:

像素图片是正常使用的图片,通常包含主体的物体人物角色,和多余的部分空白背景等与主体无关的噪声。

潜空间图片可以理解为是像素图片在高维空间的另一种表达,是像素图片的一种压缩表示。

SD生成的图片是潜空间图片(Latent image)而不是直接使用的图片(Pixel image)。

2VAE编码和解码的过程 

VAE编码器的部分作用是将像素图片编码转为潜空间图片,SD在此潜空间图片上进行迭代生成,迭代后的图片再由VAE解码器部分转换成像素级图片。

编码过程进行了8倍下采样操作,图片尺寸由512变为64,缩小8倍。

解码过程进行了8倍上采样操作,图片尺寸变为512,与目标的原始尺寸一致。

即编码前的图片尺寸与解码后的图片尺寸是match的。

Stable Diffusion 笔记一:网络结构拆解_第1张图片

3其他:

潜空间图片通道数目为4是先人实验结论得出的。

4 VAE编码过程:

Stable Diffusion 笔记一:网络结构拆解_第2张图片

原始像素图片经过3个 ResidualBlock+DownSample 进行了8倍下采样操作。

再经注意力部分(Attention Block)转换为潜空间图片。

VAE主要的结构是这个注意力模块,存疑?

这个地方也是耗费大量显存的部分。

解码的过程是这个流程反过来。

二CLIP

CLIP的将promt转换成可以用于SD用于生成图片的词向量格式。

1 流程:Stable Diffusion 笔记一:网络结构拆解_第3张图片

文字输入到SD的提示词如:a girl in white dress,

使用tokenizer跟进词库将单词转换为数字即tokens,如:a girl in white dress, -->[0,21,5,128,64]

再通过embedding将tokens转换成768维的特征向量。每一个数字转换成768维的向量。

最后通过Transformer Block 将向量变换转换成可以输入到后续unet的feature map。

2 Transformer 分为 Transformer Encoder 和  Transformer Decoder

Clip中只使用了Transformer Encoder的结构。

Stable Diffusion 笔记一:网络结构拆解_第4张图片

三U-net

1网络结构图:

Stable Diffusion 笔记一:网络结构拆解_第5张图片

U-net共套了4成这样的网络结构,第4层没有中间的middle Block:Down-->Up的部分。 

2注意力模块的两种形式:

Stable Diffusion 笔记一:网络结构拆解_第6张图片

 Stable Diffusion 笔记一:网络结构拆解_第7张图片

 自注意力模块的输入和输出都是自己。

交叉注意力模块的输入一部分是自己,另一部分是其他的一些信息。

3Transformer Block 的encoder和decoder

Stable Diffusion 笔记一:网络结构拆解_第8张图片

 Stable Diffusion 笔记一:网络结构拆解_第9张图片

 Encoder结构只使用了自注意力模块,Decoder结构使用了两种注意力模块。

Unet里使用的是TransformerDecoder 

 

你可能感兴趣的:(stable,diffusion,笔记)