CatLIP,加速2.7倍!采用分类损失的CLIP水准的预训练视觉编码器

CatLIP,加速2.7倍!采用分类损失的CLIP水准的预训练视觉编码器
FesianXu 20241018 at Wechat Search Team

前言

传统的CLIP采用对比学习的方式进行预训练,通常需要汇聚多张节点的多张设备的特征向量以进行打分矩阵的计算,训练速度通常都较慢,本文介绍一种采用传统的BCE损失进行多标签分类的方式,在提速2.7倍的同时,能达到CLIP的模型性能。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢

  • 关键字:多标签分类损失、高效视觉预训练方式、CLIP同水平编码器

联系方式:

  • e-mail: FesianXu@gmail.com
  • github: https://github.com/FesianXu
  • 知乎:https://www.zhihu.com/people/FesianXu
  • 微信公众号:机器学习杂货铺3号店

CLIP [2] 开创了一个图文大规模预训练的时代,然而CLIP也具有不足之处,因此引出了一系列的改进工作,具体可见 [3]。 针对CLIP在大规模数据下训练速度慢的问题,已有一些工作研究,如SigLIP [4] 尝试用sigmoid损失去替换infoNCE损失,从而减少通信量,在提速的同时还能提高模型效果,具体可见博文 [5]。 本文介绍的CatLIP [1], 则是考虑将对比学习这种方式改为多标签分类任务,从而进一步减少通信量,并且能在各任务下达到CLIP水准的视觉编码表现。如Fig 1 (b) 所示,对于当前batch给定的 N N N个图片-文本对,CLIP需要分别进行图片编码器和文本编码器的计算得到特征向量,然后组成 N 2 N^2 N2个正负样本对进行损失计算。 而对于CatLIP来说,如Fig 1 (a) 所示,任务从CLIP的厘清 N 2 N^2 N2个正负样本对,变成了只需要对 N N N个图片进行多标签分类,分类的多个类别来自于当前图片-文本对中的文本,为了提高泛化性,我们还需要对这文本进行找近义词的操作。 整个过程中,不再需要进行特征向量的跨卡通信,不再需要训练文本编码器,而只需要最基本的梯度信息跨卡通信(多机多卡训练难以避免的基础通信代价)。从Fig 1.的实验来看,CatLIP能在保持下游任务性能持平的情况下,提速2.7倍!

catlip_vs_clip

Fig 1. CatLIP和CLIP的流程对比,以及性能和训练速度对比,其中🔥表示模型参数可训练。

让我们具体看下整个工作,笔者曾经在博文 [3] 中谈到过自己对CLIP的理解,CLIP主要是跨图文模态语义对齐,进一步说就是对视觉语义元素,包括实体(Entity),属性(Attribution),关系(Relation)进行语义对齐。其中最为主要的,可能就是“实体”和“属性”了,至于“关系”这一个元素,则可以在语义融合阶段进行更加高效地学习。然而,有一个问题不禁在心中涌出:采用大规模对比学习的方式,去学习“实体”和“属性”,性价比是否足够高呢?

为了回答这个问题,有必要回顾下CLIP学习到语义对齐的原理,对比Image-Text Matching(ITM)和Mask Image Modeling(MIM)来说,CLIP是高效的语义对齐机制。 CLIP的模型结构和正负样本组成策略并不复杂,其负样本构成方式是经典的batch negative方式,也即是从batch内部去构成负样本,而CLIP的贡献点在于能够采用海量的来自于互联网的图文对数据(约4亿条图文对)和超大batch size(约32000)进行预训练,并且为了能够充分学习,采用了大容量的模型结构。为何CLIP的这种“朴素”学习方式可以有效进行语义对齐呢?如Fig 2. 所示,在一次对比中,正样本可以和海量的负样本进行对比,这种对比有两种维度:

  • 图-文对比:一个图片对应有一个匹配的文本(正样本),和个不匹配的文本(负样本),此时一次正负样本对比,可以充分地厘清不同文本中的视觉语义对齐。如Fig 6.2中,以第一行视为正样本,那么对于文本中的“幼犬、小狗、小狗宝宝”都是与正样本图片相符的,而其负样本文本“小猫”则和正样本图片不负。因此一次性就厘清了“小狗,幼犬”和“小猫”的语义差别,如果我们的负样本足够大,那么就能够在一次迭代过程中,厘清非常多的文本中的视觉概念,而这是MLM和ITM不能做到的。
  • 文-图对比:和图-文对比类似,一个文本对应有一个匹配的图片(正样本),和 N − 1 N-1 N1个不匹配的图片(负样本),同样一次正负样本的对比,可以厘清不同图片之间的视觉语义对齐。同样以第一行为正样本,那么文本中的"幼犬、小狗、小狗宝宝"等字样只和第一行图片匹配,和其他图片并不能有效匹配,因此能一次性厘清非常多图片中的视觉概念。

也即是CLIP中对于语义概念,除了本身图文对的正样本监督之外,都是依赖与负样本的“对比”学习出来的,而这种模式主要在学习视觉实体和视觉属性。这种学习机制,在学习初期可以有效地进行视觉概念的厘清,但是到后期后,绝大部分的负样本将会变成简单负样本(语义概念已在前期学习到了),使得学习变得缓慢且低效。回到我们的问题:光是为了实体和属性的对齐,采用大规模对比学习的方式去学习是不够划算的。

fig-clip-semantic-alignment

Fig 2. CLIP的对比学习方式,使得能够在一次对比过程中,有效厘清正样本和负样本中的视觉语义概念。

而本文的CatLIP作者提出了一种方法,将对比学习任务改为多标签分类任务,其中的多标签就是来自于图文对中的文本描述,主要就是各种名词性的实体,为了进一步提高泛化性和zero-shot能力,作者还对这些实体进行求同义词。让我们形式化表达下整个过程,假设当前batch有 N N N个图文对 < I i , T i > , i = 1 , ⋯ , N <I_i, T_i>, i = 1,\cdots, N <Ii,Ti>,i=1,,N,求同义词的过程 可表示为 E x t r a c t S y n s e t ( T ) = { f ( w i ) ∣ p o s i i s a n o u n ∀ i = 1 , ⋯ , m } \mathrm{ExtractSynset}(T) = \{f(w_i) | \mathrm{pos_i \ is \ a \ noun \ \forall i=1,\cdots,m}\} ExtractSynset(T)={f(wi)posi is a noun ∀i=1,,m} ,其中的 f ( ⋅ ) f(\cdot) f()将原文本描述 W W W中的名词 w i w_i wi映射到WordNet中的同义词集合 S S S。这个过程中,不难知道同义词中也会有不同的共现次数,次数少的意味着这个同义词是长冷的,为了减少多分类分类的代价,可以将其舍弃,本文设定共现次数大于阈值 V τ = 500 V_{\tau} = 500 Vτ=500的才会保留下来。最终作者在DataComp-1.3BCC3M这两个预训练数据集上提取了同义词集合,可以看到:

  • 越大的预训练集合(13亿 vs 3百万),其同义词集合的尺度就越大(将近40000 vs 将近10000),这代表越大的预训练数据具有更多的内容丰富度和多样性。
  • 采用阈值 V τ = 500 V_{\tau} = 500 Vτ=500进行筛选后,整个多标签分类任务的类别将在2000-25000左右。

syncnet_vocab_stat

Fig 3. 分析图文对数据集中提取的WordNet同义词集,较大的数据集(13亿 vs 3百万)通常包含更多数量的同义词,表明较大数据集中的内容多样性增加。

作者对比了CatLIP和CLIP (图像编码器都是ViT B/16)在数据集CC3M上的预训练效果,采用ImageNet-1k的线性探测(Linear Probe)top-1准确率作为指标监控,如Fig 4. 所示,可以发现:

  • CatLIP不需训练文本编码器,并且只需要对最基本的梯度进行跨卡通信,训练速度快。
  • CatLIP的指标随着训练epoch的数量提高而递增,而CLIP则会达到饱和,这意味着CLIP或许需要更大的预训练数据集。

cc3m_catlip_vs_clip

Fig 4. 对比CatLIP和CLIP的预训练速度和效果。在CC3M数据集上进行预训练,采用ImageNet-1K的线性探测top-1准确率作为指标。

CC3M是一个只有3百万图文对的小型预训练数据,作者也进行了数据尺度放缩的试验,将预训练数据集换成了DataComp-1.3B,一个具有13亿图文对的数据集,实验结果如Fig 5.所示,通过放大预训练的数据量,CatLIP能够得到可观的、一致的性能提升。

catlip_data_scaling

Fig 5. CatLIP中的数据放缩试验。通过在ImageNet-1k和Places365上进行线性探测(LP)和全微调(FT),将图像文本数据集从300万个样本扩展到13亿个样本可以提高ViT B/16的迁移学习精度。

作者在原文还对模型尺度放缩的效果进行了对比,同时用CatLIP在其他任务(如分类任务、语义分割、目标检测和实例分割等)进行了效果验证,结论是采用CatLIP的方式预训练的模型,在这些任务中都得到了持平或者更好的模型效果表现。在此就不展开了。最后贴一张CatLIP和其他同类模型的对比参考,任务是分类任务。

transfer_compare

Fig 6. 使用监督和弱监督方法在不同数据集上预训练的ViT模型的迁移学习精度(分类任务)。迁移学习是通过在下游分类任务上微调整个模型来实现的。

笔者读后感

这篇论文给笔者带来的启发,就是CLIP中语义对齐部分的实体语义对齐,可以拆分为简单直白的多标签分类任务进行建模,损失就是Binary Cross Entropy损失,这个的确能带来训练速度上的大幅度提升。不过笔者还是有点疑惑的地方:

  1. 只对名词进行检测并且求同义词集合,一些视觉属性,比如颜色、图样(条纹状、格子状等)等形容词,是不是就没法建模了?这个CLIP应该是可以建模出来的。同理,关系类的视觉概念似乎也没办法建模了。
  2. 对于组合型视觉概念更加不友好了,虽然CLIP也对组合型的视觉概念不友好,但是还是能学习出高频组合概念的,但是我理解在CatLIP中由于完全拆分为了多标签分类任务,并且没有对比的过程,已经没办法建模组合概念了。
  3. 我直观上感受是,CLIP是一个主要通过正负样本对比去学习视觉概念的过程,这个过程如果设计好正负样本,比较容易建模细粒度的视觉概念,CatLIP这种方式,可能没办法对细粒度的概念(比如比同义词集合中的描述粒度还小的概念)进行学习。

先存疑吧,后面继续看看有没有后续工作讨论我的这些疑问的,也欢迎读者评论区交流&指正

Reference

[1]. Mehta, Sachin, Maxwell Horton, Fartash Faghri, Mohammad Hossein Sekhavat, Mahyar Najibi, Mehrdad Farajtabar, Oncel Tuzel, and Mohammad Rastegari. “CatLIP: CLIP-level Visual Recognition Accuracy with 2.7 x Faster Pre-training on Web-scale Image-Text Data.” arXiv preprint arXiv:2404.15653 (2024). aka CatLIP

[2]. Radford, Alec, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry et al. “Learning transferable visual models from natural language supervision.” In International conference on machine learning, pp. 8748-8763. PMLR, 2021. aka CLIP

[3]. https://fesianxu.github.io/2023/03/04/story-of-multimodal-models-20230304/, 《视频与图片检索中的多模态语义匹配模型:原理、启示、应用与展望》

[4]. Zhai, Xiaohua, Basil Mustafa, Alexander Kolesnikov, and Lucas Beyer. “Sigmoid loss for language image pre-training.” In Proceedings of the IEEE/CVF International Conference on Computer Vision, pp. 11975-11986. 2023. aka SigLIP

[5]. https://fesianxu.github.io/2024/09/08/sigmoid-language-image-pretrain-20240908/, 《SigLIP——采用sigmoid损失的图文预训练方式》

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

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

相关文章

linux笔记(selinux)

一、概述 定义SELinux&#xff08;Security - Enhanced Linux&#xff09;是一种基于 Linux 内核的强制访问控制&#xff08;MAC&#xff09;安全机制。它为 Linux 系统提供了更细粒度的安全策略&#xff0c;增强了系统的安全性。目的主要目的是限制进程对系统资源&#xff08;…

江西省补贴性线上职业技能培训管理平台(刷课系统)

江西省补贴性线上职业技能培训管理平台(刷课系统) 目的是为了刷这个网课 此系统有两个版本一个是脚本运行&#xff0c;另外一个是可视化界面运行 可视化运行 技术栈:flask、vue3 原理: 通过分析网站接口&#xff0c;对某些接口加密的参数进行逆向破解&#xff0c;从而修改请求…

Scala 中 set 的实战应用 :图书管理系统

1. 创建书籍集合 首先&#xff0c;我们创建一个可变的书籍集合&#xff0c;用于存储图书馆中的书籍信息。在Scala中&#xff0c;mutable.Set可以用来创建一个可变的集合。 val books mutable.Set("朝花惜拾", "活着") 2. 添加书籍 我们可以使用操作符…

简单介绍一下mvvm mvc mvp以及区别、历史

MVC&#xff08;Model - View - Controller&#xff09; 因MVC架构的灵活性&#xff0c;架构图形式很多&#xff0c;仅供参考 历史&#xff1a; MVC 是最早出现的软件架构模式之一&#xff0c;其历史可以追溯到 20 世纪 70 年代&#xff0c;最初被用于 Smalltalk - 80 环境。…

“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“

我的个人主页 接下来我将方享四道由易到难的编程题&#xff0c;进入我们的JavaSE复习之旅。 1&#xff1a;大小写转换------题目链接 解题思路&#xff1a; 在ASCII码表中&#xff0c;⼤写字⺟A-Z的Ascii码值为65- 90&#xff0c;⼩写字⺟a-z的Ascii码值为97-122。每个字 ⺟…

设备租借系统(源码+文档+部署+讲解)

本文将深入解析“设备租借系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 本项目名称为设备租借系统&#xff0c;是对企业内部设备进行信息化管理的系统&#xff0c;可以实现设备的借用、归还、状态跟踪等功能&#xff…

使用 PageHelper 在 Spring Boot 项目中实现分页查询

目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…

【C++】C++移动语义、左值右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符

二十五、C移动语义、左值和右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符 本部分讨论一些更高级的C特性&#xff1a;C移动语义。但是讲移动语义之前我们得先了解什么左值右值、左值引用和右值引用。 1、C的左值和右值、左值引用和右值引用左值是有地址的…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入&#xff0c;一批国产中间件厂商破土而出&#xff0c;并在短时间内迅速发展&#xff0c;我国中间件市场迎来洗牌&#xff0c;根据市占率&#xff0c;当前我国中间件厂商排名依次为&#xff1a;东方通、宝兰德、中创股份、金蝶天燕、普元…

Android自启动管控

1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外&#xff0c;还会导致占用过多的系统CPU和内存资源&#xff0c;造成系统卡顿、发热、电池消耗过快&#xff1b;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…

C++上机实验|多态性编程练习

1.实验目的 (1)理解多态性的概念。 (2)掌握如何用虚函数实现动态联编 (3)掌握如何利用虚基类。 2.实验内容 设计一个飞机类 plane,由它派生出歼击机类fighter和轰炸机类 bomber,歼击机类fighter 和轰炸机类bomber 又共同派生出歼轰机(多用途战斗机)。利用虚函数和虚基类描述…

ctfshow(328)--XSS漏洞--存储型XSS

Web328 简单阅读一下页面。 是一个登录系统&#xff0c;存在一个用户管理数据库。 那么我们注册一个账号&#xff0c;在账号或者密码中植入HTML恶意代码&#xff0c;当管理员访问用户管理数据库页面时&#xff0c;就会触发我们的恶意代码。 思路 我们向数据库中写入盗取管理员…

Kubernetes的概述与架构

Kubernetes 的概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统&#xff0c;其服务、支持和工具的使用范围广泛。 Kubernetes 这个名字源于…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序 任务调度的分类&#xff1a; 1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序&#xff0c;比如…

408最后冲刺阶段,怎么做题才能考到120+?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重要性排序如下&#xff1a;真题占据首位&#xff0c;紧随其后的是王道模拟题&#xff0c;王道书与题目则紧随其后&#xff0c;而408统考配套习题&#xff08;高教版&#xff09;与之大致相当。 真题&#xff0c;无疑…

uniapp上拉刷新下拉加载

方法一&#xff1a; z-paging 的组件库&#xff1a; show-loading-more-no-more-view"false" 该属性控制是否显示 "加载更多" 或 "没有更多" 的提示。如果设为 false&#xff0c;则不会显示这些提示。如果设为 true&#xff0c;当数据加载完毕…

Java I/O(输入/输出)——针对实习面试

目录 Java I/O&#xff08;输入/输出&#xff09;什么是Java I/O流&#xff1f;字节流和字符流有什么区别&#xff1f;什么是缓冲流&#xff1f;为什么要使用缓冲流&#xff1f;Java I/O中的设计模式有哪些&#xff1f;什么是BIO&#xff1f;什么是NIO&#xff1f;什么是AIO&am…

AJAX 全面教程:从基础到高级

AJAX 全面教程&#xff1a;从基础到高级 目录 什么是 AJAXAJAX 的工作原理AJAX 的主要对象AJAX 的基本用法AJAX 与 JSONAJAX 的高级用法AJAX 的错误处理AJAX 的性能优化AJAX 的安全性AJAX 的应用场景总结与展望 什么是 AJAX AJAX&#xff08;Asynchronous JavaScript and XML…

本地保存mysql凭据实现免密登录mysql

本地保存mysql凭据 mysql加密登录文件简介加密保存mysql用户的密码到本地凭据 mysql加密登录文件简介 要在 mysql客户端 上连接 MySQL 而无需在命令提示符上输入用户名和口令&#xff0c;下列三个位置可用于存储用户的mysql 凭证来满足此要求。 配置文件my.cnf或my.ini /etc…

图形几何之美系列:仿射变换矩阵(二)

“ 在几何计算、图形渲染、动画、游戏开发等领域&#xff0c;常需要进行元素的平移、旋转、缩放等操作&#xff0c;一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等&#xff0c;四元数在图形学中主要用于解决旋转问题&#xff0c;特别是在三维…