【计算机视觉】CLIP

文章探讨了对比学习在图像和文本领域的应用,如CLIP和SimCLR,强调它们如何在无标签数据上学习特征。CLIP利用Transformer模型结合图像和文本,而SimCLR通过大数据和无监督学习进行正负样本对比。此外,文章还介绍了VIT的结构和工作原理,以及线性探针方法在预训练模型评估中的作用。
摘要由CSDN通过智能技术生成


对比学习——CLIP
clip本身也是对比学习。
大模型需要大数据,大数据标签怎么办?标注代价太大
你是我的正样本呢?还是我的负样本?没有标签,只做正负例的判断

常见的SimCLR 
打死也不自己标注数据,无监督   
对比学习中,bs 要非常大,原论文中 bs=8192(1个样本与另外8191个样本互为负样本)
注意:做的不是分类任务,对比学习仅需要分别两个样本是不是同一个东西。

图片:SimCLR
文本:SimCSE
文本的正样本不好做。 通过 dropout 来做正样本。 align表示同类之间的距离。(49408 每个字都是49408中的一个数,类似用256表示图像一样)
图像有数据增强,不用 dropout 了。
CLIP-文本和图像进行结合。

VIT

输入size,(4,3,256,256) ,为了序列化输入进 transformer 中,利用 patch 进行分块。patch_size=32。

(4,3,256,256) -> b c (h p1) (w p2) -> 4,3, 8 32 8 32   # 256/32=8

-> b (h w) (p1 p2 c) -> 4 64 3072  # 32*32*3=3072

4是 batchsize 是不变的。64是图像所划分的小块,相当于64个 token。

3072是每个小块的向量维度。 

 + pos_emb 位置编码 

经过transformer 特征提取后,得到 out # 4,64,512(64个位置)

to_cls_tokens(out) 求全局特征,cls_to_tokens=4,1,512

最终得到 4,65,512。。。走几个全连接, 得到260,128。

CLIP

zero shot 指没有在数据集训练过进行测试

从自然语言去学习图像特征的方法,利用自然语言的监督信号训练视觉模型,

linear-probe,一旦预训练的模型训练好了, 我们把它冻住,整个 backbone 骨干网络就不改变了,只是从这个 model 里抽特征,训练最后一层分类头,做分类任务。  

在 CLIP 中相当于,同一张图片,图像数据增强后,第一个图片 经过 VIT 进行特征提取,返回特征 query 160,128;第二个图片 经过 VIT 进行特征提取,返回特征 key 160,128

在batch=4的情况下,怎么算既有正样本又有负样本呢?

4个图片,分别是猫、狗、猪、鸭。key1,query1是猫通过图像增强得到的2个图片;key2,query2是狗通过图像增强得到2个图片。

key1,query1是互为正样本;

key2,query2是互为正样本;

(key1,key2) 、 (key1,query2) 都是负样本

但不知道通过 nt_xent_loss 是如何实现的

VIT里会更细致,具体到每个块(腿、眼睛)像不像。

260=4*65(全局特征1+64个位置特征?是叫位置特征吗?)

得到520*520的矩阵,代表每一个小块和其余小块的关系。不能考虑自己,去掉对角线,得到520*519。

temperature 温度系数,扩大 softmax 的差异。

正样本的标签是自动生成的。总长520。259配对0。

labels如下,518-259+1=260 

loss=F.cross_entropy(logits, labels, reduction='sum')

loss/=n # n=520,求平均损失

logits # 520,519 

labels # 259,260

CLIP

文本模型内部做完形填空,mask language model。-> enc_text

图像模型内容做 simCLR 利用vit做对比学习。-> enc_image

enc_text与enc_image再做对比学习

text_embeds=enc_text[;,0] # 0是'CLS',全局特征,4,512

images_embeds=enc_image[;,0] # 4,512,我理解应该是4,65,512求均值得到4,512   

# t - sequence dimension along text tokens
# i - sequence dimension along image tokens

text_to_iamge = einsum('t d, i d - > t i', text_latentes, image_latentes) * temp
# text_latentes 4,512
# image_latentes 4,512
# text_to_iamge 4,4 # 4个文本和4个图像之间的关系

image_to_text = rearrange(text_to_image, '... t i -> ... i  t')
# text_to_iamge 4,4 # 4个图像和4个文本之间的关系

QA

对比学习和孪生网络的区别

孪生网络要共享权重参数,公用一个网络结构;

但是对比学习两个模型可以一点都不一样,不用共享参数;
对比学习、自监督学习(Bert):都不需要标签


Q:两只不同的猫遇到了,不就是负样本,不就错了吗?
A:因为做的不是分类任务,对比学习是在看谁是我,谁不是我。
对比学习主要是在提取特征,为其他任务提供 backbone。

正样本都是数据增强得到的,对比学习是在学习提特征的能力


basemodel 都是基于分类任务做的,是否会限制住 model 的能力呢?对比学习就不会限制 。


Transformer 取代RNN\CNN 进入大模型时代
self attention 模块:核心内容是为输入向量的每个单词学习一个权重。通过给定一个任务相关的查询向量 query,计算 query和各个key 的相似性或者相关性得到注意力分布,即得到每个key 对应 value 的权重系数,然后对 value 进行加权求和得到最终的 attention 数值。
需要对 Q 和 K 进行点乘并除以维度的平方根,对所有向量的结果进行 softmax 处理,获得向量之间的关系。
 

【对比学习有多火?文本聚类都被刷爆了!通俗易懂的讲解让我直接悟了啊!】 https://www.bilibili.com/video/BV1iR4y1R7dH/?share_source=copy_web&vd_source=694333d73ad23f4f70f7df5508d4f30a

https://www.bilibili.com/video/BV1iR4y1R7dH/?spm_id_from=333.337.search-card.all.click&vd_source=dc27cbd311ff3ca278726381630036f0
对比学习、自监督学习(Bert):都不需要标签

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值