Clip:学习笔记

news2024/11/23 21:50:15

Clip


文章目录

  • Clip
  • 前言
  • 一、原理
    • 1.1 摘要
    • 1.2 引言
    • 1.3 方法
    • 1.4 实验
      • 1.4.1 zero-shot Transfer
      • 1.4.2 PROMPT ENGINEERING AND ENSEMBLING
    • 1.5 局限性
  • 二、总结


前言

阅读论文:
Learning Transferable Visual Models From Natural Language Supervision
CLIP 论文逐段精读【论文精读】
Github:
https://openai.com/research/clip
https://github.com/OpenAI/CLIP
知乎:
如何评价OpenAI最新的工作CLIP:连接文本和图像,zero shot效果堪比ResNet50?
OpenAI发布CLIP模型快一年了,盘点那些CLIP相关让人印象深刻的工作


一、原理

原理:
在这里插入图片描述
一个batch中,image encoder (可以是resnet,也可以是visual transformers)对应 text encoder 在矩阵中进行对比学习,蓝色对角线上的是正例样本,其余的都是负样本。推理的时候如何做到不需要imagenet的监督学习,就可以做到监督信号的呢?那是构造了prompt template, 原本的linear的1000个类,构造成 a photo of a [object label]经过text encoder(pretrain的 encoder),得到的向量和 image 经过 image encoder的向量进行求cosine similarity.

  • 针对prompt template的构造还有 prompt engineering和prompt ensmble两种方法
  • 比对学习需要大量的图片文本的数据集,openai收集了4亿对的数据集进行预训练

效果:迁移学习能力非常强,zeroshot在视觉数据集上效果很好,尤其是ImageNet上的效果,摆脱了categorical label的限制

The model transfers non-trivially to most tasks and is often competitive with a fully supervised baseline without the need for any dataset specific training. For instance, we match the accuracy of the original ResNet-50 on ImageNet zero-shot without needing to use any of the 1.28 million training examples it was trained on

https://openai.com/research/clip
在这里插入图片描述
和NLP的结合,CLIP学出来的视觉特征和语言描述的某些物体产生强烈的联系

有趣的应用:
styleCLIP
text 2 修改图片
CLIPDraw
text 2 简笔画的生成,抽象主义的
物体监测分割
open-vocabulary detector
视频检索clifs

1.1 摘要

imagenet 1000 类
CIFAR 10
CIFAR 100
目标监测
coco 80
语义分割
city scapes 19
视频
Kineitcs 400

想法
Learning directly from raw text about images is a promising alternative which leverages a much broader source of supervision.
对应的任务设计成:
We demonstrate that the simple pre-training task of redicting which caption goes with which image is an efficient and scalable way to learn SOTA image representations from scratch on a dataset of 400 million (image, text) pairs collected from the internet.
实验
在30个不同的CV datasets上做测试,迁移的效果非常好
开源的代码只有推理的部分,并没有预训练的部分

1.2 引言

The development of “text-to-text” as a standardized input-output interface (McCann et al., 2018;Radford et al., 2019; Raffel et al., 2019) has enabled task-agnostic architectures to zero-shot transfer to downstream datasets removing the need for specialized output heads or dataset specific customization

核心在于预训练的架构和下游任务无关,这样就不需要监督信号学习一个和下游任务相关的分类头。
NLP的那套预训练的方法:

These results suggest that the aggregate supervision accessible to modern pre-training methods within web-scale collections of text surpasses that of high-quality crowd-labeled NLP datasets

这个方法是很有效的,希望用到CV的相关任务中来。

作者从1999年的相关论文讨论到2021年
主要跟2017年的Learning visual n-grams from web data
有了transformer、完形填空自监督的学习信号后,有了VirTex\ICMLM\Con-VIRT,基于transformer做的后面的一些工作是想把一些弱的监督信号用起来:

Instead, more narrowly scoped but well-targeted uses of weak supervision have improved performance. Mahajan et al. (2018) showed
that predicting ImageNet-related hashtags on Instagram images is an effective pre-training task. When fine-tuned to ImageNet these pre-trained models increased accuracy by over 5% and improved the overall state of the art at the time. Kolesnikov et al. (2019) and Dosovitskiy et al. (2020) have also demonstrated large gains on a broader set of transfer benchmarks by pre-training models to predict the classes of the noisily labeled JFT-300M dataset.

好处是弱的监督信号的数据集大,因此,作者认为,使用gold-labels是很有限的,反而希望用上,那些取之不尽用之不竭的文本,即使用上了在模型层面还是很有局限性,主要是用静态的softmax作为分类头,缺乏zero-shot的能力。

Both works carefully design, and in the process limit, their supervision to 1000 and 18291 classes respectively. Natural language is able to express, and therefore supervise, a much wider set of visual concepts through its generality. Both approaches also use static softmax classifiers to perform prediction and lack a mechanism for dynamic outputs. This severely curtails their flexibility and limits their “zero-shot” capabilities.

之前的工作不行,主要是数据集的规模和模型的规模都要上去。accelerator years,所以作者团队先从数据集开始入手,收集了4对的文本图片对。模型层面从:resnet\efficient net\vision transformer(VIT Large),就提出了CLIP。单单视觉上的模型就用了8个,最大和最小的模型容量差了100倍。

作者怒刷30个数据集,看泛化性和迁移的效果。在做zero-shot之前呢,作者去看了linear-probe,为了进一步提供模型的学习能力,直接把主干网络冻住,训练最后一层的分类头,发现全方面碾压之前的方法。

1.3 方法

用上了deep contextual representations, like bert,就能利用上abundant source of supervision,
总结下来说:文本监督信号,帮助训练一个视觉模型,是很有潜力,前提是数据集量够大,目前能用的数据集:MS-COCO\Visual Genome,好归好,但是数据量太少了,JFT300M有3亿个样本、Instagram 有3.5billion。YFCC100标注质量太差了,有人去清晰了下,只身下15M了。

NLP那边的数据集来说和GPT2差不多的级别,CV和JFT300m还多了一个亿。WIT数据集。

之前训练的模型也还只是在1000类别上就已经如此的耗时了,更不用说是开放点视觉概念任务上了。作者提出:

In the course of our efforts, we found training efficiency was key to successfully scaling natural language supervision and we selected our
final pre-training method based on this metric

训练的效率视乎是训练自然语言监督信号的核心。

  • step1, similar to VirTex , jointly trained an image CNN and text transformer from scratch to predict the caption of an image, 结果:很慢
  • contrastive objectives can learn better representations than their equivalent predictive objective 比对学习目标比预测型的目标更加好学
  • 不仅如此,推理的速度更加快,快了4倍
    在这里插入图片描述
    橙色是将文本变成全局的特征,而不是逐字逐句的特征,再把约束放宽,推理速度又更近一步。
  • 伪代码
# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images [8, 224, 224, 3]
# T[n, l] - minibatch of aligned texts [8,512]
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter

# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]

# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)

# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)

# symmetric loss function
# SimCLR 到 BYOL, 一直到最新的MOCO V3 DINO这些工作都是用对称式的目标函数
labels = np.arange(n) 对角线上的元素
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

Figure 3. Numpy-like pseudocode for the core of an implementation of CLIP.

训练细节:

  • 数据集太大,不会导致over-fitting的问题
  • 从头预训练没有加载imagesnet权重和文本的权重
  • 也没有用非线性层的映射,在表示层和比对的embedding映射空间,这里只用了linear层
  • 移除了只采样图片文本的一个句子的功能
  • 简化了图片数据增强的功能,只采用裁剪这种方式
  • 对于比对学习中temperature parameter参数只是设置为可以学习的标量
  • 视觉部分,模型可以选择ResNET(还稍微做了一些修改) ,也可以选择visual transformers(VIT), 文本部分只是使用的transformers

. As a base size we use a 63M-parameter 12-layer 512-wide model with 8 attention heads.

  • BPE\49152词表、76的最大长度
  • 并在模型的宽度和深度做了一些简单的尝试
  • 5个resnet(50-101-50x4-50x16-50x64), 3个vit(32-16-14)
  • 模型训练的是32epochs,Adam优化器
  • 权重衰减、not gains, not biases
  • cosine schedule的lr
  • 只在resnet50做了grid searches 一个epoches,
  • 32768的batch_size, 天啊
  • 混精度训练、 gradient checkpointing、 half-precision Adam statistics、half-precision stochastically rounded text encoder weights
  • 相似度的计算也是放在不同的GPU上

题外话:openai热衷于GPT
GPT系列、DALL-E、Image gpt 和 openai codex

1.4 实验

1.4.1 zero-shot Transfer

Our focus on studying zero-shot transfer as an evaluation of task learning is inspired by work demonstrating task learning in the field of NLP
作者的核心就是使用一张图片,分别问1000个句子,之后做一个softmax, 就可以进行相对应的zero-shot了。
在这里插入图片描述
大幅度提升了效果

1.4.2 PROMPT ENGINEERING AND ENSEMBLING

主要的问题是词语的多义性,polysemy

When the name of a class is the only information provided to CLIP’s text encoder it is unable to differentiate which word sense is meant due to the lack of context

论文提出模板式:

A photo of a {label} to be a good default that helps specify the text is about the content of the image
如果知道更多信息,那效果会更好
For example on Oxford-IIIT Pets, using “A photo of a {label}, a type of pet.” to help provide context worked well. Likewise, on Food101 specifying a type of food and on FGVC Aircraft a type of aircraft helped too.

作者用了80个提示模板
https://github.com/openai/CLIP/blob/main/notebooks/Prompt_Engineering_for_ImageNet.ipynb

在这里插入图片描述
再做了27个数据集的实验:

  • clip的zero-shot,以及linear probe就是冻住主干,只训练最后一层的linear层
  • linear probe是基线版本,绿色是优于probe的,蓝色是低的
  • 物品的分类效果会更加好,更难的数据集,纹理、物体的计数会更加抽象,会更难
  • 难的任务,可能需要few shot
    在这里插入图片描述
  • few shot的实验也做了,横坐标是每个label使用的样本,纵坐标是20个数据集中的平均准确率,同时都是用的linear probe,clip冻住的是图片的encoder,
  • bit是专门为迁移学习所做的,当时最好的迁移学习的模型,很强的baseline
  • 1,2,4的fewshot效果还没有多模态的zero-shot好,说明文本的监督信号确实强

zeroshot\few shot都做完了,接下来如果直接使用全量的监督信号的数据进行实验会如何
方法有两种:
1、linear probe
2、finetune
作者只用第一种方式,减少预训练对数据的影响,看预训练的好坏。finetune太多参数可以调,这样就不好比对效果。
在这里插入图片描述
横坐标是一张图经过的参数量,纵坐标是准确率
在这里插入图片描述
作者再把clip和efficientnet做对比

Fitting a linear classifier on CLIP’s features outperforms using the Noisy Student
EfficientNet-L2 on 21 out of 27 datasets.

冻住主干网络,只训分类头,全量的数据。

当数据有偏移的时候,模型表现如何:
在这里插入图片描述
和人类进行比较,找了5个人来做实验
在这里插入图片描述
表格的体现出来的效果还是很好的
在这里插入图片描述
人类觉得难的,模型也觉得难
在这里插入图片描述
做了去重的实验,还是觉得clip的泛化性能好

1.5 局限性

Significant work is still needed to improve the task learning and transfer capabilities of CLIP. While scaling has so far steadily improved performance and suggests a route for continued improvement, we estimate around a 1000x increase in compute is required for zero-shot CLIP to reach overall state-of-the-art performance

扩大规模来弥补和stoa的差距不现实

CLIP also struggles with more abstract and systematic tasks such as counting the number of objects in an image. Finally for novel tasks which are unlikely to be included in CLIP’s pre-training dataset, such as classifying the distance to the nearest car in a photo, CLIP’s performance can be near random. We are confident that there are still many, many, tasks where CLIP’s zero-shot performance is near chance level.

更难的任务上确实不太行

However, CLIP only achieves 88% accuracy on the handwritten digits of MNIST

预训练的数据集和下游的数据分布如果是out of distribution也不太行

最好的是,直接生成图片的标题,这就是端到端的了,而不是给你一个自然语言的监督信号,做成一个生成式的模型。对比学习的函数和生成式的目标函数合在一起

对数据的利用并不高效。如何提高数据的利用效率,自监督的方式和伪标签的方式

做实验过程,总是以测试集为导向进行调参,而不是真正的zeroshot

这选中的27个数据集,也是有主观的偏见的,如果有一个数据集是专门来做zeroshot的那就太好了

数据都是网上爬的,没有经过过滤的,会带有社会的偏见

在一些很难用语言描述的任务过程中,如果你不提供训练样本的表现由于你few shot的效果


二、总结

We have investigated whether it is possible to transfer the success of task-agnostic web-scale pre-training in NLP to another domain. We find that adopting this formula results in similar behaviors emerging in the field of computer vision and discuss the social implications of this line of research. In order to optimize their training objective, CLIP models learn to perform a wide variety of tasks during pretraining. This task learning can then be leveraged via natural language prompting to enable zero-shot transfer to many existing datasets. At sufficient scale, the performance of this approach can be competitive with task-specific supervised models although there is still room for much improvement.

打破了固定标签的学习范式,无监督的方式进行学习,数据处理更方便,模型也是方便,推理更加方便。新意度100 有效性100 问题大小100分

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

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

相关文章

只需4步,让OKA40i-C开发板的Linux系统拥有中文显示

如果你试着在Linux系统里面输入中文,那么将会有一片乱码呈现在你面前,这是因为Linux系统的默认语言是英文。但是如果可以显示中文的话,那么在使用过程中的便利程度一定会大大提升。今天小编就通过飞凌嵌入式的OKA40i-C开发板来为大家演示让Li…

极狐GitLab DevSecOps 为企业许可证安全合规保驾护航

本文来自: 小马哥 极狐(GitLab) 技术布道师 开源许可证是开源软件的法律武器,是第三方正确使用开源软件的安全合规依据。 根据 Linux 发布的 SBOM 报告显示,98% 的企业都在使用开源软件(中文版报告详情)。随着开源使用…

微电影广告有哪些传播优势?

微电影广告是在基于微电影的模式下发展而来的,是伴随着当下快节奏、碎片化的生活方式而诞生的新兴广告表现形式。微电影广告凭借其具备的独特传播优势以及时代特征成为广大企业主塑造企业品牌形象的主要方式。那么,微电影广告究竟有哪些传播优势&#xf…

Ubuntu22.04安装、配置、美化、软件安装、配置开发环境

Ubuntu22.04安装、配置、美化、软件安装、配置开发环境 一、Ubuntu、Windows11(10)双系统安装 因为ubuntu的安装网上的教程特别多了,所以这里不做赘述,推荐使用小破站这个up主的教程:Windows 和 Ubuntu 双系统从安装到…

计算机系统的基本组成 第一节

一、计算机系统 计算机系统是指:电子数字通用、计算机系统 由硬件和软件两个子系统组成 硬件是保存和运行软件的物质基础 软件是指挥硬件完成预期功能的智力部分 重点: 计算机系统部件 五个 1、数据运算部件:完成对数据的运算处理功能…

Docker 配置WebSSH

1、基于DockerHub Centos镜像 docker pull centos:centos7 2、 Centos镜像存在的一个自身问题:启动后的容器内部无法使用systemctl命令 Failed to get D-Bus connection: Operation not permitted ## docker run -dit eeb6ee3f44bd /bin/bash ## 切勿忘记宿主机防…

【测绘程序设计】——平面坐标转换

测绘工程中经常遇到平面坐标转换——比如,北京54(或西安80)平面坐标转换成CGCS2000平面坐标、工程独立坐标系平面坐标转换成CGCS2000平面坐标等,常用转换模型包括:①三参数法(2平移+1旋转);②四参数法(赫尔默特法,2平移+1旋转+1尺度);③六参数法(仿射变换法,2平移…

00后看完这个直接拿下字节offer,软件测试100+道面试题

软件测试与质量保证-软件测试部分练习题 1单选(2分) 软件测试用例主要由输入数据和_________两部分组成。 A.预期输出结果2.00/2.00 B.测试计划 C.以往测试记录分析 D.测试规则 2单选(2分) 与设计测试用例无关的文档是_________。 A.项目开发计划2.00/2.00 B.源程序 …

Ansys的电磁场分析和系统电路仿真软件Electronics 2023版本下载和安装教程

目录前言一、工具安装二、使用配置总结前言 ANSYS Electromagnetics Suite或ANSYS Electronics Suite是几个功能强大的程序的集合,用于仿真系统的电磁。ANSYS电磁套件还公开了行业分支机构和专业目录,并有标志。例如,在设备中,机…

AntDB“超融合+流式实时数仓”,谈传统数据库与流计算的有机融合

(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&am…

Windows11如何打开ie浏览器

目录1.背景:2.方法一:在 edge 中配置使用 ie 模式3.方法二:通过 Internet 选项 打开1.背景: 昨天电脑自动从win10升级为win11了,突然发现电脑找不到ie浏览器了,打开全都是直接跳转到 edge 浏览器&#xff0…

Linux下使用C语言实现简单的聊天室程序

本文章介绍一种基于Linux使用C语言实现简单的局域网聊天室程序的方法,支持消息群发,历史数据查询,好友列表查看,好友上线下线提醒等功能。聊天界面如下图所示:下面将按步骤介绍该系统的设计实现,首先在linu…

【JavaWeb】HTML常用标签

HTML标签结构 HTML语言主要都是由标签构成的。 标签名 在 <> 中 如<body> 标签大部分成对出现&#xff0c;代表开始和结束 如 <body>标签中的内容</body> 少部分单个出现&#xff0c;叫单标签 </br> 代表换行 标签中可以加属性&#xff0c;多个…

Oracle使用序列触发器实现主键id自动增长

记录一下oracle中的字段自增问题 在mysql中我们可以使用auto_increment来实现自动增长功能 而在oracle主键没有自动增长类型&#xff0c;所以一般使用序列产生的值作为某张表的主键,实现主键自增。 序列是oracle用来生产一组等间隔的数值。序列是递增&#xff0c;而且连续的。…

The JSON value could not be converted to System.DateTime

项目场景&#xff1a; 我们在使用Asp.Net Core WebApi和前端进行交互时&#xff0c;经常会因为提交数据中有时间自动而导致服务端接收不到数据&#xff0c;前端报错的问题。 问题描述 在开发中经常是后端同学把WebApi开发完毕后&#xff0c;然后前端同学进行接口对接开发。理…

Java:Java vs Kotlin–Android应用程序开发的最佳语言?

在移动应用技术领域&#xff0c;Java和Kotlin是最流行的搜索词之一。如果你也在寻找Java与Kotlin框架的比较&#xff0c;那么这篇文章就是为你准备的!让我们来全面了解一下这两种技术之间的区别。编程语言的定义Java的工作原理&#xff1a;Java的工作原理是“编写一次&#xff…

前端整理 —— javascript 2

1. generator 详细介绍 generator 介绍 generator 是 ES6 提供的一种异步编程解决方案&#xff0c;在语法上&#xff0c;可以把它理解为一个状态机&#xff0c;内部封装了多种状态。执行generator&#xff0c;会生成返回一个遍历器对象。返回的遍历器对象&#xff0c;可以依次…

软考中级-结构化开发

1 系统设计的基本原理&#xff08;1&#xff09;抽象&#xff08;2&#xff09;信息隐蔽&#xff08;3&#xff09;模块化将待开发软件分解为多个可独立开发、测试的模块&#xff0c;分而治之&#xff0c;最后组装。&#xff08;4&#xff09;模块独立每个模块完成一个相对独立…

世界文明的脉络

人类文明大体上可分为农耕文明、海洋文明和游牧文明三大类别&#xff0c;文明的标志一般是文字、青铜器、城市以及礼仪性建筑等要素。据此&#xff0c;史学家目前已发现了巴比伦文明、埃及文明、印度文明、华夏文明、希腊文明和波斯文明六种主要文明&#xff0c;其中前四种文明…

字节跳动测开岗,4面都过了,HR告诉我被刷在这个地方....

说在前面 面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到下面几个原因&#xff1a; 虚报工资&#xff0c;比实际高30%&#xff1b;有更好的人选&#xff0c;这个可能性不大&#xff0c;我看还在…