Stable Diffusion(SD)模型是由 Stability AI 和 LAION 等公司共同开发的生成式模型,参数量约 1B,可用于文生图、图生图、图像 inpainting、ControlNet 控制生成、图像超分等任务。
文生图任务是将一段文本输入到 SD 模型中,经过一定迭代次数生成符合文本描述的图片。例如输入“天堂,巨大的,海滩”,模型生成美丽沙滩的图片。
图生图任务在输入文本基础上再输入一张图片,模型根据文本提示将输入图片重绘以更符合文本描述。比如在之前生成的沙滩图片上添加“海盗船”。
输入的文本信息需通过“桥梁”CLIP Text Encoder 模型转换为机器数学信息。该模型作为 SD 模型中的前置模块,将输入文本信息编码,生成 Text Embeddings 特征矩阵,用于控制图像生成。
CLIP 模型包含 Text Encoder 和 Image Encoder 两个模型,在 Stable Diffusion 中主要使用 Text Encoder 模型。它将输入的文本 Prompt 编码转换成 Text Embeddings(文本的语义信息),通过 U-Net 网络中的 CrossAttention 模块嵌入 Stable Diffusion 中作为 Condition,对生成图像的内容进行控制与引导。目前 SD 模型使用的是[CLIP ViT-L/14]中的 Text Encoder 模型。
CLIP ViT-L/14 中的 Text Encoder 是只包含 Transformer 结构的模型,由 12 个 CLIPEncoderLayer 模块组成,模型参数大小是 123M,输出的 Text Embeddings 维度为 77x768。
以下是相关资源获取方式:
Stable Diffusion(SD)模型是由Stability AI和LAION等公司共同开发的生成式模型,总共有1B左右的参数量,可以用于文生图,图生图,图像inpainting,ControlNet控制生成,图像超分等丰富的任务,本节中我们以文生图(txt2img)和图生图(img2img)任务展开对Stable Diffusion模型的工作流程进行通俗的讲解。文生图任务是指将一段文本输入到SD模型中,经过一定的迭代次数,SD模型输出一张符合输入文本描述的图片。比如下图中输入了“天堂,巨大的,海滩”,于是SD模型生成了一个美丽沙滩的图片。SD模型的文生图(txt2img)过程而图生图任务在输入本文的基础上,再输入一张图片,SD模型将根据文本的提示,将输入图片进行重绘以更加符合文本的描述。比如下图中,SD模型将“海盗船”添加在之前生成的那个美丽的沙滩图片上。SD模型的图生图(img2img)过程那么输入的文本信息如何成为SD模型能够理解的机器数学信息呢?很简单,我们需要给SD模型一个文本信息与机器数据信息之间互相转换的“桥梁”——CLIP Text Encoder模型。如下图所示,我们使用CLIP Text Encoder模型作为SD模型中的前置模块,将输入的文本信息进行编码,生成与文本信息对应的Text Embeddings特征矩阵,再将Text Embeddings用于SD模型中来控制图像的生成:蓝色框就是CLIP Text Encoder模型,能够将输入文本信息进行编码,输出SD能够理解的特征矩阵
上面我们讲到CLIP模型主要包含Text Encoder和Image Encoder两个模型,在Stable Diffusion中主要使用了Text Encoder模型。CLIP Text Encoder模型将输入的文本Prompt进行编码,转换成Text Embeddings(文本的语义信息),通过前面一章节提到的U-Net网络中的CrossAttention模块嵌入Stable Diffusion中作为Condition,对生成图像的内容进行一定程度上的控制与引导,目前SD模型使用的的是[CLIP ViT-L/14](https://link.zhihu.com/?target=https%3A//huggingface.co/openai/clip-vit-large-patch14)中的Text Encoder模型。CLIP ViT-L/14中的Text Encoder是只包含Transformer结构的模型,一共由12个CLIPEncoderLayer模块组成,模型参数大小是123M,具体CLIP Text Encoder模型结构如下图所示。其中特征维度为768,token数量是77,所以输出的Text Embeddings的维度为77x768。下图是Rocky梳理的Stable Diffusion CLIP Encoder的完整结构图,大家可以感受一下其魅力,看着这个完整结构图学习Stable Diffusion CLIP Encoder部分,相信大家脑海中的思路也会更加清晰:下面Rocky将使用transofmers库演示调用CLIP Text Encoder,给大家一个更加直观的SD模型的文本编码全过程:
SD模型权重百度云网盘:关注Rocky的公众号WeThinkIn,后台回复:SD模型,即可获得资源链接,包含Stable Diffusion 1.4模型权重、Stable Diffusion 1.5模型权重、Stable Diffusion I npainting模型权重、Stable Diffusion 2 base(512x512)模型权重、Stable Diffusion 2(768x768)模型权重、Stable Diffusion 2 Inpainting模型权重、Stable Diffusion 2.1 base(512x512)模型权重、Stable Diffusion 2.1(768x768)模型权重、Stable Diffusion Turbo模型权重、S table Diffusion x4 Upscaler(超分)模型权重以及consistency-decoder模型权重。不同格式的模型权重比如safetensors格式、ckpt格式、diffusers格式、FP16精度格式、ONNX格式、flax/jax格式以及openvino格式等均已包含。SD保姆级训练资源百度云网盘:关注Rocky的公众号WeThinkIn,后台回复:SD-Train,即可获得资源链接,包含数据处理、SD模型微调训练以及基于SD的LoRA模型训练代码全套资源,帮助大家从0到1快速上手训练属于自己的SD AI绘画模型。更多SD训练资源使用教程,请看本文第六章内容。Stable Diffusion中VAE,U-Net和CLIP三大模型的可视化网络结构图下载:关注Rocky的公众号WeThinkIn,后台回复:SD网络结构,即可获得网络结构图资源链接。