CLIP论文精度
CLIP论文精度
-
Zero-shot
-
CLIP多模态模型

-
Image Endecoder是一个图片编码器,既可以是ResNet,也可以是Vision Transformer.
-
Text Encoder和Image Encoder产生的两组特征进行对比学习(无监督训练)
-
分类头?“分类头” 是指网络结构中用于执行具体分类任务的一组层,将网络提取的特征转化为分类或检测结果。
-
CLIP训练好后,没有使用微调,所以也就没有分类头,而利用它做推理的过程是借用了自然语言处理(NLP)的方法,也就是prompt template.
-
把每个分类类别变成相应的句子,句子通过之前训练好的文本编码器Text Encoder后就会得到对应数量文本的特征。做这一步的原因是因为在训练过程中,输入到Text Encoder中的是一个句子,为了保证模型输出的效果,所以采用输入形式的一致。
-
关于如何将分类的每个标签变成一个句子,OpenAI也提出了prompt engineering和prompt ensemble这两种方式来提高模型的准确率。
-
在推理的过程中,对于输入的图片,经过ImageEncoder后,得到图片特征,然后跟所有的文本特征去计算一个cosine similarity(相似性),将与图片最相近的一个文本挑出来,完成分类任务。
-
categorical label限制。需要在训练或者推理时,提前准备一个标签的列表,以编写分类头。而CLIP则是摆脱了这种限制。
-
CLIP迁移性非常强,因为他学习到的语义性强。
-
CLIP的应用:图像生成、物体检测和分割、视频检索clifs。
> Abstract
- CLIP出来前,先进的视觉系统训练都需要一个提前定义好的标签集合,但采用这样有限制性的监督学习很可能会模型的泛化性。
- 所以CLIP从NLP中得到监督信息,因为本文描述的监督信号非常广。
- CLIP使用4亿个文本-图像训练集去进行了大模型的训练。生成的模型可以直接用于下游的Zero-shot推理。
- OpenAI公开了CLIP的预训练模型和推理代码,但没公开预训练代码。
> Introduction
- 从原始的文本里去预训练一个模型在NLP领域取得了成功。(如GPT,它的模型架构同样也是与下游任务无关的,所以直接应用在下游应用时,无需去设计分类头等特殊处理。)
- 所以CLIP将NLP里面的这套框架应用到了视觉里面。
- 自监督学习:transformer、对比学习、掩码填空、自回归。
- CLIP主打泛化性。
> Approach
-
利用自然语言的监督信号来训练一个比较好的视觉模型。好处:
- 不需要标注数据,只需要文本-图片配对集。
- 训练时,图片和文字绑定,所以学习到的是一个多模态特征。
-
Transformer出现后,为NLP带来革命性的改变,开始使用具有上下文语义环境的学习方式去替代传统且复杂的Topic model和n-gram等。让其可以比较方便地进行跨模态训练。
-
大数据集:WebImageText:WIT
-
由于数据集巨大,训练成本高时间长,所以训练效率对多模态的训练效果有直接影响。所以CLIP由于训练效率的原因,使用了对比学习的方法,而非预测性的方法。
-
仅仅把预测型的目标函数改为对比型的目标函数,训练效率就提升了4倍。

-
模型预训练伪代码:与其他对比学习没有太大区别,主要是将单模态正样本替换成了多模态正样本。

- CLIP数据集较大,不太会产生过拟合的情况。
- 它在最后的投射中(表示和对比学习层之间)仅使用了线性的投射层。
- 同时由于数据集太大,也不需要做过多的数据增强(?),唯一使用的是随机的剪裁。
- 由于模型太耗时,不好做微调,所以将对比学习中的超参数temperature在模型中重新设置为可学习的参数。
-
训练过程:
视觉方面:训练了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
-
Zero-shot Transfer:
- 动机:一旦借助文本训练好了这个又大又好的模型之后,就可以使用文本做引导,去灵活地做zero shot的迁移学习。而不必再进行微调。
- 推理过程:
-
Prompt engineering and ensembling:
- Prompt是在微调或者直接推理时用的一种方法。
- 需要使用Prompt,是因为1.单个单词具有歧义性。2.预训练的时候输入是文本信息,而非单词,为了防止出现分布偏移(distribution gap)问题。
- 所以作者使用Prompt template
A photo of a {label}来描述推理时的输入,可以使模型准确率得到提升。 - 如果你已经提前知道类别,那么可以添加更多的提示词来使模型的输出更加准确。
- Prompt ensemble就是利用多段提示词,最后将结果聚合起来。

-
few-shot transfer(每个类别拿出少量图片来做微调):将CLIP里面的图片编码器拿出来“冻住”,去做linear probe(对最后的分类头进行训练)。
-
如果下游任务用全部的数据而不是zero/few shot:
- 方法1:linear probe
- 方法2:fine-tune ,把整个网络都放开,直接去做端对端的学习。比linear probe更灵活、数据集大的时候效果更好。
-
而在CLIP中,作者专门使用了linear probe,是因为(1)CLIP本来就是用来研究跟数据集无关的预训练方式的,能能好地反映出预训练模型的好坏(2)linear probe不用调参来适应各个数据集。
Limitations
- CLIP在大多数模型平均下来来看,只是与比较简单的机械模型打成平手,而无法与state of the art(SOTA,最前沿)的结果媲美。
扩大训练数据集是一个不太可能的方案(要达到SOTA的效果,需要再训练当前的1000X+),所以需要有新的方法在计算和数据上更加高效。 - CLIP在细分类任务和抽象概念的处理上表现得较差。
- CLIP的泛化性较好,但推理数据集不能out-of-distribution。
- 虽然CLIP可以用zero-shot去做推理,但仍然是从给定的类别里去做的选择。所以OpenAI还是想将其作为生成式的模型。
- 数据利用率不高效。(预训练)
- 数据没有经过清洗,可能会带着社会的偏见。
Conclusion
- CLIP的宗旨就是想把NLP领域当中与下游任务无关的训练方式带到其他领域中去。
- CLIP方法总结:在预训练阶段使用对比学习,利用文本的提示去做zero shot的迁移学习。在大数据和大模型的双向加持下,CLIP的效果能和之前精心设计的且是有监督训练出来的基线模型打成平手。
相关文章:
CLIP论文精度
CLIP论文精度 Zero-shot CLIP多模态模型 Image Endecoder是一个图片编码器,既可以是ResNet,也可以是Vision Transformer. Text Encoder和Image Encoder产生的两组特征进行对比学习(无监督训练) 分类头?“分类头” 是指网络结…...
LouvainMethod分布式运行的升级之路
1、背景介绍 Louvain是大规模图谱的谱聚类算法,引入模块度的概念分二阶段进行聚类,直到收敛为止。分布式的代码可以在如下网址进行下载。 GitHub - Sotera/spark-distributed-louvain-modularity: Spark / graphX implementation of the distri…...
【Node.js】低代码平台源码
一、低代码简介 低代码管理系统是一种通过可视化界面和简化的开发工具,使非专业开发人员能够快速构建和管理应用程序的系统。它提供了一套预先定义的组件和模块,使用户可以通过拖放操作来设计应用程序的界面和逻辑。低代码管理系统还提供了自动化的工作…...
docker 部署 xxl-job-admin
1、先安装mysql docker pull mysql 2、运行mysql 容器 ( 端口 3306 容器名称 mysql 密码 123456 ) docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 mysql 3、将tables_xxl_job.sql文件(官网地址:http…...
c++(空间配置器)[32]
空间配置器 一级空间配置器 || 二级空间配置器 默认先走二级然后判断 二级空间配置器 一个指针指向start_free然后start_free向后移动,相当于哈希桶的头删和头插 8byte:切大补小 C的二级空间配置器按照8字节(或者更大的倍数)切分…...
Linux系列之解压文件
一.欢迎来到我的酒馆 使用命令解压Linux文件。 目录 一.欢迎来到我的酒馆二.使用命令解压文件 二.使用命令解压文件 2.1解压 .tar.gz文件: tar -zxvf 文件名.tar.gz.tar,gz这种文件是tar文件的压缩文件,因此可以使用tar命令进行解压 -zxvf命令参数&…...
为什么重写equals方法时必须重写hashcode方法
与 equals的区别 如果两个引用类型变量使用运算符,那么比较的是地址,它们分别指向的是否是同一地址的对象,结果一定是false,因为两个对象地址必然不同。 不能实现比较对象的值是否相同。 所有对象都有equals方法,默认…...
java导入excel图片处理
直接看代码吧,主要逻辑吧excel的图片拿到 压缩上传获取url // 将文件转成XSSFWorkbook工作簿XSSFWorkbook wb new XSSFWorkbook(uploadFile);// 获取工作薄中第一个excel表格XSSFSheet sheet wb.getSheetAt(0);// 核心:::获取ex…...
【Rust】Rust学习 第四章认识所有权
第四章认识所有权 所有权(系统)是 Rust 最为与众不同的特性,它让 Rust 无需垃圾回收(garbage collector)即可保障内存安全。因此,理解 Rust 中所有权如何工作是十分重要的。 4.1 所有权 所有运行的程序都…...
学习C语言第三天 :关系操作符、逻辑操作符
1.关系操作符 C语言用于比较的表达式,称为“关系表达式”里面使用的运算符就称(relationalexpression),为“关系运算符” (relationaloperator) ,主要有下面6个。 > 大于运算符 < 小于运算符 > 大于等于运算符 < 小于等…...
Jenkins自动化打包脚本
一、背景 jenkins可以设置定时任务打包,也已手动点按钮打包,还可以通过执行http请求打包,今天我们就通过shell脚本,通过curl命令进行jenkins打包。 二、步骤 2.1 在jenkins上构建项目 设置触发器 2.2 通过shell脚本触发远程构…...
一百五十、Kettle——Kettle官网下载地址
一、官网地址 Home - Hitachi VantaraThe site home pagehttps://community.hitachivantara.com/docs/DOC-1009855 二、下载地址 Pentaho from Hitachi Vantara download | SourceForge.netDownload Pentaho from Hitachi Vantara for free. End to end data integration and…...
使用 Visual Studio Code 调试 CMake 脚本
之前被引入到 Visual Studio 中的 CMake 调试器,现已在 Visual Studio Code 中可用。 也就是说,现在你可以通过在 VS Code 中安装 CMake 工具扩展,来调试你的 CMakeLists.txt 脚本了。是不是很棒? 背景知识 Visual C 开发团队和 CMake 的维…...
【云原生】Docker 详解(二):Docker 架构及工作原理
Docker 详解(二):Docker 架构及工作原理 Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互。…...
微服务 云原生:基于 Gogs + Drone 实现 CI/CD 自动化
一般构建部署 以一个简单的前后端项目来说,分别编写前后端的 Dockerfile 文件并构建镜像,然后编写 docker-compose.yml 构建部署,启动运行。每次代码变更后都需重新手动打包、构建、推送。 一个简单的例子: 前端: 项…...
ADO.NET之SQL Server
ADO.NET是.NET平台上的一组用于访问和操作关系型数据库的API。它提供了一种以统一的方式连接到各种数据库系统并执行数据库操作的方法。现在有很多的ORM框架都是基于ADO.NET进行数据访问(比如:Entity Framework (EF)、Dapper、NHibernate 、FluentNHiber…...
Nginx负载均衡(重点)
正向代理 部署正向代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://20.0.0.60:80…...
第一章 SpringBoot入门
1.SpringBoot简介 1.1.简介 Spring Boot来简化spring应用开发,约定大于配置去繁从简,just run就能创建一个独立的,产品级别的应用。 背景:J2EE笨重开发,繁多的配置、低下开发效率、复杂的部署流程、第三方技…...
JavaScript Es6_2笔记 (深入对象 + 内置构造函数 + 包装类型)+包含实例方法
JavaScript 进阶 文章目录 JavaScript 进阶深入对象构造函数实例成员静态成员 内置构造函数ObjectArray包装类型StringNumber 了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,掌握常见的对象属性和方法的使用。 了解…...
尼科彻斯定理
目录 1.题目概述 2.题解 思路分析 具体实现 1.题目概述 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^31 2^335 3^37911 4^313151719 输入一个正整数m(m≤100),将…...
基于Qt开发Lingbot-Depth-Pretrain-ViTL-14的跨平台桌面调试工具
基于Qt开发Lingbot-Depth-Pretrain-ViTL-14的跨平台桌面调试工具 深度估计模型,比如我们今天要聊的 Lingbot-Depth-Pretrain-ViTL-14,在机器人导航、三维重建、增强现实这些领域越来越重要。但说实话,对于开发者或者研究人员来说,…...
「码动四季·开源同行」go实战案例:如何使用 Prometheus 和 Grafana 监控预警服务集群?
监控和预警平台是互联网公司较为重要的后端架构组成之一,是整个运维乃至整个产品生命周期中最重要的一环,它能够事前及时预警发现故障,事后提供详实的数据用于追查定位问题。Prometheus和Grafana 相结合是开源服务监控和预警平台的主流方案之…...
EasyAnimateV5图生视频实战:多图批量处理脚本开发(Python+requests API)
EasyAnimateV5图生视频实战:多图批量处理脚本开发(Pythonrequests API) 1. 项目背景与需求场景 在日常的内容创作和视频制作中,我们经常遇到这样的需求:需要将大量的静态图片转换为动态视频。无论是电商商品展示、社…...
终极Flash浏览器指南:如何在现代系统中完美运行Flash游戏与网页
终极Flash浏览器指南:如何在现代系统中完美运行Flash游戏与网页 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser CefFlashBrowser是一个专为解决Flash内容在现代浏览器中无法运…...
OpenClaw安全方案:Phi-3-vision本地处理敏感图文数据实践
OpenClaw安全方案:Phi-3-vision本地处理敏感图文数据实践 1. 为什么需要本地化处理敏感数据 去年我参与了一个医疗数据整理项目,团队需要从数千份病历扫描件中提取关键指标。最初尝试使用某知名云服务商的OCR文本分析API,却在法务审核阶段被…...
C++内存管理 C++模板
个人主页:小则又沐风 个人专栏:<数据结构> <竞赛专栏> <C语言> <C> 目录 一 C的内存管理 1.C语言的内存管理 2.C的内存管理 3.new和delete的实现原理 4. C内存管…...
Kandinsky-5.0-I2V-Lite-5s性能调优:加速推理与降低显存占用的技巧
Kandinsky-5.0-I2V-Lite-5s性能调优:加速推理与降低显存占用的技巧 1. 引言 如果你正在使用Kandinsky-5.0-I2V-Lite-5s进行图像到视频的生成任务,可能会遇到两个常见问题:推理速度不够快和显存占用过高。这篇文章将分享几个实用的性能调优技…...
OAuth2.0令牌安全指南:在Postman中模拟令牌泄露与防御实验
OAuth2.0令牌攻防实战:Postman模拟三大泄露场景与高级防御策略 在API安全领域,OAuth2.0令牌就像数字世界的临时护照,一旦落入不法分子之手,攻击者就能以用户身份横行无阻。本文将带您深入三大典型令牌泄露场景的模拟实验ÿ…...
Polaris CTF招新赛-WEB-小白向
已经好久好久没有更新了,也算是完成了从0基础到初步WEB手的蜕变WEB1. ezpollute分析源码,是一个Node.js Express 网站,1启动一个 Web 服务2提供一个接口 /api/config,让用户提交 JSON 配置3提供一个接口 /api/status,…...
嵌入式程序main()退出处理机制与优化实践
1. 嵌入式程序执行的生命周期解析在裸机嵌入式开发中,程序执行流程与通用计算机存在本质差异。以8051架构为例,当开发者在Keil环境下编写一个简单的LED控制程序时,完整的执行链条包含以下几个关键阶段:硬件复位阶段(0x…...
