多模态论文笔记——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…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...