CLIP: Learning Transferable Visual Models From Natural Language Supervision

news2024/12/24 2:24:17

 1、引言

        论文链接:ReadPaper

        现在最先进的计算机视觉系统都是训练模型来预测一组固定的、预定义好的目标类别(如 ImageNet 的 1000 类和 COCO 的 80 类)。这种受限制的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据和训练来指定任何其他视觉概念(新类别)。直接从有关图像的原始文本中学习是一种很有前途的替代方案,它利用了更广泛的监督来源。Alec Radford[1] 等证明了预测哪个 caption 与哪个图像是配对的这样一个简单预训练任务是在从互联网收集的 4 亿个图像-文本对数据集 WIT(WebImageText)[1] 上从头学习 SOTA(State of the Art) 图像表示的一个有效且可扩展的方法。预训练之后,自然语言引导模型去做物体分类,分类不局限于已经学到的视觉概念,还能扩展到新的类别,即这个模型是能够直接在下游任务上做 zero-shot 推理。这种方法被称为 CLIP(Contrastive Language-Image Pre-training)[1],在涵盖 OCR,视频动作识别、geo-localization 和许多细粒度的分类的 30 多个数据集上进行测试来评估其性能,发现 CLIP 能轻松地迁移到大多数任务,并且能达到和有监督的 baseline 方法差不多的性能,而无需任何数据集特定的训练。例如在 ImageNet 上,CLIP 在不使用那 1.28 M 训练样本的情况下,就能得到和有监督的 ResNet-50 差不多的结果[1]。

2、方法

2.1  预训练

图1 对比预训练

        如图 1 所示,CLIP 的训练数据是图像-文本对。假设每个训练 batch 里有 N 个图片-文本对,N 个图片输入到 Image Encoder 得到 N 个图片特征向量(I1、I2、I3、...、IN),N 个文本输入到 Text Encoder 得到 N 个文本特征向量(T1、T2、T3、...、TN),将图片特征向量和文本特征向量投影到相同的模态(维度)后,N 个图片特征向量和 N 个文本特征向量两两计算余弦相似度(两个向量夹角的余弦值,即先 L2 归一化再求点积)得到 N*N 的相似度矩阵。对比学习非常灵活,只需要正样本和负样本的定义,即配对的图片-文本对就是正样本,否则为负样本,特征矩阵里对角线上的都是正样本,其它元素都是负样本,即共 N 个正样本, N(N−1) 个负样本,有了正负样本,模型就可以通过对比学习的方式去训练了,不需要任何手工标注。这种无监督的训练方式需要大量训练数据。

图2 Numpy矩阵形式的CLIP伪代码

        CLIP Numpy 矩阵形式的伪代码如图 2 所示, Image Encoder 输入的 shape 是 [n, h, w, c],Text Encoder 输入的 shape 是 [n, l],其中 n=batch_size,h、w、c 分别为图片的高、宽和通道数,l 是指序列长度。Image Encoder 是 ResNet/Vision Transformer,Text Encoder 是 CBOW/Text Transformer,Image Encoder 输出 n 个图片特征向量(shape=[n, d_i]),Text Encoder 输出 n 个文本特征向量(shape 为 [n, d_t] )。然后将图片特征向量和文本特征向量投影到相同的维度 d_e(模态)后 L2 归一化,再让 n 个图片特征向量和 n 个文本特征向量两两计算内积得到 shape=[n, n] 的相似度矩阵,相似度矩阵乘以一个温度系数 t(对数初始化)后便得到缩放的相似度矩阵 logits。根据上述正负样本的定义 labels 是 np.arange(n),分别计算图片-文本的交叉墒损失 loss_i(把图片看作样本,文本看作标签),和文本-图片的交叉墒损失 loss_t(把文本看作样本,图片看作标签),最终 loss 为 loss_i 和 loss_t 的均值。之所以 labels 是 np.arange(n) 是因为不管把图片看作样本还是把文本看作样本,样本和标签都是配对的,即第 0 个样本的标签一定是 0,第 1 个样本的标签是一定 1,...,第 n 个样本的标签一定是 n,从而使训练目标是使 logits 对角线上的元素尽量接近 1,其它元素尽量接近 0,即正确配对图片和文本。

2.2  Zero-Shot Transfer

图3 CLIP实现zero-shot分类       

        CLIP 在 WIT 上预训练后,如图 3 所示只需 2 步就能实现 zero-shot 分类:

        (1)从标签文本中构建数据集分类器:根据下游任务的分类标签构建每个类别的描述文本,例如 A photo of a {object},然后将这些文本送入 Text Encoder 得到对应的文本特征向量,如果类别数目为 N,那么将得到 N 个文本特征向量(T1、T2、T3、...、TN)。

        (2)使用数据集分类器进行 zero-shot 预测:将要预测的图像送入 Image Encoder 得到图像特征向量 I1,所有向量投影到相同模态后计算 I1 与 N 个文本特征向量缩放的余弦相似度(和训练过程一致),然后选择相似度最大的文本对应的类别作为图像分类预测结果,可以进一步将这些相似度看成 logits,送入 softmax 后可以得到每个类别的预测概率。

        如图 3 所示,利用 CLIP 的多模态特性为具体的任务构建了动态的分类器,其中 Text Encoder 提取的文本特征可以看成分类器(一个全连接层)的权重,而 Image Encoder 提取的图像特征是分类器的输入。

2.3  Prompt Engineering and Ensembling

        如果在做文本和图片匹配的时候,每次只用标签对应的词(组)来做文本的特征提取,就有可能遇到一词多义问题,即因缺乏上下文信息使模型无法区分是哪个词义,比如在 ImageNet 里面同时包含两个类,construction cranes 和 cranes,在不同的语境下,这两个 cranes 对应的意义是不一样的,在建筑工地环境下,construction cranes 指起重机,作为动物,cranes 指的是鹤。同时在预训练时匹配的文本一般都是一个句子,很少出现一个单词的情况,如果推理时文本输入只是一个词(组),可能就存在 distribution gap 的问题,提取出来的特征可能不好。

        基于这两个问题,作者提出使用提示模版(ImageNet 上使用“A photo of a {label}.”)把单词变成一个句子以缓解 distribution gap,且能一定程度上解决歧义性的问题。比如 remote 这个单词在模版中就是指遥控器,而不是遥远的。使用提示模板之后,CLIP 在 ImageNet 上的准确率提升了 1.3%[1]。

        作者还尝试集成多个 zero shot 分类器,即 prompt ensembling ,作为提高性能的另一种方式。这些分类器是在不同的上下文提示下得到的,作者在 ImageNet 上共集成了 80 个不同的提示模版,在只使用一个提示模版的基础上进一步提高了 3.5% 的准确率[1]。

2.4  Representation Learning     

        [1] 中还进行了 representation Learning 实验,即自监督学习中常用的 linear probe:用预训练好的模型先提取特征,然后有监督训练一个线性分类器。发现 CLIP 在性能上超过其它模型,而且计算更高效。

3、总结

        [1] 中还发现 CLIP 在自然分布漂移上表现得更鲁棒;人类从几个样本中学习的方式和 [1] 中的few-shot 方法之间存在很大差异,并推测找到一种将先验知识正确集成到 few-shot 学习中的方法是对 CLIP 算法改进的重要一步;采用一个重复检测器对训练集和测试集的重合率做了检测,发现重合率的中位数为 2.2%、平均值为 3.2%,去重前后在大部分数据集上的性能没有太大变化[1]。

        CLIP 的局限性如下所示:

        (1)CLIP 的 zero-shot 性能虽然和有监督的 ResNet50 相当,但仍远低于 SOTA,作者估计要达到 SOTA 的效果,还需要增加 1000 倍的计算量,目前而言没有可行性,有必要进一步研究如何提高 CLIP 的计算效率和数据效率。

        (2)CLIP 的 zero-shot 性能在某些数据集上表现较差,如细粒度分类,抽象任务等。

        (3)CLIP 在自然分布漂移上表现鲁棒,但是依然存在域外泛化问题。

        (4)尽管 CLIP 可以灵活地为各种任务和数据集生成零样本分类器,但 CLIP 仍然仅限于从给定的零样本分类器中选择这些概念。与可以生成新颖输出的图像 captioning 等真正灵活的方法相比,这是一个重大限制。值得尝试的想法有:联合训练对比目标和生成目标;在推理时对给定图像的多个自然语言解释执行搜索。

        (5)CLIP 并没有解决深度学习的数据效率低下难题,将 CLIP 与 self-supervision[2,3] 和 self- training[4] 方法相结合是一个很有前途的方向,因为它们具有比标准监督学习更高数据效率。

        (6)尽管 CLIP 专注于 zero-shot 迁移,但作者反复查询完整验证集的性能以指导 CLIP 的开发。这些验证集通常有数千个示例,这对于真正的 zero-shot 场景是不现实的。 CLIP 的主要结果使用了 27 个数据集的一些随意组装集合,这些数据集不可否认地与 CLIP 的开发和功能共同适应。创建一个新的任务基准以明确评估广泛的零样本迁移能力,而不是重复使用现有的监督数据集,将有助于解决这些问题。

        (7)CLIP 在从互联网收集的图像-文本对数据集上进行训练。这些图像-文本对未经过滤和整理,导致 CLIP 学习了许多社会偏见。

        (8)人类从几个样本中学习的方式和 [1] 中的 few-shot 方法之间存在很大差异。未来的工作需要开发将 CLIP 的强 zero-shot 性能与高效的 few-shot 学习相结合的方法。

        作者研究了是否能将 NLP(Natural Language Processing) 中与任务无关的 web 规模预训练的成功转移到另一个领域,发现采用这个套路会导致计算机视觉领域出现类似的行为;并讨论了这一研究方向的社会影响。为了优化他们的训练目标,CLIP 模型在预训练期间学会执行各种各样的任务。然后可以通过自然语言提示来利用此任务学习,以实现对许多现有数据集的 zero-shot 迁移。在足够的规模上,这种方法的性能可以媲美特定于任务的监督模型,尽管仍有很大的改进空间。

        从本质上来讲,CLIP 其实并没有太大的创新,它只是将 ConVIRT[5] 方法进行简化,并采用更大规模的图像-文本对数据集来训练。作者想做的其实是直接用图像生成文本,但由于训练效率的制约,才采用了对比学习的方法。

参考文献

[1] Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, and Ilya Sutskever. Learning Transferable Visual Models From Natural Language Supervision. In ICML, 2021.

[2] Olivier J. H ́enaff, Aravind Srinivas, Jeffrey De Fauw, Ali Razavi, Carl Doersch, S. M. Ali Eslami, and Aaron van den Oord. Data-efficient image recognition with contrastive predictive coding. In ICML, 2020.

[3] Ting Chen, Simon Kornblith, Kevin Swersky, Mohammad Norouzi, and Geoffrey E. Hinton. Big Self-Supervised Models are Strong Semi-Supervised Learners. In NIPS, 2020.

[4] Qizhe Xie, Minh-Thang Luong, Eduard Hovy, and Quoc Le. Self-training with Noisy Student improves ImageNet classification. In CVPR, 2020.

[5] Yuhao Zhang, Hang Jiang, Yasuhide Miura, Christopher D. Manning, and Curtis P. Langlotz. Contrastive Learning of Medical Visual Representations from Paired Images and Text. In MLHC, 2022.

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

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

相关文章

【第18章】Vue实战篇之登录界面

文章目录 前言一、数据绑定1. 数据绑定2. 数据清空 二、表单校验1. 代码2. 展示 三、登录1.登录按钮2.user.js3. login 四、展示总结 前言 上一章完成用户注册&#xff0c;这一章主要做用户登录。 一、数据绑定 登录和注册使用相同的数据绑定 1. 数据绑定 <!-- 登录表单 -…

Unity制作透明材质直接方法——6.15山大软院项目实训

之前没有在unity里面接触过材质的问题&#xff0c;一般都是在maya或这是其他建模软件里面直接得到编辑好材质的模型&#xff0c;然后将他导入Unity里面&#xff0c;然后现在碰到了需要自己在Unity制作透明材质的情况&#xff0c;所以先搜索了一下有没有现成的方法&#xff0c;很…

ECharts 词云图案例二:创意蒙版应用

ECharts 词云图案例二&#xff1a;创意蒙版应用 引言 在数据可视化领域&#xff0c;ECharts 以其强大的功能性和灵活性&#xff0c;成为开发者和设计师的首选工具之一。继上一篇关于 ECharts 词云图的详细介绍后&#xff0c;本文将探索词云图的进阶应用——使用蒙版来创造更具…

VS+QT+OCC创建坐标界面

1、安装并配置好项目后&#xff0c;填写如下代码&#xff1a; #pragma once#include <Standard_Handle.hxx> #include <V3d_Viewer.hxx> #include <OpenGl_GraphicDriver.hxx> #include <WNT_Window.hxx> #include <V3d_View.hxx> #include <…

C++ 72 之 友元和类模版

#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <string>// 写法2&#xff1a; // template<class T1, class T2> // class Students12;// 要提前用到Students12&#xff0c;需要在前面先让编译器见过Students12才可…

【C语言】回调函数 和 部分库函数的用法以及模拟实现

一、回调函数&#xff1a; 1、定义&#xff1a; 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;我们就说这是回调函数。 2、qsort的模拟实现…

高效、智能、安全:小型机房EasyCVR+AI视频综合监控解决方案

一、背景需求分析 随着信息技术的迅猛发展&#xff0c;小型机房在企事业单位中扮演着越来越重要的角色。为了确保机房的安全稳定运行&#xff0c;远程监控成为了必不可少的手段。 二、视频监控 视频监控是机房远程监控的重要组成部分。通过安装IP摄像机及部署视频监控系统Ea…

【Linux】基础IO——理解文件系统

1.理解文件系统 1.1.ls与stat 磁盘文件由两部分构成&#xff0c;分别是文件内容和文件属性。 文件内容就是文件当中存储的数据&#xff0c;文件属性就是文件的一些基本信息&#xff0c; 例如文件名、文件大小以及文件创建时间等信息都是文件属性&#xff0c;文件属性又被称…

android常用知识

透明activity样式&#xff1a; android:theme"android:style/Theme.Translucent.NoTitleBar.Fullscreen"这句代码&#xff0c;当你是建的empty activity project时&#xff0c;默认继承的是AppCompat这个类。所以在AndroidMifext.xml文件中用上述代码会导致程序错误&…

反馈型振荡器

目录 反馈型振荡器分类 基本工作原理 启动过程 “心脏”LC振荡 起振条件 平衡条件 稳定条件 互感耦合振荡器 电感三端LC振荡器 电容三端LC振荡器 串联改进电容三端式振荡器 并联改进电容三端式振荡器 相位平衡条件的判断准则 反馈型振荡器分类 基本工作原理 启动过…

心跳机制讲解及实例

什么是心跳机制 心跳机制出现在tcp长连接中&#xff0c;客户端和服务器之见定时发送一种特殊的数据包通知对方还在线&#xff0c;以确保tcp链接地可靠性&#xff0c;有可能tcp链接由于某些原因(列入网线被拔了&#xff0c;突然断电)导致客户端断了&#xff0c;但是服务器不知道…

使用高斯混合模型(GMM)进行猫狗音频聚类(Kaggle Audio Cats and Dogs)

Audio Cats and Dogs | Kaggle 目录 一、实验目标 二、数据分析 三、实验结果 四、改进方向 一、实验目标 数据集包括164个标注为猫的.wav文件&#xff0c;总共1323秒和113个标注为狗叫声的.wav文件&#xff0c;总共598秒&#xff0c;要求判别每个音频是狗叫还是猫叫 二、…

Springboot + Mybatis 实现sql打印

参照这个视频&#xff1a;https://www.bilibili.com/video/BV1MS411N7mn/?vd_source90ebeef3261cec486646b6583e9f45f5 实现mybatis对外暴露的接口Interceptor 使用Intercepts接口,这里的写法参照mybatis-plus中的拦截器写法 Intercepts({Signature(type Executor.class, m…

FPGA开发Vivado安装教程

前言 非常遗憾的一件事情是&#xff0c;在选修课程时我避开了FPGA&#xff0c;选择了其他方向的课程。然而&#xff0c;令我没有想到的是&#xff0c;通信项目设计的题目竟然使用FPGA&#xff0c;这简直是背刺。在仅有的半个月时间里&#xff0c;准备这个项目确实是非常紧张的…

Corrupt JPEG data: 2 extraneous bytes before marker 0xd9

场景 异常&#xff1a;Corrupt JPEG data: 2 extraneous bytes before marker 0xd9 python语言&#xff0c;CV2读图像数据集&#xff0c;训练目标检测模型。在数据集分批送入模型训练过程中&#xff0c;出现大片图片异常情况。 &#xff08;建议直接去看修复图像方法二&…

华翰传媒集团横店影视基地盛大开业,汇剧视界APP震撼发布

2024年6月1日上午&#xff0c;横店影视华翰传媒集团携手腾烨影视隆、明艺影视重举办了横店影视基地的开业庆典。这一盛事不仅标志着华翰传媒集团在影视行业发展的重要里程碑&#xff0c;更彰显了其深耕影视产业、致力于打造高质量影视内容的决心与目标。 活动盛况空前&#xff…

vivado PIP or SITE_PIP、PKGPIN_BYTEGROUP

PIP是Xilinx部件上用于路由连接或网络的设备对象。PIP 称为ARC的连接多路复用器可以编程为将一根电线连接到 另一个&#xff0c;从而将节点连接在一起&#xff0c;以形成中特定NET所需的路由 设计。 SITE_PIP&#xff0c;也称为路由BEL&#xff0c;是SITE内部的连接多路复用器&…

vcs覆盖率相关

查看覆盖率是由哪几个tc覆盖的 选择要查看的覆盖率点&#xff0c;右键选择 show xxx tests&#xff1b; 覆盖率的合并

最新开源:英伟达Nemotron-4 340B,哔哩哔哩Index-1.9B,谷歌RecurrentGemma-9B...

文章目录 1. 英伟达开源Nemotron-4 340B2. 哔哩哔哩开源轻量级模型 Index-1.9B3. 微软开源混合模型 Samba4. 谷歌开源 RecurrentGemma-9B&#xff0c;性能与Gemma相同5. Stable Diffusion 3 Medium&#xff1a;“最强文生图开源 AI 模型” 1. 英伟达开源Nemotron-4 340B 当地时…

【AI绘画】新手小白看这篇就够啦!国产PS AI插件超好入门!

随着人工智能技术的飞速发展&#xff0c;Photoshop作为设计师们不可或缺的工具&#xff0c;也在不断地融入AI技术&#xff0c;以提升设计效率和效果。最近米兔用了一款AI绘画软件StartAI&#xff0c;被其强大的功能和易用性经验到了&#xff0c;下面跟大家详细分享一下这款ps插…