那么文字是怎么转换成Diffusion的输入的呢?加入文字后 Diffusion 又有哪些改变?下图可以找到答案。
实际上 Diffusion 是使用Text Encoder生成文字对应的embedding(Text Encoder使用CLIP模型),然后和随机噪声embedding,time step embedding一起作为Diffusion的输入,最后生成理想的图片。我们看一下完整的图:

token embedding、随机噪声embedding、time embedding一起输入diffusion
上图我们看到了Diffusion的输入为token embedding和随机embedding,time embedding没有画出来。中间的Image Information Creator是由多个UNet模型组成,更详细的图如下:

可以看到中间的Image Information Creator是由多个UNet组合而成的,关于UNet的结构我们放在后面来讲。
现在我们了解了加入文字embedding后 Diffusion 的结构,那么文字的embedding是如何生成的?接下来我们介绍下如何使用CLIP模型生成文字embedding。
CLIP 在图像及其描述的数据集上进行训练。想象一个看起来像这样的数据集,包含4 亿张图片及其说明:

图像及其文字说明
实际上CLIP是根据从网络上抓取的图像及其文字说明进行训练的。CLIP 是图像编码器和文本编码器的组合,它的训练过程可以简化为给图片加上文字说明。首先分别使用图像和文本编码器对它们进行编码。

然后使用余弦相似度刻画是否匹配。最开始训练时,相似度会很低。

然后计算loss,更新模型参数,得到新的图片embedding和文字embedding

通过在训练集上训练模型,最终得到文字的embedding和图片的embedding。有关CLIP模型的细节。
前面已经介绍了如何生成输入文字embedding,那么UNet网络又是如何使用的?实际上是在UNet的每个ResNet之间添加一个Attention,而Attention一端的输入便是文字embedding。如下图所示。

更详细的图如下:
