[基础] CLIP

news/发布时间2024/5/19 10:19:33

Learning Transferable Visual Models From Natural Language Supervision

link
CLIP 全称 Contrastive Language-Image Pre-training

TL;DR

一种使用图文对做预训练的方法,影响力:打破传统人工标准类别Label的预训练方式。

Method


训练阶段:将图文样本对分别过Encoder抽取特征,一个大小为N的Batch内,属于同一组图文对为正样本对共N组,不同图文组成样本对为负样本共N^2 - N组,以此构建对比学习Loss。
推理阶段:将目标测试集所有类别标签使用Text Encoder抽取Embedding特征,图像特征用KNN来预测对应标签。
Code
论文中伪代码看得不是很明白,直接上源码:open_clip
Q:为什么需要算两次cross_entropy_loss然后再相加?
A:为了让每个样本能在其它卡的Batch中获取到更多的负样本对。比如,Text做为query时将其它卡的图像特征都拿到做负样本对,Image作Query时也把其它卡上的Text特征作为负样本对,那么这个两个Loss的值自然就不一样了。

    def get_logits(self, image_features, text_features, logit_scale):if self.world_size > 1:all_image_features, all_text_features = gather_features(image_features, text_features,self.local_loss, self.gather_with_grad, self.rank, self.world_size, self.use_horovod)if self.local_loss:logits_per_image = logit_scale * image_features @ all_text_features.Tlogits_per_text = logit_scale * text_features @ all_image_features.Telse:logits_per_image = logit_scale * all_image_features @ all_text_features.Tlogits_per_text = logits_per_image.Telse:logits_per_image = logit_scale * image_features @ text_features.Tlogits_per_text = logit_scale * text_features @ image_features.Treturn logits_per_image, logits_per_textdef forward(self, image_features, text_features, logit_scale, output_dict=False):device = image_features.devicelogits_per_image, logits_per_text = self.get_logits(image_features, text_features, logit_scale)labels = self.get_ground_truth(device, logits_per_image.shape[0])total_loss = (F.cross_entropy(logits_per_image, labels) +F.cross_entropy(logits_per_text, labels)) / 2return {"contrastive_loss": total_loss} if output_dict else total_loss

Experiment

ZeroShot效果已经超过FewShot Of其它SSL预训练方法了。

Conclusion

1.CLIP能充分利用大量图文样本作为图像与文本Encoder的预训练数据。
2.文章实验部分花了比较大篇幅证明了CLIP预训练的图像Encoder有SOTA级别的表征能力。
3.这种混合模态的预训练方式,在后续跨模态特征对齐过程中被广泛使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/16684364.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

TIDB使用介绍

TiDB概述 TiDB数据库官方网址:https://pingcap.com/zh/ ​TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容…

UML

UML图是什么? UML图中的UML是英文Unified Modeling Language的缩写,意为“统一建模语言”,是一种用于描述软件系统的视觉化工具。 UML提供了一套丰富的图形符号和规范,用于描述和可视化软件系统的结构、行为和交互,每种符号都有特定的用途和表达能力,以便开发人员能够更清…

给虚拟机配置ip

给虚拟机配置ip 添加网卡 明白自己的需求 如果是ping通主机ip 那么使用仅主机网卡就足够 如果需要ping外网(类似与百度之类的)则需要使用nat网卡 如图:添加的网络适配器顺序不固定,知道自己网络适配器对应的网卡(类似ens34)即可 查看网卡配置文件nat网卡配置文件仅主机网…

2020蓝桥杯c语言省赛B组

2020蓝桥杯省赛B组 1.回文日期 考点枚举+翻转完整代码 #include<bits/stdc++.h> using namespace std; bool rn(int t){if((t%4==0&&t%100!=0)||t%400==0)return true;return false; } 注意:是整体翻转不是年月日变成日月年! bool f(int n,int y,int r){ int h…

Xterminal-SSH管理工具推荐

官网 常做服务器取证、网站重建的童鞋们都知道,我们需要频繁的阅读、修改文件或是代码,而Xterminal就支持远程直接查看、修改文件同时它还支持常用命令的提示(虽说全部提示需要购买会员)同时也是支持本地终端的使用当然sftp是必然带的(点名某Shell)还可以添加常用命令,双…

数据结构-线性表

线性表 由n(n>=0)个数据特性相同的元素构成的有限序列,称为线性表。他是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。 特点:存在唯一一个被称为“第一个”的数据元素 存在唯一一个被成为“最后一个”的数据…