CLIP论文总结

文章目录

  • NLP的积淀
  • Method
    • 1. 预训练的方法:放宽约束:对比学习
    • 2. 模型训练
      • 训练时间
  • Experiments
    • Motivation
    • Prompt:提示:也就是文本的引导作用
      • Prompt enginnering
      • Prompt ensembling
    • 对比实验

NLP的积淀

取之不尽用之不竭的自监督信号 = transformer + 自监督学习
训练出来的模型又大又好,而且又简单,泛化性又好,为多模态的训练铺平了道路。

只需要图片文本对,不需要标注, 数据的规模就很容易大起来了。

现在的监督信号是一个文本,而不是n选1的这种标签了,所以模型的输入输出啊,自由度就大很多。

  • 用文本监督信号,来帮助训练一个视觉模型 是非常有潜力的。

Method

1. 预训练的方法:放宽约束:对比学习

对比学习的目标函数 比 预测型的目标函数 训练效率提升了4倍

线性投射层,非线性投射层 对clip这种多模态没什么影响

数据增强:随机裁剪

把对比学习中的temperature这个超参数,设计为可学习的标量了,直接在模型训练过程中就被优化了,不需要当成一个超参数去调参

2. 模型训练

  • 5种ResNet + 3中Vision Transformer(ViT-B/32, ViT-B/16, ViT-L/14)
  • 32 epoch
  • Adam optimizer with decoupled weight decay regularization
  • Decay the learning rate using a cosine schedule
  • Initial hyperparameters: combination of grid searches, random search, and manual tuning on the basline ResNet50 model when trained for 1 epoch. 为了调参调的快一点,做超参搜索的时候都是用最小的resnet50做的,都只训练了一个epoch。
  • 超参数were then adapted heuristically for larger models due to computational constraints。对于更大的模型,这里就没有去调参了/
  • 训练的时候batch-size是32768
  • 混精度训练:加速训练,而且省内存
  • 为了进一步节省内存,还尝试了gradient checkpointing, half-precision Adam statistics, half-precision stochastically rounded text encoder weights
  • 计算相似度也是分配到不同的gpu去做的/
    经过这么多工程上的优化,CLIP才能训练起来
    OpenAI成员撰写:How to Train Really Large Models on Many GPUs?

训练时间

RN50x64: 18day 592 V100
Largest ViT: 12day 256 V100
就像vit论文中提到的:训练一个vit要比训练一个残差网络要高效
Trick: 在更大尺寸图片上finetune,从而获得性能提升

Experiments

Motivation

之前的自监督或者无监督的方法,主要研究的是特征学习的能力,他们的目标是学习一个泛化比较好的特征。
即使你学习到了很好的特征,当你运用到下游任务的时候,你还是需要有标签的数据去做微调。比如下游任务不好去收集数据,有distribution shift的问题。
如何能够训练一个模型,接下来就不再训练或者不再微调了呢?这就是作者研究zero-shot 迁移的动机
用文本做引导,去很灵活的做这种zero-shot的迁移学习。
在这里插入图片描述

  • 一个图的特征与N个文本特征做cosine similarity,再计算softmax概率分布
  • 文本端的编码不是按照顺序进行的,是批量进行的,所以clip的推理还是非常高效的,它并不会慢。

Prompt:提示:也就是文本的引导作用

  • 为什么要做prompt engineering和prompt ensembling呢?
    1. polysemy(多义性):一个单词可以有很多含义。只用一个单词做特征抽取,就会有歧义性出现了。
    2. 预训练的时候使用的是句子和图片,所以推理的时候如果输入单个单词,会出现distribution gap

Prompt enginnering

  1. 提供模板 A photo of a {label}
  2. 如果你知道先验信息,你可以加上一些解释。A photo of a {label}, a type of pet
    如果你想找ocr里面内容:把你想找的文字或数字加上双引号,他就会更明白你的意思了。他可能就知道,你就是想找双引号里面的内容了。

Prompt ensembling

多用一些这些推理的模板,然后把结果综合起来,ensemble一般都会给你更好的结果。
by the way, 作者用了80个ensembe的模板
Prompt_Engineering_for_ImageNet.ipynb

imagenet_templates = ['a bad photo of a {}.','a photo of many {}.', 图中有许多...'a sculpture of a {}.','a photo of the hard to see {}.', 比较小的物体'a low resolution photo of the {}.','a rendering of a {}.','graffiti of a {}.','a bad photo of the {}.','a cropped photo of the {}.','a tattoo of a {}.','the embroidered {}.','a photo of a hard to see {}.','a bright photo of a {}.','a photo of a clean {}.','a photo of a dirty {}.',...

数据集 -> 怎么选择模型 -> 怎么去做预训练 -> 怎么去做zero-shot推理

对比实验

作者在27个数据集上做了对比实验:
比较的双方:zero-shot clip; Linear Probe on ResNet50(是图片里面的基线)
clip 高于基线的就是绿色,反之蓝色的。
给物体进行分类的时候,clip一般表现都比较好
需要特定领域的知识来做分类的任务,可以用few-shot。
在这里插入图片描述

  • 难的任务用few-shot来做
    • BiT-M是一个很好的baseline
      在这里插入图片描述

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

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

相关文章

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性 将skip属性注释掉或者改为false 如果为true,则工程找不到主启动类

Python print 高阶玩法

Python print 高阶玩法 当涉及到在Python中使用print函数时,有许多方式可以玩转文本样式、字体和颜色。在此将深入探讨这些主题,并介绍一些print函数的高级用法。 1. 基本的文本样式与颜色设置 使用ANSI转义码 ANSI转义码是一种用于在终端&#xff0…

C#中的静态字段double.Epsilon

double.Epsilon 是C#中的一个静态字段,表示 double 数据类型的最小可表示的正数值。它的值为 4.94065645841247e-324。 在浮点数表示中,存在着精度有限的问题,即使是双精度浮点数 double 也无法表示所有的实数。由于浮点数的存储方式&#x…

【JVM线上故障排查】

对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的。各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题。楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢&…

【Vue3+Ts项目】硅谷甄选 — 品牌管理模块+平台属性管理模块

一、品牌管理模块 1.1 静态模块搭建 使用到element-plus的card、button、table、pagination等组件&#xff1a;src/views/product/trademark/index.vue <template><el-card><!-- 卡片顶部添加品牌按钮 --><el-button type"primary" size&quo…

k8s的集群调度---下

前情回顾 预算策略&#xff1a;过滤出合适的节点 优选策略&#xff1a;选择部署的节点 nodeName&#xff1a;硬匹配&#xff0c;不走调度策略。node01. nodeSelector&#xff1a;根据节点的标签选择&#xff0c;会走调度算法。 只要是走调度算法&#xff0c;在不满足预算策…

计算机图形学流体模拟 blender 渲染脚本

做流体模拟的时候&#xff0c;想要复现别人的成果&#xff0c;但是别人的代码都是每帧输出 ply 格式的文件&#xff0c;渲染部分需要自己完成 看了一下&#xff0c;似乎用 blender 是最简单的&#xff0c;于是记录一下过程中用到的代码 Blender 版本 4.0 批量导入 ply 假设…

LeetCode 31. 下一个排列

31. 下一个排列 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正…

【hcie-cloud】【17】华为云Stack灾备服务介绍【灾备方案概述、备份解决方案介绍】【上】

文章目录 前言灾备方案概述灾备的定义灾备的重要性故障和灾难对业务连续性带来的挑战灾备系统的衡量指标RTO与RPO分析 灾备等级标准数据中心容灾解决方案全景图云灾备服务总结架构华为云Stack灾备服务总览 备份解决方案介绍云备份服务介绍备份服务架构介绍云备份服务组件功能介…

Oracle19c文档 tnsnames.ora (三)

官网地址&#xff1a;Local Naming Parameters in the tnsnames.ora File 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 6.9连接数据部分 了解如何使用协议地址配置网络连接。 网络对象由协议地址标识。建立连接…

记录尝试投向不同的岗位——信息化专员——感想

1.保持随时响应的铃声 因为手机开启了远离手机的模式&#xff0c;然后会自动的把手机开启勿扰模式&#xff0c;导致对方打电话过来两次手机都没有响铃&#xff0c;本来就与岗位的匹配度低&#xff0c;然后没接到电话&#xff0c;这样连约面试的机会都没有。 人事提问 1.做过o…

210. 课程表 II(拓扑排序)

根据课程之间的关系构造一个有向图&#xff0c;题目要求求解是否能按照顺序学完所有课程&#xff0c;即判断这个有向图是否是有向无环图&#xff0c;如果是求出这个图的拓扑排序&#xff0c;如果不是返回[0] 求这个图的拓扑排序可以按照以下思路&#xff1a; 对于每个节点都有…

linux查找文件中的指定字符,并批量替换文件中指定字符

1、grep -rl “jquery-1.8.0.min.js” /opt 查找/opt 目录下存在jquery-1.8.0.min.js的文件 [rootlocalhost file1]# grep -rl "jquery-1.8.0.min.js" /opt /opt/file1/index.xhtml /opt/file2/index.xhtml /opt/shell.sh扩展&#xff1a;使用该命令可以查找文件中…

DevEco Studio预览时报错:Build task failed. Open the Run window to view details.

图一&#xff1a; 解决方案 图二 &#xff1a; 图三&#xff1a; 按照以上图示步骤&#xff0c;去掉图三中3号标记的勾选

Android-消息机制Handler

Handler的机制:Android 消息传递机制就是handler。在多线程的应用场景中&#xff0c;将工作线程中需更新UI的操作信息 传递到 UI主线程&#xff0c;从而实现对UI的更新处理&#xff0c;最终实现异步消息的处理。多个线程并发更新UI的同时 保证线程安全。Handler只是一个入口&am…

Android studio ListView应用设计

一、添加ListView控件: <ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintTop_toTopOf=&qu…

Android开发 基于ARouter开源的路由框架的YmRouter

一、ARouter的简介 ARouter是一个用于Android的路由框架&#xff0c;它能够帮助开发者实现组件之间的通信和页面跳转。 ARouter的核心原理是通过注解来标记和生成路由映射表。开发者只需要在需要跳转的页面上添加注解&#xff0c;然后在代码中通过路由表找到对应的页面进行跳…

/usr/bin/ld: error: ../../lib/libnvinfer.so: file too short

一、背景 在编译TensorRT官方的C库时&#xff0c;库里是提供了命令行工具bin文件夹下的可执行程序trtexec&#xff0c;可以直接进行onnx的fp16以及int8量化&#xff0c;但我模型的输入是5维&#xff0c;模型里面全都是3D卷积&#xff0c;所以要对底层头文件进行修改。重新编译…

Python词云wordcloud库不显示中文

博主之前在项目中发现Python的词云库wordcloud显示的都是方框&#xff0c;别担心&#xff0c;我有一个妙招让你的中文词云变得美观又清晰&#xff01; 问题 wordcloud是一个基于python的词云生成库&#xff0c;它可以让你用简单的代码创建出各种形状和颜色的词云图像。 word…