多模态论文笔记——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 由三部分组成,如下:

  1. 一个图像编码器
  2. 一个文本编码器
  3. 一个多模态编码器
训练目标
  1. 图像-文本对比损失(image-text contrastive loss) :对齐图像和文本特征,最小化同一图像-文本对的特征距离,最大化不同图像-文本对的特征距离。用于在特征融合之前对图像和文本的单模态表示进行对齐。
  2. 图像-文本匹配损失(image-text matching loss) :判断图像和文本是否匹配,进一步提高特征对齐效果。用于学习图像与文本之间的多模态交互。
  3. 遮蔽语言建模损失(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 对比
  1. 相似点

    • 整体结构:CoCa 和 ALBEF 都采用 “图像分支 + 文本分支” 的结构,左边是图像编码器 (Image Encoder),右边是文本处理器 (Text Branch)。
    • 多模态融合:两者都需要将图像特征和文本特征进行融合,利用对比损失 (ITC, Image-Text Contrastive Loss) 和语言建模损失 (Captioning Loss) 来联合训练。
  2. 主要区别

    • 文本分支的结构
      在 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模型。

  1. 图像编码器 (Image Encoder)
    • 使用一个视觉变换器(例如 ViT)对输入图像进行编码,生成一系列特征表示。
    • 这些特征表示通过注意力池化进一步提取,分别生成两个特征:
      • 对比特征 (Contrastive Feature): 专门的 cls-token ,用于对比学习,通过与文本的 cls-token 特征进行对比。
      • 描述特征 (Captioning Feature): 其他的图像特征经过 Attentional Pooling 后,传入多模态 Text Decoder,用于文本生成任务,作为多模态解码器的输入。

采用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)

  1. 单模态文本解码器 (Unimodal Text Decoder)
    • 不参与对图像特征的cross-attention;
    • 使用 Transformer 模型生成文本的上下文表示cls-token 特征,得到整个句子的全局特征。
    • 特别关注 cls-token,其特征用于计算与图像对比特征的对比损失 (Contrastive Loss)
    • Decoder 是因果自回归的(Masked),即只能看到序列前面的部分。

图像编码器单模态文本解码器的两个全局特征就可以实现图像-文本的对比学习。image encoder和unimodal text decoder的两个[CLS]向量作为图片和文本的表示,进行对比学习。

  1. 多模态文本解码器 (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=λConLCon+λCapLCap

  1. 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 是对比损失的权重超参数。
  2. 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

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

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

相关文章

大型模型推理加速入门

一 推理加速基础 1. 了解基本概念与术语 首先需要了解关于大模型的一些基本的历史发展,概念和术语,不需要全部看懂,只需要掌握大概情况,可以通过下面这篇文章进行: 大模型入门基本概念,术语 2. 了解Tra…

python实现自动登录12306抢票 -- selenium

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码,但是都不是最新的,我也是从网上找别人的帖子,看B站视频&…

edeg插件/扩展推荐:助力生活工作

WeTab 此插件在我看来有2个作用 1.改变edeg的主页布局和样式,使其更加精简,无广告 2.提供付费webtab Ai(底层是chatGpt) 沉浸式翻译 此插件可翻译网页的内容 假设我们浏览github 翻译前 翻译后 Better Ruler 可以对网页的距离进行测量 适合写前端的小伙伴 用法示例:

doris:基于 Arrow Flight SQL 的高速数据传输链路

Doris 基于 Arrow Flight SQL 协议实现了高速数据链路,支持多种语言使用 SQL 从 Doris 高速读取大批量数据。 用途​ 从 Doris 加载大批量数据到其他组件,如 Python/Java/Spark/Flink,可以使用基于 Arrow Flight SQL 的 ADBC/JDBC 替代过去…

数据挖掘——关联规则挖掘

数据挖掘——关联数据挖掘 关联数据挖掘关联规则关联规则挖掘问题:具体挖掘过程Apriori 产生关联规则 关联数据挖掘 关联分析用于发现隐藏在大型数据集中的令人感兴趣的联系,所发现的模式通常用关联规则或频繁项集的形式表示。 关联规则反映一个事物与…

DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程

目录 暴力破解low方法1方法2 mediumhighimpossible 暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码、密钥或其他安全凭证的攻击方法。它是一种简单但通常无效率的破解技术,适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时。暴力破解的基…

[react] 纯组件优化子

有组件如下,上面变化秒数, 下面是大量计算的子组件,上面每一秒钟变化一次,这时候子组件会不断重新渲染, 浪费资源 父组件如下 import React, { memo, useEffect, useMemo, useState } from react; import type { ReactNode, FC } from react; import HugeCount from ./Te; int…

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…

使用 Spring Boot 和 GraalVM 的原生镜像

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:历代文学,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计&#xf…

计算机网络-L2TP VPN基础实验配置

一、概述 上次大概了解了L2TP的基本原理和使用场景,今天来模拟一个小实验,使用Ensp的网卡桥接到本地电脑试下L2TP拨号,今天主要使用标准的L2TP,其实在这个基础上可以加上IPSec进行加密,提高安全性。 拓扑说明&#xf…

Linux | 零基础Ubuntu解压RaR等压缩包文件

目录 介绍 案例分析 安装工具 解压实践 介绍 RAR是一种专利文件格式,用于数据压缩与归档打包,开发者为尤金罗谢尔(俄语:Евгений Лазаревич Рошал,拉丁转写:Yevgeny Lazarevich R…

Postman接口测试05|实战项目笔记

目录 一、项目接口概况 二、单接口测试-登录接口:POST 1、正例 2、反例 ①姓名未注册 ②密码错误 ③姓名为空 ④多参 ⑤少参 ⑥无参 三、批量运行测试用例 四、生成测试报告 1、Postman界面生成 2、Newman命令行生成 五、token鉴权(“…

网络分析工具-tcpdump

文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言 当遇到网络疑难问题的时候,抓包是最基本的技能,通过抓包才能看到网络底层的问题 一、tcpdump基础 tcpdump是一个常用的网络分析工…

可编辑31页PPT | 大数据湖仓一体解决方案

荐言分享:在当今数字化时代,大数据已成为企业决策和业务优化的关键驱动力。然而,传统的数据处理架构,如数据仓库和数据湖,各自存在局限性,难以满足企业对数据高效存储、灵活处理及实时分析的综合需求。因此…

STM32中断详解

STM32中断详解 NVIC 中断系统中断向量表相关寄存器中断优先级中断配置 外部中断实验EXTI框图外部中断/事件线映射中断步骤初始化代码实现 定时器中断通用定时器相关功能标号1:时钟源标号 2:控制器标号 3:时基单元 代码实现 NVIC 中断系统 STM…

【LeetCode】200、岛屿数量

【LeetCode】200、岛屿数量 文章目录 一、并查集1.1 并查集1.2 多语言解法 二、洪水填充 DFS2.1 洪水填充 DFS 一、并查集 1.1 并查集 // go var sets int var father [90000]intfunc numIslands(grid [][]byte) int {n, m : len(grid), len(grid[0])build(grid, n, m)for i …

SOME/IP 协议详解——序列化

文章目录 0. 概述1.基本数据序列化2.字符串序列化2.1 字符串通用规则2.2 固定长度字符串规则2.3 动态长度字符串规则 3.结构体序列化4. 带有标识符和可选成员的结构化数据类型5. 数组5.1 固定长度数组5.2 动态长度数组5.3 Enumeration(枚举)5.4 Bitfield…

【AndroidAPP】权限被拒绝:[android.permission.READ_EXTERNAL_STORAGE],USB设备访问权限系统报错

一、问题原因 1.安卓安全性变更 Android 12 的安全性变更,Google 引入了更严格的 PendingIntent 安全管理,强制要求开发者明确指定 PendingIntent 的可变性(Mutable)或不可变性(Immutable)。 但是&#xf…

C之(14)gcov覆盖率

C之(14)gcov覆盖率 Author: Once Day Date: 2024年12月30日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: C语言_Once-Day的博客-CSDN博客 前些天…

简易屏幕共享工具-基于WebSocket

前面写了两个简单的屏幕共享工具,不过那只是为了验证通过截屏的方式是否可行,因为通常手动截屏的频率很低,而对于视频来说它的帧率要求就很高了,至少要一秒30帧率左右。所以,经过实际的截屏工具验证,我了解…