多模态论文笔记——Coca
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型Coca,在DALL·E 3中使用其作为captioner基准模型的原因和优势。
文章目录
- ALBEF
- 论文
- 模型结构
- 组成
- 训练目标
- CoCa
- 论文
- 模型结构
- CoCa 与 ALBEF 对比
- 训练过程
- 训练目标
- 历史文章
- 机器学习
- 深度学习
首先我们需要知道Coca是主要用于图像生成文本的。在此之前,我们已经介绍了BLIP和BLIP2,但是BLIP模型生成的文本描述较为简单,模型训练则需要更详细、准确的图像描述或字幕。本文将介绍一个新模型Coca(Contrastive Captioners,谷歌出品),OpenAI的DALL·E 3在处理图像-文本训练数据集就是基于谷歌的CoCa模型,微调一个image captioner,用来合成图像的caption。
DALL·E 3介绍参考DALL·E系列文章:DALL·E 3模型及其论文详解
ALBEF
CoCa可以理解成是ALBEF模型的一个后续工作,它与ALBEF模型类似,所以我们就先简要介绍一下ALBEF模型,再给出CoCa模型的介绍及其在ALBEF基础上做的改进。
ALBEF (Align Before Fuse) 是一个多模态学习模型,专注于图像和文本的联合表示学习。它通过对比学习 (Contrastive Learning) 和多模态特征对齐 (Alignment) 来实现任务优化,同时为下游任务提供强大的基础表示。
论文
Align before Fuse: Vision and Language Representation Learning with Momentum Distillation
模型结构
组成
ALBEF 由三部分组成,如下:
- 一个图像编码器
- 一个文本编码器
- 一个多模态编码器
训练目标
- 图像-文本对比损失(image-text contrastive loss) :对齐图像和文本特征,最小化同一图像-文本对的特征距离,最大化不同图像-文本对的特征距离。用于在特征融合之前对图像和文本的单模态表示进行对齐。
- 图像-文本匹配损失(image-text matching loss) :判断图像和文本是否匹配,进一步提高特征对齐效果。用于学习图像与文本之间的多模态交互。
- 遮蔽语言建模损失(masked-language-modeling loss):在文本中随机掩盖部分单词,通过上下文信息预测掩盖的单词。用于学习图像与文本之间的多模态交互。
为了提升对噪声数据的学习能力,我们在训练过程中生成伪标签(pseudo-targets),这些伪标签由动量模型(momentum model,即基础模型的滑动平均版本)生成,并作为额外的监督信号。
有没有发现ALBEF和BLIP模型的训练目标极其相似?因为他们来自一个团队。
BLIP参考本系列历史文章:多模态论文笔记——CLIP、BLIP
CoCa
CoCa 是 ALBEF 的后续工作,在保持多模态特征对齐的同时,通过引入可学习的池化机制和统一的 Decoder 架构,更适合生成任务(如图像描述生成)。这种设计不仅提升了多模态任务的性能,也在生成任务上展现了显著的优势。
CoCa 是谷歌提出的一种图像-文本对齐模型,旨在同时优化对比学习(contrastive learning)和图像描述(image captioning)的任务。其主要特点是统一了对比学习和生成任务,通过共享的编码器和解码器框架完成多任务学习,生成更为准确且多样的图像描述。
论文
CoCa: Contrastive Captioners are Image-Text Foundation Models
模型结构
下面我们先介绍CoCa的模型结构。它是构建在encoder-decoder的基础上的。它的结构如下:
CoCa 与 ALBEF 对比
-
相似点:
- 整体结构:CoCa 和 ALBEF 都采用 “图像分支 + 文本分支” 的结构,左边是图像编码器 (Image Encoder),右边是文本处理器 (Text Branch)。
- 多模态融合:两者都需要将图像特征和文本特征进行融合,利用对比损失 (ITC, Image-Text Contrastive Loss) 和语言建模损失 (Captioning Loss) 来联合训练。
-
主要区别:
- 文本分支的结构:
在 CoCa 中,文本分支完全使用 Decoder,而 ALBEF 则使用 Encoder 来抽取文本特征。- Decoder 的意义:CoCa 的 Decoder 更倾向于语言生成任务(Language Modeling),不仅能抽取文本特征,还能自然支持语言生成任务(如 Captioning)。
- Encoder 的意义:ALBEF 的 Encoder 主要用于文本特征的理解,适用于对比学习 (Contrastive Learning) 任务。
- 可学习的图像特征池化 (Attentional Pooling):
CoCa 在图像分支的池化操作中引入了可学习机制,能够根据具体任务优化图像特征提取,而 ALBEF 使用的是固定规则的特征池化。 - 多模态文本处理器输入:
- 在 CoCa 中,单模态文本解码器 和 多模态文本解码器 是独立处理的,没有直接的输入输出关系。
- 在 ALBEF 中,单模态文本编码器 的输出被用作 多模态文本编码器 的输入,以实现图像和文本的有效对齐。
- 文本分支的结构:
- CoCa 中的 单模态文本解码器 (Unimodal Text Decoder) 和 多模态文本解码器 (Multimodal Text Decoder)
是独立工作的,并且它们的输入和输出是分开处理的。不会将单模态文本解码器的输出作为多模态文本解码器的输入,多模态文本解码器的输入也是原始文本(或者文本经特定编码后的表示)。
- CoCa 的架构设计使得 单模态文本解码器 和 多模态文本解码器 之间的任务和输入输出保持独立。
- ALBEF中会将单模态文本编码器的输出作为多模态文本编码器的输入。
Attentional Pooling:
- 可学习的图像特征池化方式,能够针对不同任务学习出更有用的视觉特征。
- 在特征融合前,通过 Attention 机制选择性地提取图像 Token,而不是简单地用固定规则池化特征。
训练过程
它由一个 Image Encoder 和两个 Text Decoder 组成,均采用Transformer模型。
- 图像编码器 (Image Encoder)
- 使用一个视觉变换器(例如 ViT)对输入图像进行编码,生成一系列特征表示。
- 这些特征表示通过注意力池化进一步提取,分别生成两个特征:
- 对比特征 (Contrastive Feature): 专门的
cls-token
,用于对比学习,通过与文本的cls-token
特征进行对比。 - 描述特征 (Captioning Feature): 其他的图像特征经过 Attentional Pooling 后,传入多模态 Text Decoder,用于文本生成任务,作为多模态解码器的输入。
- 对比特征 (Contrastive Feature): 专门的
采用attention pooling对image encoder进行图像的全局特征提取。(这里的attention pooling可以理解为一个multi-head attention,只不过key和value是image encoder得到的特征,而query是预先定义的一个可训练的embedding,由于我们只需要提取一个全局特征
cls-token
【与单模态文本解码器的全局特征进行图像-文本的对比学习】,所以只需要定义一个query就好了)
如上图中的代码:con_feature = attentional_pooling(img_feature, con_query
)
- 单模态文本解码器 (Unimodal Text Decoder)
- 不参与对图像特征的cross-attention;
- 使用 Transformer 模型生成文本的上下文表示,
cls-token
特征,得到整个句子的全局特征。 - 特别关注
cls-token
,其特征用于计算与图像对比特征的对比损失 (Contrastive Loss)
。 - Decoder 是因果自回归的(Masked),即只能看到序列前面的部分。
图像编码器和单模态文本解码器的两个全局特征就可以实现图像-文本的对比学习。image encoder和unimodal text decoder的两个[CLS]向量作为图片和文本的表示,进行对比学习。
- 多模态文本解码器 (Multimodal Text Decoder)
- 接收图像的描述特征和文本的输入,利用交叉注意力机制,生成文本表示。
- 输出文本序列,优化目标为描述生成损失 (Captioning Loss),通常是
交叉熵损失
。
这里也通过了attention pooling对image encoder得到的特征进行提取,不过这里query数量定义为256,这样attention pooling可以得到256个特征,它作为multimodal text decoder的cross-attention的输入,用于融合图片和文本信息,实现双模态,最后做文本生成。
如上图中的代码:cap_feature = attentional_pooling(img_feature, cap_query)
)
为什么采用这种分层设计?
- 高效性: 先处理单模态文本输入,避免对所有层都施加跨模态交互,降低计算复杂度。
- 任务分离: 单模态和多模态表示的分离使模型能够同时支持对比学习(Contrastive Learning)和生成式任务(Captioning)。
训练目标
CoCa(Contrastive Captioners)解码器的设计在任务分工和结构上非常特别,采用了 分层解码器结构,以同时支持单模态(Unimodal)和多模态(Multimodal)目标。CoCa 的目标函数是单模态和多模态任务的联合优化:
L C o C a = λ Con ⋅ L Con + λ Cap ⋅ L Cap \mathcal{L}_{CoCa} = \lambda_{\text{Con}} \cdot \mathcal{L}_{\text{Con}} + \lambda_{\text{Cap}} \cdot \mathcal{L}_{\text{Cap}} LCoCa=λCon⋅LCon+λCap⋅LCap
-
ITC loss:Contrastive Loss ( L Con ) (\mathcal{L}_{\text{Con}}) (LCon)
- 通过:图像的对比特征CLS Token和文本的CLS Token计算。通常计算InfoNCE Loss。
- 用于优化图像编码器和单模态文本解码器在多模态嵌入空间中的对齐。
- 单模态表示(Unimodal Text Representations)通过
cls-token
特征与图像特征进行对比。 - λ Con \lambda_{\text{Con}} λCon 是对比损失的权重超参数。
-
LM Loss:Captioning Loss ( L Cap ) (\mathcal{L}_{\text{Cap}}) (LCap)
- 通过:图像的描述特征(通过 Attention Pooling 提取)和文本输入,经过交叉注意力机制后生成文本描述,与目标文本进行对比,通常计算交叉熵损失。
- 用于优化图像编码器和多模态文本解码器对生成任务(文本生成)的质量。
- 多模态表示(Multimodal Image-Text Representations)通过交叉注意力生成文本描述,与目标文本计算交叉熵损失。
- λ Cap \lambda_{\text{Cap}} λCap 是描述生成损失的权重超参数。
InfoNCE Loss参考本系列历史文章中的解释:多模态论文笔记——CLIP、BLIP
历史文章
机器学习
机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维
深度学习
深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN
深度学习笔记——循环神经网络RNN、LSTM、GRU、Bi-RNN
深度学习笔记——Transformer
深度学习笔记——3种常见的Transformer位置编码
深度学习笔记——GPT、BERT、T5
深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——CLIP、BLIP
深度学习笔记——AE、VAE
深度学习笔记——生成对抗网络GAN
深度学习笔记——模型训练工具(DeepSpeed、Accelerate)
深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)
深度学习笔记——模型部署
深度学习笔记——VQ-VAE和VQ-VAE-2
多模态论文笔记——dVAE(DALL·E的核心部件)
多模态论文笔记——LLaVA
相关文章:

多模态论文笔记——Coca
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型Coca,在DALLE 3中使用其作为captioner基准模型的原因和优势。 文章目录 ALBEF论文模型结构组成训练目标 CoCa论文模型结构CoCa…...

@Cacheable 注解爆红(不兼容的类型。实际为 java. lang. String‘,需要 ‘boolean‘)
文章目录 1、org.springframework.cache.annotation.Cacheable2、javax.persistence.Cacheable Cacheable(value "findPAUserById", key "#id")public Optional<PAUser> findById(Integer id) {return paUserRepository.findById(id);}我真的要笑死…...

java相互加密解密
java代码 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64;public class AesUtils {public static String encrypt(String plaintext, String key, String iv) throws Exception {C…...

PostgreSQL中FIRST_VALUE、LAST_VALUE、LAG 和 LEAD是窗口函数,允许返回在数据集的特定窗口(或分区)内访问行的相对位置
在PostgreSQL中,FIRST_VALUE、LAST_VALUE、LAG 和 LEAD 是窗口函数(window functions),它们允许你在数据集的特定窗口(或分区)内访问行的相对位置。以下是对这些函数的详细解释和用法: 1. FIRS…...

树莓派之旅-第一天 系统的烧录和设置
自言自语: 在此记录一下树莓派的玩法。以后有钱了买点来玩啊草 系统的安装烧录 系统下载 树莓派官网:https://www.raspberrypi.com/ 首页点击SoftWare进入OS下载页面 这里是安装工具:安装工具负责将系统镜像安装到sd卡中 点击下载符合自己…...

数据库工程师进阶秘籍:云计算基础知识题目精选与答案(附PDF)
【单选题】1、将基础设施作为服务的云计算服务类型是()。 A. IaaS B. PaaS C. SaaS D. 以上都不是 正确答案:A 答案解析:本题考查云计算的服务类型。基础设施即服务IaaS(Infrastructure as a Service)&…...

【HAProxy】如何在Ubuntu下配置HAProxy服务器
HAProxy 是一款免费、开源且强大的反向代理程序,它为 HTTP 和 TCP 基础的应用提供了高可用性、负载均衡以及代理功能,因此对于管理高流量服务器(或 Web 应用)来说,通过将负载分散到多个节点服务器上,它是一…...

C#编写的盘符图标修改器 - 开源研究系列文章
这天在网上遇到一个Windows的盘符图标修改软件,但是它那个是.net framework 2.0的,所以就将其改成4.8.1的了,用于Windows 11等默认不安装2.0库的操作系统里使用。 1、 项目目录; 2、 源码介绍; 它直接进行注册表的修改…...

(四)配置有线网口、SSH登陆、文件传输以及运行交叉编译程序测试
文章目录 配置有线网口原因自动分配不行第一步 设置前先停止网络接口第二步 手动分配ip第三步 使配置的网口ip永久生效第四步 测试一下网络是否通了 SSH登陆文件传输以及运行交叉编译程序测试第一种借助基于SSH的命令行工具SCP传输文件第二种借助基于MobaXterm 软件直接上传测试…...

离线的方式:往Maven的本地仓库里安装依赖
jar文件及源码的绝对路径,gav坐标,打包方式,Maven本地仓库的路径 mvn install:install-file ^-DfileD:\hello-spring-boot-starter-1.0-SNAPSHOT.jar ^-DsourcesD:\hello-spring-boot-starter-1.0-SNAPSHOT-sources.jar ^-DgroupIdcom.examp…...

《深入浅出HTTPS》读书笔记(22):密钥协商算法
《深入浅出HTTPS》读书笔记(22):密钥协商算法 密钥的管理和分配是个难题,尤其是生成一个动态密钥更难,而密钥协商算法就可以解决密钥分配、存储、传输等问题。 在网络通信中,为了加密…...

kubernetes学习-Service
kubernetes学习-Service 1. Service说明2. 功能3.Service类型3.1 NodePort3.1.1 创建web-service.yaml3.1.2 创建web-pod.yaml3.1.3 部署3.1.4 验证 3.2 ClusterIP3.2.1 创建web-clusterIp-service.yaml3.2.2 创建web-clusterIp-pod.yaml3.2.3 部署3.2.4 验证 3.3 LoadBalancer…...

Springcloud项目-前后端联调(一)
项目采用SpringCloud整体构建,nacos作为注册中心,Mysql和Redis进行数据存储,整体项目类似于平时使用的出行APP,idea2023编写后端,vscode编写前端 后端代码先前已经编写完毕 这部分功能主要是通过前端输入出发地和目的地之后调用…...

洛谷P1525 [NOIP2010 提高组] 关押罪犯(种子并查集基础)
题目链接:P1525 [NOIP2010 提高组] 关押罪犯 - 洛谷 | 计算机科学教育新生态 题目难度:普及+/提高 题目描述: S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1∼N,有m对罪犯,每对之间有仇恨值,问如何分配罪犯使得现 Z 市长要看到其中最大的矛盾值最小。 输入格…...

【算法刷题指南】模拟
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系…...

学习笔记078——Java Properties类使用详解
文章目录 概述常见方法写入读取遍历 概述 Properties 继承于 Hashtable。表示一个持久的属性集,属性列表以key-value的形式存在,key和value都是字符串。 Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getPropertie…...

若依使用 Undertow 替代 Tomcat 容器
文章目录 需求提出应用场景解决思路注意事项完整代码第一步:在 ruoyi-framework/pom.xml 文件中进行依赖配置第二步:修改 application.yml 配置文件第三步:修改文件上传工具类 FileUploadUtils.java 运行结果 需求提出 在开发若依框架的前后…...

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测
多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入…...

Elasticsearch:基础概念
一、什么是Elasticsearch Elasticsearch是基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产规模工作负载的速度和相关性进行了优化。使用 Elasticsearch 可以近乎实时地搜索、索引、存储和分析各种形状和大小的数据。Elasticsearch 是…...

Spring MVC的@ResponseBody与@RequestBody
ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端。 RequestBody注解用于读取http请求的内容(字符串),通过springmv…...

智能商业分析 Quick BI
Quick BI 是阿里云提供的一款智能商业分析(BI)工具,旨在帮助企业快速获取业务洞察、优化决策过程、提升数据分析效率。通过强大的数据可视化和分析功能,Quick BI 能够帮助用户轻松连接多种数据源、创建多维度的报表和仪表盘&#…...

LUA基础语法
目录 变量篇 算数运算符 条件分支语句与循环语句 函数 表 Table 全局变量与本地变量 协程 元表 面向对象(封装,继承,多态) 常用自带库 垃圾回收 变量篇 print("hello") print("lua") --注释 --[[…...

SpringBoot的pom.xml文件中,scope标签有几种配置?
1.compile(默认) 含义:表示该依赖在项目的所有阶段(编译、测试、运行)都需要。 当你依赖一个库,并且这个库是你项目的核心部分,比如 Spring Boot 的spring - boot - starter - web,…...

Leetcode729: 我的日程安排表 I
题目描述: 实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。 当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复…...

青少年编程与数学 02-006 前端开发框架VUE 02课题、创建工程
青少年编程与数学 02-006 前端开发框架VUE 02课题、创建工程 一、开发环境(一)WebStorm安装WebStorm配置WebStorm安装中文语言包安装 Translation插件 (二)Node.jsWindows系统安装Node.jsLinux系统安装Node.jsNode.js与Vue.js的关…...

Redis的生态系统和社区支持
Redis的生态系统和社区支持 1. Redis 生态系统 1.1 Redis核心 Redis 是一个高性能的内存存储系统,支持丰富的数据结构(如字符串、列表、集合、哈希和有序集合)。它的核心提供了: 高性能数据存储:单线程模型支持每秒数百万级别的操作。多种数据结构:适用于多样化场景,如…...

Tomcat解析
架构图 核心功能 Tomcat是Apache开源的轻量级Java ServletServlet容器,其中一个Server(Tomcat实例)可以管理多个Service(服务),一个Service包含多个Connector和一个Engine,负责管理请求到应用的…...

UML之组合与聚合
关联和链接关系在很多情况下是对称的,即被关联的两个类都有以自己为源端对方为目标端的角色存在,而且角色与源端类的属性是等价的,即在关联一端的关联端(角色)等价于另外一端的属性。例如,在下图中…...

数据结构理论篇(期末突击)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 学校课程突击 下面均是为了应付学校考试所用,如果有涉及部分知识点下面未说明,可以去我的数据结构专栏看看或者自行在…...

《一文读懂PyTorch核心模块:开启深度学习之旅》
《一文读懂PyTorch核心模块:开启深度学习之旅》 一、PyTorch 入门:深度学习的得力助手二、核心模块概览:构建深度学习大厦的基石三、torch:基础功能担当(一)张量操作:多维数组的神奇变换(二)自动微分:梯度求解的幕后英雄(三)设备管理:CPU 与 GPU 的高效调度四、to…...