Stable Diffusion CLIP

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可以通过大量的弱标签数据学习,得到强大的能力。

CLIP的训练采用对比学习的方式,一个batch的数据互为负标签,具体的损失计算可以去看原论文。text encoder都是Transformer结构;image encoder,作者尝试了多种结构ResNet和ViT。

CLIP应用

在sd生成图像时,仅仅使用了CLIP的test encoder,将提示词转为text embeddings,嵌入text embeddings的方式为cross attention。Self Attention的查询、键和值都来自同一个输入序列,而cross attention的查询来自一个输入序列,而键和值来自另一个输入序列;sd中查询来自UNet,键和值来自condition embedding,也就是提示词的语义信息。

CLIP的image encoder能用来反推语义信息,输入为一个图片,输出为描述图片中内容的text。这一能力也被集成在sd webUI,在不知道该如何写提示词的时候,可以将样图放进去学习反推的text。

sd webUI中有一个可以设置的参数,CLIP终止层数,可以设置0-12,我还不理解这个参数的含义,带着这个问题,即将开始sd中UNet的学习。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值