【多模态论文】CLIP(Contrastive Language-Image Pre-training)

论文:Learning Transferable Visual Models From Natural Language Supervision
链接:https://arxiv.org/abs/2103.00020

摘要

  • 问题:

    • 对预定的类别进行预测,这种有监督的训练形式受限于额外标记数据 。如何利用图像的原始文本来获取广泛的监督数据?
    • 预训练的优势:Task-agnostic objectives使得在计算、模型容量和数据方面可以扩大几个数量级,能力有大幅提高。LP中的大规模无监督训练数据训练,而CV全部都是人工标注数据集,使用自然语言监督的方法进行图像表示学习很少见。
    • CV模型只能预测已知的图像类别,本文利用图像对应的文本数据,可能可以分辨未见类别的图像。
      在CV中加入自然语言数据实际结果不够好的原因归结于数据规模不够大
  • 方法:
    通过在4e (image, text) pairs数据集进行预训练,预测caption和图像是否match。并且可以zero-shot transfer到下游任务。

  • 优点:

    • 可以从大量自然语言数据中学习,无需标注进行监督学习
    • 灵活的零样本迁移

方法详解

  1. 数据集创建
  • 三个现存图像数据集:MS-COCO和Visual Genome质量高,但各10w图像,数据量少;YFCC100M 1e图像,但质量参差,metadata少,过滤后剩1500w接近ImageNet。
  • 解决方案:从互联网收集各种公开可用的资源,通过query查询的方式获取图像文本对,构建WIT( WebImageText)。
  1. 训练方法
  • 遇到问题
    (1)训练效率问题:开始训练实验VirTex类似结构,同时训练CNN和Transformer预测生成图像caption,但实验表明慢了三倍速度。
    (2)图像描述、评论和相关文本种类繁多,任务过于困难
    也有之前的方法表明,对比目标比预测目标可以更好的学习表征以及相同性能下生成比对比需要更多计算量
  • 解决方案:不需要预测文本的单词,只需要把文本当成一个整体判断文本和图像是否匹配,这样速度能提高4倍。
    在这里插入图片描述
  1. 训练任务:给定N个图像文本对,CLIP同时训练图像编码器和文本编码器,通过最大化N个real pairs的余弦相似度并且最小化N^2-N个负样本相似度的方法学习一个多模态Space。两个编码器参数均随机初始化,不使用任何热启模型。损失函数使用symmetric cross entropy loss。
  2. 模型
    图像端:
  • ResNet-50,将 global average pooling替换为 attention pooling mechanism,q为global average-pooled 表示。

  • Vision Transformer,在patch和pos embedding结合前加了layer normalization
    文本端:Transformer,63M-parameter 12-layer 512-wide model with 8 attention heads,BPE+49,152词表,max-seq-len=76,[SOS]text [EOS],使用[EOS]作为文本表示。保留了mask loss。
    在这里插入图片描述

  • 训练目标:最小化N^2-N个负样本的相似度,最大化正样本间相似度。
    在这里插入图片描述

下图为CLIP实现的伪代码:
在这里插入图片描述
只缩放文本编码器的宽度与ResNet的宽度成正比,发现CLIP对文本编码器的容量并不敏感。
5. 训练

  • 图像编码器:5个Resnet系列,包括ResNet-50, a ResNet-101,RN50x4, RN50x16, and RN50x64(后面三个为ResNet50的缩放)。3个ViT,ViT-B/32, ViT-B/16, ViT-L/14。
  • 32 epochs,温度系数0.07(防止训练不稳定必须),bs=32768
  • 为了加速训练和节省显存,使用了:Mixed-precision,gradient checkpointing, half-precision Adam statistics,half-precision stochastically rounded text encoder weights

实验

  1. zero-shot transfer:作者建议将零样本迁移能力作为衡量模型学习能力的一种方式。
    用于图像分类
    在这里插入图片描述

  2. 如何zero-shot?
    之前分类方式的弊端:多义性的label,缺乏上下文,无法判断。并且训练数据文本大多为完整句子,而非一个单词。
    zero-shot方式:使用prompt template “A photo of a {label}.”
    使用prompt方式,在ImageNet提高了1.3%的准确率
    在这里插入图片描述
    针对不同的分类任务,详尽地指出是哪一种类别,会提高zero-shot的效果。例如Oxford-IIIT Pets数据集, “A photo of a {label}, a type of pet.”。还有Food101数据集a type of food ,FGVC Aircraft使用a type of aircraft。又或者指定图像形式,比如卫星图像-a satellite photo of a {label}。

除此之外,ensembling over multiple zeroshot classifiers来提升效果,such as 'A photo of a big {label}" and “A photo of a small {label}”。在Embedding层面计算一个averaged text embeddings。
在这里插入图片描述
3. Zero shot在各分类数据集效果
在卫星图像分类(EuroSAT和RESISC45)、淋巴结肿瘤检测(PatchCamelyon)、合成场景(CLEVRCounts)、自动驾驶相关任务(如德国交通标志识别(GTSRB)、识别到最近汽车的距离(KITTI距离)等几个专业、复杂或抽象任务上,Zero shot CLIP非常弱。作者认为:测量零样本迁移,而不是少样本迁移,对于学习者没有先前经验的困难任务(例如几乎所有人的淋巴结肿瘤分类)是一项有意义的评估。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

图像数字化基础

一、像素 1、获取图像指定位置的像素 import cv2 image cv2.imread("E:\\images\\2.png") px image[291,218] print("坐标(291,218)上的像素的BGR值是:",px) (1)RGB色彩空间 R通道:红色通道 G通道&…

RH850---注意问题积累--1

硬件规格(引脚分配,内存映射,外设功能规格、电气特性、时序图)和操作说明 注意:有关使用的详细信息,请参阅应用说明 ---------外围函数。。。 1:存储指令完成与后续同步指令的一代 当控制寄存器被存储指令更新时,从存储的执行开始…

南京邮电大学计算机网络实验二(网络路由器配置RIP协议)

文章目录 一、 实验目的和要求二、 实验环境(实验设备)三、 实验步骤四、实验小结(包括问题和解决方法、心得体会、意见与建议等)五、报告资源 一、 实验目的和要求 掌握思科路由器的运行过程,掌握思科路由器的硬件连线与接口,掌…

VBA学习(13):获取多层文件夹内文件名并建立超链接

代码使用了FileSystemObject对象和递归的方法实现文件夹和文件的遍历功能。分别将文件夹名称和文件名提取在表格的A/B列,并对文件名创建了超链接。 示例代码如下: Sub AutoAddLink()Dim strFldPath As StringWith Application.FileDialog(msoFileDialog…

如何下载DVS Gesture数据集?解决tonic.datasets.DVSGesture错误HTTP Error 403: Forbidden

1 问题 DVSGesture数据集是一个专注于动态视觉传感(Dynamic Vision Sensor, DVS)技术的数据集,它包含了基于事件的图像记录,用于手势识别任务。DVSGesture数据集由一系列动态图像组成,这些图像是通过动态视觉传感器捕…

抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号

目录 前言: 一、抖音矩阵系统有哪些功能? 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布,智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题? 总结&#xff…

理解HTTP请求格式

HTTP概念 HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议;HTTP是一个客户端(用户)和服务端(网站)之间请求和响应的标准。 HTTP 协议是以 ASCII 码传输&…

Gobject tutorial 八

The GObject base class Object memory management Gobject的内存管理相关的API很复杂,但其目标是提供一个基于引用计数的灵活的内存管理模式。 下面我们来介绍一下,与管理引用计数相关的函数。 Reference Count 函数g_object_ref和g_object_unref的…

怎么将几段音频合并在一起,试试这几个音频拼接小妙招

怎么将多个音频合并在一起呢?音频是我们日常工作生活中常见的文件,音频与我们息息相关,无论你是音乐爱好者,还是喜欢记录生活中的声音,都离不开音频。因此我们会遇到关于很多音频剪辑的难题,就像今天小编给…

usb摄像头应用编程

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

conda install xformers -c xformers/label/dev 的安装问题

在StableSR项目框架中,需要执行 conda install xformers -c xformers/label/dev 但是报错,错误显示,版本不匹配,如下所示: 我改用pip来安装,好像就不报错了: pip install xformers

javaWeb项目-ssm+vue企业台账管理平台功能介绍

本项目源码:javaweb项目ssm-vue企业台账管理平台源码-说明文档资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboo…

vue项目——前端CryptoJS加密、解密

1、vue项目需要安装CryptoJS安装包 npm install crypto-js 2、在项目中引入CryptoJS import CryptoJS from crypto-js 3、使用,代码如下 // 此处key为16进制let key jiajiajiajiajiajiajiajia;console.log(密钥:, key);// key格式化处理key Crypt…

【前端开发工具】VS Code安装和使用

文章目录 一、前言二、下载三、安装四、配置五、使用5.1 导入项目5.2 本地运行项目5.3 修改界面文案,验证效果5.4 添加日志打印5.5 代码调试5.6 代码提交到Git仓库 六、总结 一、前言 本文介绍一下在前端vue项目中,VS Code的安装和配置。 什么是VS Code…

【干货分享】25地学考研推免夏令营汇总表

​ 25考研学子们,考研准备要赶早。 小编给大家整合准备了25地信考研夏令营时间信息表,需要的宝子收藏起来。 ​ 话不多说,需要的小伙伴直接评论区留言 25地信考研择校信息表:

IT入门知识第一部分《IT基础知识》(1/10)

目录 IT入门知识第一部分《IT基础知识》(1/10) 1.引言 2.第一部分:IT基础知识 2.1 计算机硬件 CPU:计算机的心脏 内存:数据的临时居所 存储设备:数据的长期仓库 输入输出设备:与计算机的…

[Mysql] 的基础知识和sql 语句.教你速成(上)——逻辑清晰,涵盖完整

目录 前言 上篇的内容概况 下篇的内容概况 数据库的分类 关系型数据库 常见的关系型数据库系统 非关系型数据库 1. 键值对数据库(Key-Value Stores) 特点: 常见的键值对数据库: 2. 文档数据库(Document Store…

【React】Axios请求头注入token

业务背景: Token作为用户的数据标识,在接口层面起到了接口权限控制的作用,也就是说后端有很多接口都需要通过查看当前请求头信息中是否含有token数据,来决定是否正常返回数据 // 添加请求拦截器 request.interceptors.request.use(config …

填坑-celery正常启动后能收到任务但不执行任务的解决办法

场景 Flask开发中用celery 6正常启动后能收到任务但不执行任务的解决办法,也没有错误提示…… INFO/MainProcess] Task app.add_together[ce406ed8-71b3-49e6-8556-f44bfe66549c] received [2024-06-20 19:38:10,632: INFO/SpawnPoolWorker-36] child process 2244…

求最小生成树的新算法

不管 prim 算法还是 kruskal 算法都基于 “当前可见最短边” 作贪心策略,但这并不适合分布式并行操作,比方说所有节点一起构建最小生成树,这些算法都显得同步开销过大,甚至导出错误的结果。 最近研究并构建最大流多路径传输协议的…