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.hqwc.cn/news/62563.html

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

相关文章

什么是设计模式?

目录 概述: 什么是模式!! 为什么学习模式!! 模式和框架的比较: 设计模式研究的历史 关于pattern的历史 Gang of Four(GoF) 关于”Design”Pattern” 重提:指导模式设计的三个概念 1.重用(reuse)…

Linux 内存管理新特性 - Memory folios 解读 | 龙蜥技术

本文内容基于 Linux 5.16,folio 基础部分开始合入。截止到目前 Linux 6.5,folio 已经有很大进展,会在后续文章中介绍。作者:徐宇。 01 folio [ˈfoʊlioʊ] 是什么 引用 LWN: Memory folios :https://lwn.net/Articl…

nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6引起的online表单开发的数据库导入出错解决

更多功能看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 nbcio-boot因升级…

【Spring专题】Bean的声明周期流程图

目录 前言阅读指引 流程图一、之前推测的简单流程图(一点点参考)*二、Bean生命周期流程图(根据Spring源码自结)*三、阶段源码流程图(不断更新) 前言 我向来不主张【通过源码】理解业务,因为每个…

NZ系列工具NZ01:64位系统VBA二维码应用技术

【分享成果,随喜正能量】汗水能浇出成功的鲜花,拼搏能赢来胜利的喜悦,人生不易,累也过,闲也过,只要能充实就是最好过,有也过,没也过,为什么你不看看众生怎么过&#xff0…

Bert详细学习及代码实现详解

BERT概述 BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。在大型语料库(Wikipedia BookCorpus)上训练一个大型模型(12 层到 …

springBoot整合RabbitMq实现手动确认消息

如何保证消息的可靠性投递? 1.保证生产者向broke可靠性投递,开启ack投递成功确认,如果失败的话进行消息补偿 /*** author yueF_L* date 2023-08-10 01:32* ConfirmCallback:消息只要被 RabbitMQ broker 接收到就会触发confirm方…

【React学习】—类的基本知识(五)

【React学习】—类的基本知识&#xff08;五&#xff09; <script>// 创建一个Person类class Person{//构造器方法constructor(name,age){this.namename;this.ageage;}//一般方法speak(){//speak方法一般放在哪里&#xff1f;类的原型上&#xff0c;供实例使用//通过Pers…

什么是DNS的缓存?

DNS 缓存是一个临时的数据库&#xff0c;存储在计算机或网络设备&#xff08;如路由器&#xff09;上&#xff0c;用于保存最近的 DNS 查询结果。这种缓存机制可以加速后续的相同查询&#xff0c;因为设备可以直接从缓存中提取先前的查询结果&#xff0c;而不需要再次到外部的 …

SpringBoot自动装配及run方法原理探究

自动装配 1、pom.xml spring-boot-dependencies&#xff1a;核心依赖在父工程中&#xff01;我们在写或者引入一些SpringBoot依赖的时候&#xff0c;不需要指定版本&#xff0c;就因为有这些版本仓库 1.1 其中它主要是依赖一个父工程&#xff0c;作用是管理项目的资源过滤及…

【刷题笔记8.10】LeetCode题目:有效括号

LeetCode题目&#xff1a;有效括号 1、题目描述&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同…

CTFSHOW 文件包含

目录 web78 php://filter web79 data://text/plain web80 日志文件包含 web81 web82-86 session 文件包含 web87 死亡代码 绕过 rot13 base64 rot13 base64 web88 web78 php://filter <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-09-16 10:…