CLIP论文精度

CLIP论文精度

  1. Zero-shot

  2. CLIP多模态模型
    在这里插入图片描述

  3. Image Endecoder是一个图片编码器,既可以是ResNet,也可以是Vision Transformer.

  4. Text Encoder和Image Encoder产生的两组特征进行对比学习(无监督训练)

  5. 分类头?“分类头” 是指网络结构中用于执行具体分类任务的一组层,将网络提取的特征转化为分类或检测结果。

  6. CLIP训练好后,没有使用微调,所以也就没有分类头,而利用它做推理的过程是借用了自然语言处理(NLP)的方法,也就是prompt template.

  7. 把每个分类类别变成相应的句子,句子通过之前训练好的文本编码器Text Encoder后就会得到对应数量文本的特征。做这一步的原因是因为在训练过程中,输入到Text Encoder中的是一个句子,为了保证模型输出的效果,所以采用输入形式的一致。

  8. 关于如何将分类的每个标签变成一个句子,OpenAI也提出了prompt engineering和prompt ensemble这两种方式来提高模型的准确率。

  9. 在推理的过程中,对于输入的图片,经过ImageEncoder后,得到图片特征,然后跟所有的文本特征去计算一个cosine similarity(相似性),将与图片最相近的一个文本挑出来,完成分类任务。

  10. categorical label限制。需要在训练或者推理时,提前准备一个标签的列表,以编写分类头。而CLIP则是摆脱了这种限制。

  11. CLIP迁移性非常强,因为他学习到的语义性强。

  12. CLIP的应用:图像生成、物体检测和分割、视频检索clifs

> Abstract

  1. CLIP出来前,先进的视觉系统训练都需要一个提前定义好的标签集合,但采用这样有限制性的监督学习很可能会模型的泛化性。
  2. 所以CLIP从NLP中得到监督信息,因为本文描述的监督信号非常广。
  3. CLIP使用4亿个文本-图像训练集去进行了大模型的训练。生成的模型可以直接用于下游的Zero-shot推理。
  4. OpenAI公开了CLIP的预训练模型和推理代码,但没公开预训练代码。

> Introduction

  1. 从原始的文本里去预训练一个模型在NLP领域取得了成功。(如GPT,它的模型架构同样也是与下游任务无关的,所以直接应用在下游应用时,无需去设计分类头等特殊处理。)
  2. 所以CLIP将NLP里面的这套框架应用到了视觉里面。
  3. 自监督学习:transformer、对比学习、掩码填空、自回归。
  4. CLIP主打泛化性。

> Approach

  1. 利用自然语言的监督信号来训练一个比较好的视觉模型。好处:

    • 不需要标注数据,只需要文本-图片配对集。
    • 训练时,图片和文字绑定,所以学习到的是一个多模态特征。
  2. Transformer出现后,为NLP带来革命性的改变,开始使用具有上下文语义环境的学习方式去替代传统且复杂的Topic model和n-gram等。让其可以比较方便地进行跨模态训练。

  3. 大数据集:WebImageText:WIT

  4. 由于数据集巨大,训练成本高时间长,所以训练效率对多模态的训练效果有直接影响。所以CLIP由于训练效率的原因,使用了对比学习的方法,而非预测性的方法。

  5. 仅仅把预测型的目标函数改为对比型的目标函数,训练效率就提升了4倍。
    在这里插入图片描述

  6. 模型预训练伪代码:与其他对比学习没有太大区别,主要是将单模态正样本替换成了多模态正样本。
    在这里插入图片描述

    • CLIP数据集较大,不太会产生过拟合的情况。
    • 它在最后的投射中(表示和对比学习层之间)仅使用了线性的投射层。
    • 同时由于数据集太大,也不需要做过多的数据增强(?),唯一使用的是随机的剪裁。
    • 由于模型太耗时,不好做微调,所以将对比学习中的超参数temperature在模型中重新设置为可学习的参数。
  7. 训练过程:
    视觉方面:训练了8种模型,ResNet-50,ResNet-101,和三个基于EfficientNet-style model改进的ResNet变体。同时还使用了3个Vision Transformers,包括ViT-B/32,ViT-B/16,ViT-L/14。

    • 32 epochs。

    • 使用Adam optimizer优化器

    • 对超参数进行了grid searches,random search或者manual tuning。

    • bitch size = 32768

    • 使用了混精度训练

    • 工程上的问题:在这里插入图片描述

    • 训练Vision transformer比训练残差网络高效。

> Experiments

  1. Zero-shot Transfer:

    • 动机:一旦借助文本训练好了这个又大又好的模型之后,就可以使用文本做引导,去灵活地做zero shot的迁移学习。而不必再进行微调。
    • 推理过程:
  2. Prompt engineering and ensembling:

    • Prompt是在微调或者直接推理时用的一种方法。
    • 需要使用Prompt,是因为1.单个单词具有歧义性。2.预训练的时候输入是文本信息,而非单词,为了防止出现分布偏移(distribution gap)问题。
    • 所以作者使用Prompt template A photo of a {label}来描述推理时的输入,可以使模型准确率得到提升。
    • 如果你已经提前知道类别,那么可以添加更多的提示词来使模型的输出更加准确。
    • Prompt ensemble就是利用多段提示词,最后将结果聚合起来。在这里插入图片描述
  3. few-shot transfer(每个类别拿出少量图片来做微调):将CLIP里面的图片编码器拿出来“冻住”,去做linear probe(对最后的分类头进行训练)。

  4. 如果下游任务用全部的数据而不是zero/few shot:

    • 方法1:linear probe
    • 方法2:fine-tune ,把整个网络都放开,直接去做端对端的学习。比linear probe更灵活、数据集大的时候效果更好。
  5. 而在CLIP中,作者专门使用了linear probe,是因为(1)CLIP本来就是用来研究跟数据集无关的预训练方式的,能能好地反映出预训练模型的好坏(2)linear probe不用调参来适应各个数据集。

Limitations

  1. CLIP在大多数模型平均下来来看,只是与比较简单的机械模型打成平手,而无法与state of the art(SOTA,最前沿)的结果媲美。
    扩大训练数据集是一个不太可能的方案(要达到SOTA的效果,需要再训练当前的1000X+),所以需要有新的方法在计算和数据上更加高效。
  2. CLIP在细分类任务和抽象概念的处理上表现得较差。
  3. CLIP的泛化性较好,但推理数据集不能out-of-distribution。
  4. 虽然CLIP可以用zero-shot去做推理,但仍然是从给定的类别里去做的选择。所以OpenAI还是想将其作为生成式的模型。
  5. 数据利用率不高效。(预训练)
  6. 数据没有经过清洗,可能会带着社会的偏见。

Conclusion

  1. CLIP的宗旨就是想把NLP领域当中与下游任务无关的训练方式带到其他领域中去。
  2. CLIP方法总结:在预训练阶段使用对比学习,利用文本的提示去做zero shot的迁移学习。在大数据和大模型的双向加持下,CLIP的效果能和之前精心设计的且是有监督训练出来的基线模型打成平手。

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

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

相关文章

matlab使用教程(13)—稀疏矩阵创建和使用

使用稀疏矩阵存储包含众多零值元素的数据,可以节省大量内存并加快该数据的处理速度。sparse 是一种属性,可以将该属性分配给由 double 或 logical 元素组成的任何二维 MATLAB 矩阵。通过 sparse 属性,MATLAB 可以: • 仅存储矩…

openGauss学习笔记-37 openGauss 高级数据管理-事务

文章目录 openGauss学习笔记-37 openGauss 高级数据管理-事务37.1 语法格式37.2 参数说明37.3 示例 openGauss学习笔记-37 openGauss 高级数据管理-事务 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。ope…

SpringBoot案例-部门管理-删除

目录 查看页面原型,明确需求 页面原型 需求 阅读接口文档 思路分析 功能接口开发 控制层(Controllre类) 业务层(Service类) 持久层(Mapper类) 接口测试 前后端联调 查看页面原型&a…

全面讲解|DCMM数据管理能力成熟度及各地政策汇总

信息技术与经济社会的交汇融合引发了数据爆发式增长。数据蕴含着重要的价值,已成为国家基础性战略资源,正日益对全球生产、流通、分配、消费活动以及经济运行机制、社会生活方式和国家治理能力产生重要影响。数据价值发挥的前提是管理好数据,…

docker 学习笔记 (持续更新)

一些基础概念 Docker 入门教程 - 阮一峰的网络日志 什么是image文件? Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。…

13_Ansible role、创建目录结构、Roles依赖关系;Playbook参考资料:facts、with_item、jinja模板、role角色

16.Ansible role 16.1.Ansible Roles介绍 16.2.创建目录结构 16.3.Ansible Roles依赖关系 17.其它参考资料 17.1.Playbook参考资料 17.2.Ansible facts 17.3.判断语句 when 17.4.with_items 17.5.ansible jinja模板 17.6.ansible role角色 17.7.变量其它参考文档 16.Ansible r…

【Codeforces】 CF1734E Rectangular Congruence

题目链接 CF方向 Luogu方向 题目解法 暂时不考虑 b i b_i bi​ 的限制 考虑构造 a i , j i j a_{i,j}ij ai,j​ij, 那么 a r 1 , c 1 a r 2 , c 2 r 1 c 1 r 2 c 2 , a r 1 , c 2 a r 1 , c 2 r 1 c 2 r 2 c 1 a_{r1,c1}a_{r2,c2}r1c1r2c2,\;a_{r1,c2}…

设计模式(5)代理模式

一、介绍: 【Subject/抽象角色】定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy 【RealSubject/真实角色】定义Proxy所代表的真实实体 【Proxy/代理角色】保存一个引用使得代理可以访问实体,并…

题目:2319.判断矩阵是否是 X 矩阵

​​题目来源: leetcode题目,网址:2319. 判断矩阵是否是一个 X 矩阵 - 力扣(LeetCode) 解题思路: 遍历矩阵,对于每一个节点,先判断是否处于主对角线或副对角线上,然后判…

LVGL学习笔记 28 - 键盘keyboard

目录 1. 设置关联文本框 2. 设置模式 2.1 LV_KEYBOARD_MODE_TEXT_LOWER 2.2 LV_KEYBOARD_MODE_TEXT_UPPER 2.3 LV_KEYBOARD_MODE_SPECIAL 2.4 LV_KEYBOARD_MODE_NUMBER 2.5 LV_KEYBOARD_MODE_USER_1 ~ LV_KEYBOARD_MODE_USER_4 3. 使能弹窗模式 4. 更改按键布局 5. 事…

后台管理系统

1.1 项目概述 简易后台管理系统是一个基于Vue3ElemrntPlus的后台管理系统,提供了用户登录、记住密码、数据的增删改查、分页、错误信息提示等功能,旨在协助管理员对特定数据进行管理和操作。 没有后台对接,数据源为假数据。 全部代码已上传G…

2023年的C++基础笔记

C 基本语法 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。 类 - 类可以定义为描述对象行为/状态的模板/蓝图。 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个…

elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言方法1方法2结论 前言 写项目的时候,遇到需要在动态表单中,将同一级输入框输入的内容计算出来,并动态显示,发现c…

4.3、Flink任务怎样读取Kafka中的数据

目录 1、添加pom依赖 2、API使用说明 3、这是一个完整的入门案例 4、Kafka消息应该如何解析 4.1、只获取Kafka消息的value部分 ​4.2、获取完整Kafka消息(key、value、Metadata) 4.3、自定义Kafka消息解析器 5、起始消费位点应该如何设置 ​5.1、earliest() 5.2、lat…

zookeeper总结

1.概念 Zookeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。Zookeeper 提供了一个类似于 Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息&…

MYSQL 根据某个字段计算排名查询

Mysql8.0前的版本 在MySQL中,你可以使用变量和子查询来计算基于某个字段的排名。以下是一个示例查询,假设你要根据某个字段(例如score)计算排名: SELECT rank, user_id, score FROM (SELECT user_id, score, rank : …

nginx编译以及通过自定义生成证书配置https

1. 环境准备 1.1 软件安装 nginx安装编译安装以及配置https,需要gcc-c pcre-devel openssl openssl-devel软件。因此需要先安装相关软件。 yum -y install gcc-c pcre-devel openssl openssl-devel wgetopenssl/openssl-devel:主要用于nginx编译的htt…

Redis心跳检测

在命令传播阶段&#xff0c;从服务器默认会以每秒一次的频率&#xff0c;向主服务器发送命令&#xff1a; REPLCON FACK <rep1 ication_ offset>其中replication_offset是从服务器当前的复制偏移量。 发送REPLCONF ACK命令对于主从服务器有三个作用&#xff1a; 检测主…

【C++】const_cast基本用法(详细讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…