CoCa论文笔记

摘要

计算机视觉任务中,探索大规模预训练基础模型具有重要意义,因为这些模型可以可以极快地迁移到下游任务中。本文提出的CoCa(Contrastive Captioner),一个极简设计,结合对比损失和captioning损失预训练一个image-text encoder-decoder基础模型,该模型包含对比方法,如CLIP,和生成方法,如SimVLM,的学习能力。与基本的encoder-decoder transformer使用所有的decoder层来编码输出不同,CoCa在上半部分的decoder中舍去cross-attention来编码unimodel单模态文本表示,然后级联剩下的decoder结合image encoder用于multimodel图文对表示。在单模态的图像和文本表示之间使用对比损失函数,对多模态decoder的输出应用captioning损失来自动预测文本tokens。通过共享相同的计算图,两个训练目标以最小的开销有效地训练。CoCa在网络文本数据和带注释的图像数据上进行预训练,图像的标签被简单视为文本来学习特征表示。此外,CoCa在零样本迁移和各种特定的下游任务上都取得了最好的效果,包含视觉识别(ImageNet,Kinetics-400/600/700,Moments-in-Time),检索,多模型理解和图像字幕。在图像分类任务上,CoCa的zero-shot取得86.3%的top-1准确率,linear probe取得90.6%,微调上取得91.0%的精度。

Introduction

深度学习最近已经见证了基础语言模型的兴起,例如BERT,T5,GPT-3,该模型使用大规模数据进行预训练,并通过零样本、少样本或迁移学习展示通用多任务处理能力。与专用模型相比,针对大量下游任务的预训练基础模型可以摊销训练成本。
对于视觉和视觉-语言问题,几个基础模型已经进行探究过:

  • Single-encoder model:之前的工作验证了single-encoder模型的有效性,该模型在图像分类数据集,如ImageNet,上使用交叉熵损失函数进行预训练。模型的编码器提供通用的视觉特征表示,可以在各种图像和视频理解的下游任务上进行微调。但是这些模型非常依赖于图像的标注,同时不涉及任何自然语言知识,阻碍其在视觉和语言多模态的下游任务上的应用。

  • Dual-encoder model:指的是CLIP这一条线上的研究。利用海量从网络上采集的图文对,以对比损失函数优化两个encoder,即image encoder和text encoder分别对图像和文本进行独立编码。CLIP模型在zero-shot图像分类任务和图像-文本检索上都取得出色的成绩,但是由于CLIP是图像和文本独立编码,且编码过程中没有任何图像和文本侧的交叉,只在最后计算余弦相似度,缺少图像和文本的融合表示,因此不适用于VQA等需要对图像和文本联合理解的任务。

  • Encoder-Decoder model:这种模型使用encoder-decoder的结构,encoder侧对图像进行编码,decoder侧学习一个跨模态的语言模型,预测图像对应的文本。这种生成式方法天然适用于看图说话任务,并且图像和文本在encoder-decoder的attention交互有助于多模态信息融合,适用于多模态理解相关任务。缺点在于,没有像CLIP一样生成单独的文本表示,不能灵活应用到图文匹配任务中。


CoCa统一上面三种范式,训练一个图像-文本模型既可以生成图像侧和文本侧的单独表示,又能进行更深层次的图像、文本信息融合,适用于更广泛的任务。

模型结构

介绍CoCa网络结构之前,首先回顾一下之前三种基础模型的不同之处。

  • Single-Encoder Classification:该方法使用一个大型图像标注数据集,如ImageNet、Instagram、JFT,来训练一个视觉encoder。这些图像标签通常使用交叉熵损失函数来映射到固定的类别空间分布中,公式如下。

L c l s = − p ( y ) l o g q θ ( x ) L_{cls}=-p(y)logq_{\theta}(x) Lcls=p(y)logqθ(x)

  • Dual-Encoder Contrastive Learning:该方法使用海量从网络上采集的图像对进行训练,以对比损失函数优化image和text encoder,公式如下:

L c o n = − 1 N ( ∑ i N l o g e x p ( x i T y i / σ ) ∑ j = 1 N e x p ( x i T y i / σ ) + e x p ( y i T x i / σ ) ∑ j = 1 N e x p ( y i T x i / σ ) ) L_{con}=-\frac{1}{N}(\sum_i^Nlog\frac{exp(x_i^Ty_i/\sigma)}{\sum_{j=1}^Nexp(x_i^Ty_i/\sigma)}+\frac{exp(y_i^Tx_i/\sigma)}{\sum_{j=1}^Nexp(y_i^Tx_i/\sigma)}) Lcon=N1(iNlogj=1Nexp(xiTyi/σ)exp(xiTyi/σ)+j=1Nexp(yiTxi/σ)exp(yiTxi/σ))
其中 x i x_i xi y j y_j yj分布为图像和文本的归一化编码。 σ \sigma σ为温度系数来缩放逻辑值。

  • Encoder-Decoder Captioning:encoder侧对图像进行编码,decoder侧学习一个跨模态的语言模型,预测图像对应的文本,损失函数如下:

L c a p = − ∑ t = 1 T l o g P θ ( y t ∣ y < t , x ) L_{cap}=-\sum_{t=1}^TlogP_{\theta}(y_t|y_{<t},x) Lcap=t=1TlogPθ(yty<t,x)
如下图所示,CoCa模型的整体框架包含3个部分:一个encoder(image encoder)和两个decoder(Unimodel Text Decoder和Multimodel Text Decoder)。Image Encoder采用图像模型对图像进行编码,例如ViT等。Unimodel Text Decoder和CLIP中的text encoder类似,用于提取文本的特征,是一个不和图像侧进行信息交互的文本解码器。Unimodel Text Decoder和Image Encoder之间没有cross attention,而MultiMode Text Decoder建立在Unimodel Text Decoder之上,和Image Encoder进行交互,生成图像和文本交互信息,并解码还原对应文本。

整个模型的损失包括对比学习和看图说话两部分。损失函数如下:
L C o C a = λ c o n ∗ L c o n + λ c a p ∗ L c a p L_{CoCa}=\lambda_{con}*L_{con}+\lambda_{cap}*L_{cap} LCoCa=λconLcon+λcapLcap
单模态文本decoder生成文本编码,末尾的cls token包含文本统一表示,和图像侧编码进行对比学习。多模态文本编码部分和图像侧编码输出进行更深入交互,生成文本预测结果。
此外,CoCa采用attention pooling的方式融合图像侧信息。对于图像识别任务,使用单个图像编码获取全局表示效果更好,而对于多模态理解任务需要更多视觉tokens获取局部特征。因此CoCa在图像侧使用attention pooling既可以提取一个统一的编码,也可以提取每个token的表示。对于生成式任务会用一个维度为256的query进行attention,而对比学习则采用维度为1的query提取全局信息。

实验结果

预训练设置

Data:CoCa使用JFT-3B和ALIGN两个数据集从头开始训练模型,不同于之前的模型首先使用交叉熵损失函数预训练一个图像编码器,CoCa直接从头开始训练所有参数。
Optimization:batch size设置为65536,其中每个batch中的数据来自JFT和ALIGN数据集各一半。训练步数为500k,大约是JFT训练5个epoch,ALIGN训练10个epoch。优化函数采用Adafactor, β 1 = 0.9 , β 2 = 0.999 \beta_1=0.9,\beta_2=0.999 β1=0.9,β2=0.999,权重衰减率为0.01。CoCa预训练的输入大小为288×288,patch size为18×18,之后又以576×576的分辨率训练了一个epoch。

实验结果

CoCa在图像分类、图文检索、看图说话等多个任务上都取得非常亮眼的效果。下图为CoCa在多个任务上的效果对比,可以看到CoCa在多个任务和数据集上都达到SOTA,在ImageNet上达到91%的效果。

视觉识别任务

CoCa分别在图像分类数据集ImageNet和视频数据集Kinetics-400, 600, 700上进行实验验证其有效性。实验过程中的超参数设置如下。

冻结CoCa的预训练权重,然后在数据集上进行训练,在相同的设置下,与其他模型进行对比,效果如下,可以看到CoCa已经取得较好的Top-1精度,同时在视频任务上超过之前的SOTA方法。进一步微调CoCa的encoder,在所有数据集上效果都有提升,在ImageNet上取得新的SOTA达到91%的Top-1值。

跨模式对齐任务

在该任务中,CoCa的所有参数冻结直接用来提取特征进行zero-shot,在这部分多模态decoder没有被使用。

零样本图文检索

CoCa在MSCOCO和Flickr30K两个基础的图文检索数据集上进行测试。按照CLIP的测试方法,首先分别输入图像/文本到对应的encoder中得到测试集中所有的图像/文本embeddings,然后通过余弦相似度召回。如下图所示,CoCa在所有评价指标上都超过之前方法很多。结果显示CoCa可以学习到很好的单模态表示并且跨膜态对齐它们。

零样本图像分类

如下图所示,CoCa在ImageNet上取得一个新的SOTA零样本图像分类结果。此外,通过对比平均值可以知道CoCa具有较好的泛化性。

零样本视频检索

CoCa在MSR-VTT数据集上测试视频-文本检索效果。如下图所示CoCa在text-to-video和video-to-text召回上都取得最好的效果。

多模态理解任务

CoCa一个关键的优势在于其可以像encoder-decoder模型一样处理多模态embeddings,因此CoCa可以进行看图描述和多模态理解任务。

多模态理解

CoCa分别在VQA、SNLI-VE、NLVR2上进行多模态理解任务测试,如下图所示,CoCa效果超过最强的视觉语言预训练模型,同时在这三个任务上都取得了SOTA。

看图说话

除了多模态分类任务,CoCa同样可以直接应用到看图说话任务中。使用captioning损失函数在MSCOCO数据集上微调CoCa,然后进行MSCOCO的Karpathy-test子集测试,同时在线测试NoCaps数据集。如下图所示,Coca在MSCOCO数据集上超越使用交叉熵损失训练的最强模型。在NoCaps测试上,CoCa分别在测试和验证子集上取得SOTA。

结论

本文提出了一个新的图像文本基础模型CoCa,融合了已有的图像预训练范式。CoCa可以使用图像文本对进行端到端训练,并在encoder-decoder范式中有效地对比和caption损失。最重要的是CoCa在一系列下游任务中都取得了最好的效果。

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

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

相关文章

面试题:有一个 List 对象集合,如何优雅地返回给前端?

文章目录 1.业务背景每个对象里面都带上了重复的一个sessionId数据&#xff0c;我想提出来该怎么办&#xff1f; 2.实体类3.自定义Mapper和xml文件4.Service层5.Controller层 1.业务背景 业务场景中&#xff0c;一个会话中存在多个场景&#xff0c;即一个session_id对应多个sc…

c#字符串格式化

字符串格式化是一种将变量的值插入到字符串中的方法。它允许我们创建动态的字符串&#xff0c;其中包含变量的值。 string.Format 通过在字符串中使用占位符{0}&#xff0c;{1}等&#xff0c;我们可以指定要插入的变量的位置。然后&#xff0c;通过在string.Format方法的参数…

Zabbix如何监控腾讯云NAT网关

1、NAT网关介绍 NAT 网关&#xff08;NAT Gateway&#xff09;是一种支持 IP 地址转换服务&#xff0c;提供网络地址转换能力&#xff0c;主要包括SNAT&#xff08;Source Network Address Translation&#xff0c;源网络地址转换&#xff09;和DNAT&#xff08;Destination N…

如何使用Python和Matplotlib创建双Y轴动态风格折线图 | 数据可视化教程

前言 我的科研论文中需要绘制一个精美的折线图&#xff0c;我的折线图中有三条曲线&#xff0c;分别表示期望角速度指令信号&#xff0c;和实际的角速度信号&#xff0c;还有实际的航向角信号&#xff0c;现在我已经拥有了数据&#xff0c;使用Python中matplotlib.plt.plot来直…

421.数组中两个数的最大异或值

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;421. 数组中两个数的最大异或值 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; int 型 数据有 32 位。从最高位开始逐位判断能否为 1&#xff0c;若可以&#xff0c;该位置 1&#xff0c;否…

Java线程的基本概念和五种状态

1. 线程 1.1 创建线程 创建线程通常有以下三种方式&#xff1a; 实现 Runnable 接口&#xff0c;并重写其 run 方法&#xff1a; public class J1_Method01 {public static void main(String[] args) {System.out.println("Main线程的ID为&#xff1a;" Thread.curr…

CentOS 7 通过 yum 安装 MariaDB(Mysql)

这一版取消了修改配置的操作&#xff0c;改成每次创建数据库时手动指定字符集编码&#xff1b;这一版取消了修改密码的操作&#xff0c;保留 MariaDB 使用无密码的情况&#xff0c;即密码是 ""。 安装步骤&#xff1a; 以下操作都以 root 用户进行操作 以下操作都以 …

公安涉密视频会议建设方案

公安涉密视频会议建设方案的制定需要考虑多方面因素。其一般是在复杂涉密网络环境中部署&#xff0c;怎样的内部保密部署方可保障涉密会议最大程度的加密进行呢&#xff1f;以下是从不同维度建设方案&#xff0c;可以根据实际应用场景进行相应的修改以及配置与之匹配的视频会议…

〔001〕虚幻 UE5 发送 get、post 请求、读取 json 文件

✨ 目录 🎈 安装 varest 扩展🎈 开启 varest 扩展🎈 发送 get 请求🎈 发送 post 请求🎈 读取 json 文件🎈 安装 varest 扩展 打开 虚幻商城,搜索 varest 关键字进行检索, varest 是一个 api 调用插件,支持 http/https 请求,也支持 json 文件的读取,最关键是该…

mermaid学习第一天/更改主题颜色和边框颜色/《需求解释流程图》

mermaid 在线官网&#xff1a; https://mermaid-js.github.io/ 在线学习文件&#xff1a; https://mermaid.js.org/syntax/quadrantChart.html 1、今天主要是想做需求解释的流程图&#xff0c;又不想自己画&#xff0c;就用了&#xff0c;框框不能直接进行全局配置&#xff0…

动态路由协议OSPF优化提速特性

1.OSPF协议通信过程与部署&#xff1b; 2.OSPF协议在项目上的应用场景&#xff1b; 3.OSPF有哪些优化特性&#xff1f; - OSPF - 开放式最短路径优先 - 一个动态路由协议 - 路由协议 - 理解魏 运行在路由器的一个软件 - 目的&#xff1a;为了帮助路由器和路由器彼…

Spring Boot 常见面试题

目录 1.Spring Boot 快速入门什么是 Spring Boot&#xff1f;有什么优点&#xff1f;Spring Boot 与 Spring MVC 有什么区别&#xff1f;Spring 与 Spring Boot 有什么关系&#xff1f;✨什么是 Spring Boot Starters?Spring Boot 支持哪些内嵌 Servlet 容器&#xff1f;如何设…

【LeetCode刷题-队列】--933.最近的请求次数

933.最近的请求次数 class RecentCounter {Queue<Integer> queue new LinkedList<>();public RecentCounter() {}public int ping(int t) {queue.offer(t);while(t - queue.peek() > 3000){queue.poll();}return queue.size();} }/*** Your RecentCounter obje…

游戏在小米设备上因自适应刷新率功能,帧率减半

1&#xff09;游戏在小米设备上因自适应刷新率功能&#xff0c;帧率减半 2&#xff09;Lua在计算时出现非法值&#xff0c;开启Debugger之后不再触发 3&#xff09;如何在Unity中实现液体蔓延的效果 这是第357篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&…

R语言gplots包的颜色索引表--全平台可用

R语言gplots包的颜色索引表–全平台可用

花了三年时间开发的开源项目,终于500 个 Star 了!快收藏

waynboot-mall 商城项目从疫情开始初期着手准备&#xff0c;到现在已经经过了 3 年多的时间&#xff0c;从项目初期到现在&#xff0c;一个人持续迭代&#xff0c;修复漏洞&#xff0c;添加功能&#xff0c;经历了前端开发工具从 vue2、vue-cli 切换到 vue3、vite 的转变&#…

JavaScript 自定义对象

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-定义对象</title> </head><body&g…

chatgpt综述阅读理解

Summary of ChatGPT-Related research and perspective towards the future of large language models 摘要 本文总结了语言模型在遵循指令和人类反馈方面的相关工作&#xff0c;包括训练语言模型来理解指令并按照指令执行任务&#xff0c;以及提高语言模型的性能和理解能力的…

leetCode 137. 只出现一次的数字 II + 位运算 + 模3加法器 + 真值表(数字电路) + 有限状态机

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 常规解法&#xff1a;哈希&#xff08;hash&#xff09; …

在Vue项目中定义全局变量

在Vue项目中我们需要使用许多的变量来维护数据的流向和状态&#xff0c;这些变量可以是本地变量、组件变量、父子组件变量等&#xff0c;但这些变量都是有局限性的。在一些场景中&#xff0c;可能需要在多个组件中共享某个变量&#xff0c;此时全局变量就派上了用场。 定义全局…