sd中的CLIP
sd主要包含了3大块,VAE、CLIP和UNet。其中CLIP(Contrastive Language-Image Pre-training)主要是用来将提示词转为tokens,通俗的说,就是把文字转化为可以模型可以理解的信息。这些语义信息是77*768大小的向量,在UNet阶段一步一步嵌入进去,这样生成的图片就能附带提示词的内容,嵌入方式为cross attention。对输入text提取text embeddings的方式可以是其他的,目前sd主要使用OpenAI的CLIP。
CLIP论文:https://arxiv.org/pdf/2103.00020.pdf
CLIP本身可以做很多下游任务,在论文中,主要展示的是zero-shot linear classifier,也就是没在数据集上微调的情况下,精度和ResNet-50相当,虽然在分类任务中 ResNet-50已经被很多模型超越了,但最先进的模型也没有与ResNet-50拉开太大的差距,从侧面反映了CLIP在分类任务中有着不俗的能力。
CLIP训练
CLIP的训练过程如下图所示,输入的数据是图片和文本,一个batch的数据包含N对(image,text),text是对image内容的描述,作者收集了大量的数据,其中很多text都是简短的,只有大致的描述,也就是说标签的强度很弱。总之,CLIP可以通过大量的弱标签数据学习,得到强大的能力。