CLIP : Learning Transferable Visual Models From Natural Language Supervision

news2024/12/24 2:29:52

CLIP : Learning Transferable Visual Models From Natural Language Supervision

  • Introduction
  • Approach

Introduction

在raw的数据上自监督的训练模型,已经在NLP领域取得了革命性进展,这种模型需要收到硬件、数据的限制,但是能得到很好的迁移性,如GPT3的Zero-shot能力。

但是在视觉领域,还需要在固定的数据集上训练,如果有新的类别加入,还需要重新训练模型。

以前也有人尝试利用文本的语义来辅助训练视觉模型,但是效果都不是很好,作者指出原因可能是以前没有现在这么大的算力、模型(VIT)、自监督训练(也就是数据量可以很大但是不需要很贵的标注成本)。

在这篇文章,作者收集了4亿个(文本、图像)的数据对通过对比学习的方式对模型进行训练,发现在很多领域如OCR、分类等都能表现出很好的Zero-shot能力,有很好的泛化性,还发现模型的尺寸与精度成正比。

Approach

CLIP证明了在大量的数据集上做简单的预训练就可以在其他任意领域的下游任务表现出一个很好的Zero-shot的能力。

为了对齐预训练语言模型,其中描述图像的文本不单是一个单词,比如说dog-> a photo of dog,作者基于不同类别的图像构建70多个描述图像的模版。

请添加图片描述
在预训练模型时期,如上图,描述图像的文本与图像分别通过Text Encoder、与Image Encoder 转换成对应的向量,其中Ti表示一个batch中第i个图像表示的特征,Ii表示第i张图像表示的特征。

之后采用对比学习的形式对这两组特征做点乘,结果作为模型的logits,对角线的元素表示了对应的文本与图像的乘积,优化目标就是让对角线的元素softmax后的结果趋近于1,其他趋近于0,分别以图像与文本两个维度做cross_entropy_loss,然后对二者loss加权求和计算总loss。

伪代码如下:
请添加图片描述
在推理的时候,可以复用在预训练的时候的label,如果在别的领域做下游任务,可以自定义label。请添加图片描述
把我们定义好的N个label通过Text Encoder得到N个文本特征,图像输入Image Encoder得到这个图像的特征,然后把图像与N个文本特征做点乘,通过softmax得到类别概率。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法 DAY55 动态规划11 392.判断子序列 115.不同的子序列

392.判断子序列 本题可以直接用双指针解法。但是本题是编辑距离的入门题目,故采用动态规划解法为后序“编辑距离”类题目打基础。 本题与最大子序列非常相似,但不同的是s必须连续,t可以不连续。 五部曲 1、dp[i][j] 表示以下标i-1为结尾的字…

Seata介绍

介绍: Seata的设计目标是对这个业务无侵入,因此从业务无侵入的2PC方案开始的,在传统的2PC的基础上演进的。它把一个分布式事务拆分理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致性,要…

25.自定义注解

自定义注解 一、什么是注解 Annontation是Java1.5开始引入的新特征,中文名称叫注解。 它提供了一种安全的类似注释的机制,用来将信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序…

大数据技术之SparkSQL——数据的读取和保存

一、通用的加载和保存方式 SparkSQL提供了通用的保存数据和数据加载的方式。根据不同的参数读取,并保存不同格式的数据。SparkSQL默认读取和保存的文件格式为Parquet。 1.1 加载数据 spark.read.load 是加载数据的通用方式。 如果读取不同格式的数据,可…

如何编译DPDK静态库

阅读前面文章https://blog.csdn.net/qq_36314864/article/details/130243348,知道了哪些dpdk文件可以在windows下生成。 打开vs,新建一个生成静态库工程,在生成的lib文件中找到D:\dpdk-21.07\build\lib D:\dpdk-21.07\build\drivers找到对应的文件,并按照路径,新建筛选项…

【Vue学习笔记7】Vue3中如何开发组件

重点学习:vue3.0之组件通信机制defineProps(组件接收外部传来的参数)、defineEmits(向组件外部传递参数)。 1. 评级组件第一版 简单的评级需求,只需要一行代码就可以实现: "★★★★★☆…

SLAM面试笔记(5) — ROS面试

目录 1 ROS概述 2 ROS通信机制 问题:服务通信概念 问题:服务通信理论模型 3 常见面试题 问题:roslaunch和rosrun区别? 问题:什么是ROS? 问题:ROS中的节点是什么? 问题&…

挠性航天器姿态机动动力学模型及PD鲁棒控制

挠性航天器姿态机动动力学模型及PD鲁棒控制 1挠性航天器姿态机动动力学模型2挠性航天器姿态机动PD鲁棒控制2.1 动力学模型及PD控制律2.2仿真模型2.3 控制程序2.4 被控对象程序2.5 绘图程序2.6 结果 1挠性航天器姿态机动动力学模型 2挠性航天器姿态机动PD鲁棒控制 2.1 动力学模…

【NLP开发】Python实现聊天机器人(ChatterBot,集成web服务)

🍺NLP开发系列相关文章编写如下🍺: 🎈【NLP开发】Python实现词云图🎈🎈【NLP开发】Python实现图片文字识别🎈🎈【NLP开发】Python实现中文、英文分词🎈🎈【N…

澳大利亚兔灾和——栈?

一.背景 1859年,当一位叫托马斯奥斯汀的农民收到英国老家送来的24只野兔并将它们放归农场的时候,他绝对意想不到,这些看似人畜无害的小兔子,竟为古老的澳洲大陆带来一场巨大的生态破坏。到20世纪初,澳大利亚的兔子数量…

操作系统内存管理(上)——内存管理基础

一、内存的基本知识 1.什么是内存?有什么作用? 内存可存放数据。程序执行前先放到内存才能被CPU处理——缓和CPU和硬盘之间的速度矛盾。 给内存的存储单元编址。如果计算机按字节编址,则每个存储单元大小为1字节。即1B8b(8个二进…

智能医院导航导诊系统,门诊地图导航怎么做?

现在很多医院都是综合化大型医院,有很多的科室,院区面积也逐渐扩大,一方面给病患提供了更为全面的医疗资源,另一方面,医院复杂的环境也给病患寻医问诊带来了一定的困扰。电子地图作为大家最喜闻乐见的高效应用形式&…

Python的socket模块及示例

13.2 socket模块 socket由一些对象组成,这些对象提供网络应用程序的跨平台标准。 13.2.1 认识socket模块 socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或应答网络请求,使主机间或一台计算机上的进程间可以通信。sock…

Android 路由框架ARouter源码解析

作者:小马快跑 我们知道在使用ARouter时,需要在build.config里配置: annotationProcessor com.alibaba:arouter-compiler:1.2.2并且知道annotationProcessor用来声明注解解析器,arouter-compiler用来解析ARouter中的各个注解并自…

代码管理记录(一): 码云Gitee代码提交和维护

文章目录 Gitee介绍登录地址代码提交 Gitee介绍 Gitee 是一个类似于GitHub的代码托管平台,是中国的开源社区和开发者社区。它为开发者提供了基于Git的代码托管、协作、部署、代码质量检测、漏洞扫描、容器镜像等服务,同时也提供了一系列的个人资料和社交…

gitlab使用docker简单快速部署

文章目录 前言一、下载gitlab镜像二、安装步骤1.创建docker-compose文件2. 启动及登陆 三、配置页面总结 前言 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。本文主要用来记录如何使用docker快速搭…

c#笔记-类成员

声明类 类可以使用帮助你管理一组相互依赖的数据,来完成某些职责。 类使用class关键字定义,并且必须在所有顶级语句之下。 类的成员只能有声明语句,不能有执行语句。 class Player1 {int Hp;int MaxHp;int Atk;int Def;int Overflow(){if (…

七大排序算法一文通(易懂图解+优化代码)

目录 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1 递归实现——Hoare版 6.2 递归实现——挖坑法 6.3 非递归实现 6.4 优化 7.归并排序 7.1 归并排序——递归实现 7.2 归并排序——非递归实现 8.复杂度以及稳定性 1.直接插入排序 …

一列数到中位数的总距离最小

一列数到中位数的总距离最小 3554.二进制(二进制数的加减法-转化为十进制运算再将结果转回二进制3565.完美矩阵1824.钻石收藏家(经典双指针) 3554.二进制(二进制数的加减法-转化为十进制运算再将结果转回二进制 输入样例&#xff…

i春秋 Misc Web 爆破-1

打开链接是PHP源码 代码审计: include "flag.php"; 表示文件中包含flag.php文件,即根目录下存在flag.php $a $_REQUEST[hello]; 命名一个变量a来接收超全局变量$_REQUEST(接收表单’hello’数据,请求一个为hello的参…