02:从文生图初窥Stable Diffusion,一键玩转AI绘画

文章介绍了StableDiffusion的架构,特别是文生图部分,通过CLIP处理文本提示词,tokenizer分词转换,Embedding生成向量,Texttransformer生成conditioning,noisepredictor驱动图片生成,以及U-Net在Latent空间中的作用。
摘要由CSDN通过智能技术生成

前言

Stable Diffusion是一个什么架构呢,或者说是由哪些部分构成,各自发挥着怎么样的作用。我们就先从文生图开始探索

文生图

我们打开Stable Diffusion的webui,然后选择Stable Diffusion模型,然后选择VAE模型,CLIP终止层数选择默认为2。

然后在文生图的提示词里面写入:美女,动漫风格,long hair,blue_hair,purple eyes,4K这些文字,在(里面的英文是自动转换的)。然后就是下面的参数:

  1. 迭代步数:默认为20,这里我调成了30
  2. 采样方法:DPM++ 2M Karras
  3. 提示引导词:默认值0.7
  4. 随机数种子:随机数种子一致,同样配置生成的图片才能一样。

然后点击生成,Stable Diffusion就生成了一张图片。

那么,上面配置的众多参数是干什么的?Stable Diffusion是如何通过众多参数生成的一张图片?带着这些问题我们来学习一下Stable Diffusion。

CLIP

我上面输入了美女,动漫风格,long hair,blue_hair,purple eyes,4K这些文字,在Stable Diffusion被称作text prompt,即文本提示词。但是Stable Diffusion肯定不认识你这些单词,所以就要经过CLIP一系列的内部处理。

CLIP是Open AI开发的一种深度学习模型,Clip 是图像编码器和文本编码器的组合,用于生成任何图像的文本描述。所以CLIP的作用就是将我们输入的提示词,转换成Stable Diffusion可以识别的内容(对应生成图像的文本向量),CLIP处理流程如下:

Tokenizer

首先是tokenizer,将我们输入的提示词,分词之后再转换成一个个数字。但是tokenizer只能分在训练时见过的单词,加入你输入一个dreambeach,但是clip中只有见过dream和beach,这样就将你的一个单词分为两个,成为两个token,所以说一个单词对应的不一定是一个token

上面的例子中,我输入的其实也没有32个单词,但是提示词已经是32个了,后面的75是token的限制个数,但是现在已经没有限制了,如果超过75他就自动扩展到150,以此类推。

Embedding

然后每个token都会被转换成为一个768维度的向量,被称为Embedding,每个token在clip中都对应着唯一的Embedding,和token一样,Embedding 在clip模型的训练学习阶段,就是被固定的。

Embedding在也是被称作 textual inversion(文本反演)模型微调的一种技术手段,这里的话只做一个简单的了解。我翻阅了一些资料,对Embedding有以下的描述:

  1. 万物皆可嵌入:用向量表示物体
  2. Embeddings 是一种将现实世界的对象和关系表示为向量的密集数值表示形式。向量空间量化了类别之间的语义相似性。靠近彼此的嵌入向量被认为是相似的。
  3. 例如,man、gentleman和guy的嵌入几乎相同,因为它们可以互换使用

总的来说就是:Embedding代表一个物体、一个描述、一个样式等等。找到合适的Embedding可以触发任意的对象和样式

Text transformer

Embedding需要由Text transformer进行进一步处理,生成conditioning。然后被noise predictor(噪声预测器)消费,用作生成图片的condition,这样才能控制图片生成的最终结果。

那么noise predictor是什么?简单地说就是生成图片的,你输入的text prompt在经过clip转换成conditioning之后,就引导noise predictor去生成图片。如果要说到生成图片的过程的话,就不得不提Stable Diffusion的正向扩散和逆向扩散了,所以下一篇文章就写一写正向扩散和逆向扩散。

这里先提一下noise predictor是一个U-Net model,U-NET是什么,这个后面详细学一下再讲。

画图总结

我们在开篇讲了Stable Diffusion的优势在与latent space计算,所以U-Net model是在潜空间计算的。

中间空白的部分在后面的学习过程中逐渐填补。

结语

这就是文生图中,从输入文本到Latent空间的一个流程,主要讲了clip的处理流程,同时也是conditioning的生成流程。里面的noise predictor和U-Net是本文中留下要学习的地方。所以下一篇文章就主要写一写noise predictor。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值