多模态论文笔记——LLaVA

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型:LLaVA。处理包含图像和文本的多模态数据,并生成合理准确的回答。

在这里插入图片描述

文章目录

    • 论文
    • 模型架构
      • 视觉编码器
      • 语言模型
      • 多模态融合
        • 总结
    • 训练细节
      • 阶段1:特征对齐预训练
      • 阶段2:端到端微调
      • 总结
    • 实验
    • LLava 1.5模型
      • 论文
      • LLaVA 1.5模型的改进
    • LLava 1.6(LLaVA-NeXT)模型
      • 论文
      • LLaVA 1.5模型的改进
    • Reference
  • 历史文章
    • 机器学习
    • 深度学习

论文

Visual Instruction Tuning

LLaVA(Large Language and Vision Assistant)是一种多模态模型,将视觉和语言能力结合在一起,用于图像-文本理解和生成任务。以下是对LLaVA的详细介绍:

模型架构

在这里插入图片描述
LLaVA(Large Language and Vision Assistant)是一个简单高效的多模态模型,它通过映射矩阵连接一个预训练的 视觉编码器(CLIP ViT-L/14) 和一个 大语言模型(Vicuna) 实现跨模态理解,再使用Vicuna的解码能力生成自然语言输出。

  • 输入图像 X v X_v Xv,经过视觉编码器得到图像特征 Z v Z_v Zv,之后 Z v Z_v Zv通过多模态融合的线性投影处理,得到H_v(与文本特征对齐,达到同维度)。
  • 输入文本 X q X_q Xq,经过文本编码器得到图像特征 H q H_q Hq
  • 图像特征 Z v Z_v Zv和图像特征 H q H_q Hq,经过文本解码器,得到 X a X_a Xa

视觉编码器

LLaVA 的视觉编码器采用了 CLIP 的 Vision Transformer (ViT-L/14),这是一个强大的预训练视觉模型。
详细内容参考:多模态论文笔记——CLIP、BLIP

架构与功能

  • CLIP ViT-L/14:由 OpenAI 提出的多模态模型,使用图像编码器和文本编码器对图像-文本对进行联合训练。
  • 输入图像经过编码器后,被转化为一个二维网格的嵌入表示(feature map),其形状为:
    [ 1 , grid H × grid W , hidden_dim ] [1, \text{grid}_H \times \text{grid}_W, \text{hidden\_dim}] [1,gridH×gridW,hidden_dim]
    • grid H \text{grid}_H gridH grid W \text{grid}_W gridW:表示图像在空间维度上的分辨率。
    • hidden_dim \text{hidden\_dim} hidden_dim:每个 token 的特征向量维度。
  • 这种结构化表示捕获了图像的全局和局部信息。

语言模型

LLaVA 的语言部分采用了 Vicuna,这是基于 Meta 的 LLaMA 微调优化而成的开源语言模型。Vicuna 在多模态任务中发挥着重要作用,它通过结合视觉特征和文本特征来执行生成任务。

  1. 从文本中提取特征
    • Vicuna 作为一个语言模型,首先负责从输入的文本中提取语言特征。Vicuna 能够有效地理解文本内容,将输入的自然语言句子转化为高维的特征表示(例如,token embedding)。这些特征是进行多模态生成和推理的基础。
  2. 多模态融合后,进行文本的生成
    • 在 LLaVA 中,图像特征通过 CLIP 提取,并经过投影层转换为与文本特征相同的维度。这时,文本和图像的特征被拼接成一个统一的 token 序列。Vicuna 接收这些融合后的特征(图像 token 和文本 token)作为输入,进行生成任务。
    • 通过其强大的生成能力,Vicuna 能够基于输入的视觉信息和文本提示,生成符合语义的自然语言文本。生成的文本可以是图像描述、回答视觉问答、推理结论或其他复杂的生成任务。

多模态融合

LLaVA 的多模态融合部分通过简单而高效的机制,将视觉和语言特征结合在一起。

  1. 对齐机制

    • 图像特征的维度 hidden_dim \text{hidden\_dim} hidden_dim 和语言模型的嵌入维度 emb_dim \text{emb\_dim} emb_dim 可能不一致。
    • 为此,使用了一个线性投影 W W W 对图像特征进行变换:
      Projected Features = Vision Features ⋅ W \text{Projected Features} = \text{Vision Features} \cdot W Projected Features=Vision FeaturesW
      • 线性投影的输出形状为 [ 1 , grid H × grid W , emb_dim ] [1, \text{grid}_H \times \text{grid}_W, \text{emb\_dim}] [1,gridH×gridW,emb_dim]
  2. 特征拼接

    • 投影后的图像 token 与文本 token 按序列形式拼接在一起,形成一个长 token 序列:
      Input Sequence = [ Image Tokens , Text Tokens ] \text{Input Sequence} = [\text{Image Tokens}, \text{Text Tokens}] Input Sequence=[Image Tokens,Text Tokens]
    • 这种设计允许语言模型通过注意力机制统一处理视觉和语言信息。

在多模态融合阶段,LLaVA团队使用了轻量级的投影层将图像特征映射到语言模型的嵌入空间,论文中提到了,这是为了便于快速进行实验和优化。其实可以使用更复杂、更有效的图像-语言融合机制,如: Flamingo 中的 gated cross-attention 和 BLIP-2 中的 Q-former 等方法。
BLIP2 的详细内容参考:
cross-attention是早期扩散模型的融合技术,感兴趣的可以参考:
在DiT论文中使用了三种多模态融合技术,cross-attention是其中一种,感兴趣可以参考:


总结
  1. 视觉编码器
    • CLIP ViT-L/14 作为视觉编码器,从图像中提取结构化的特征。通过 CLIP,图像被转化为固定维度的特征嵌入,这些特征为后续的多模态融合提供视觉信息。
  2. 语言模型
    • 采用基于 LLaMA 微调优化的 Vicuna,这使得模型在多模态任务中能够有效地处理文本输入。Vicuna 主要负责从文本中提取特征,并结合视觉信息进行多模态任务的生成。
  3. 多模态融合
    • 视觉特征和文本特征通过 线性投影token 拼接 的方式进行融合。视觉特征经过投影后与文本特征对齐,形成一个统一的 token 序列,然后输入到语言模型中进行生成任务。

训练细节

LLaVA 模型在训练过程中分为两个阶段:特征对齐预训练端到端微调

阶段1:特征对齐预训练

  • 原因:由于 CLIP 的视觉编码器和语言模型的词嵌入(word embedding)不在同一个语义空间,因此需要这个阶段来确保视觉和语言特征可以有效对齐。

  • 目标:将图像特征与文本词嵌入(word embedding)对齐,对图像特征进行变换,将其转换到文本的语义表达空间,使得图像和文本能够在统一的语义空间内进行操作。

  • 步骤

    • 数据集:在 CC3M 数据集(一个包含大量图像和文本对的数据集)上进行预训练。
    • 冻结模型权重:在这个阶段,视觉编码器(Vision Encoder)LLM(大型语言模型,如 Vicuna)保持权重不变。
    • 训练插值层:唯一需要训练的是 投影层(Projection W) 的权重,该层用于将从 CLIP 提取的视觉特征(图像 token embedding)映射到与文本特征(文本 word embedding)相同的语义空间。
    • 对齐目标:通过训练,最大化图像特征与文本词嵌入之间的对齐概率,即让图像和文本特征在同一语义空间中更加接近。

阶段2:端到端微调

  • 目标:通过端到端微调,优化投影层和语言模型,以提升模型在多模态任务中的表现,特别是生成和推理任务。

  • 步骤

    • 数据集:使用 生成的指令数据,包括 对话详细描述复杂推理 数据,进行训练。
    • 冻结视觉编码器:在这个阶段,依然冻结 视觉编码器(Vision Encoder) 的权重不变,只更新语言模型和投影层的权重
    • 更新模型权重:训练过程中会同时更新 投影层(Projection W)LLM语言模型 的权重,以适应下游任务。
    • 任务类型
      • Multimodal Chatbot:训练模型理解和生成基于图像和文本的对话。LLaVA在多模态聊天机器人实验中表现出色,能够准确回答用户的问题,并提供详细的描述和复杂的推理。与BLIP-2和OpenFlamingo相比,LLaVA在对话、详细描述和复杂推理任务上的表现均优于对手。
      • Science QA:训练模型处理图像和文本的科学问答任务。在科学问答数据集上,LLaVA在无图像上下文的问题上达到了90.92%的准确率,接近当前最优方法MM-CoTBase的91.68%。通过与GPT-4的集成,LLaVA的最终准确率达到了92.53%,刷新了现有方法的记录。

总结

  • 阶段1:特征对齐预训练,通过训练投影层来对齐图像和文本特征,使它们在同一语义空间中。
  • 阶段2:端到端微调,通过在具体任务(如对话生成和科学问答)上进行微调,进一步提升模型的多模态生成和推理能力。

这两个阶段结合起来,帮助 LLaVA 模型从特征对齐到多模态任务的优化,实现高效的图像-文本融合和生成能力。

LLaVA的训练过程中对多轮对话实验了一些策略:

  1. 多轮对话数据生成:为每张图片生成多轮问题和答案的对话数据,形成图像和文本的交互序列。
  2. 指令构建
    • 第一轮:随机选择图片和问题的顺序。
    • 后续轮次:指令设置为当前轮次的问题。
  3. 多模态指令-跟随序列格式化:通过上述构建方式,确保图像和文本数据以统一的格式输入模型,保证多模态数据的有效融合。
  4. 语言模型指令调优:对语言模型进行自回归训练,使其在给定图像和指令的条件下,生成符合上下文的回答。

这种策略通过结合图像与文本的多模态信息,优化语言模型的生成能力,适应复杂的多模态任务。

实验

  1. Multimodal Chatbot:LLaVA在多模态聊天机器人实验中表现出色,能够准确回答用户的问题,并提供详细的描述和复杂的推理。与BLIP-2和OpenFlamingo相比,LLaVA在对话、详细描述和复杂推理任务上的表现均优于对手。
  2. Science QA:在科学问答数据集上,LLaVA在无图像上下文的问题上达到了90.92%的准确率,接近当前最优方法MM-CoTBase的91.68%。通过与GPT-4的集成,LLaVA的最终准确率达到了92.53%,刷新了现有方法的记录。

LLava 1.5模型

论文

Improved Baselines with Visual Instruction Tuning

LLaVA 1.5模型的改进

在这里插入图片描述

LLaVA 1.5 在多个方面进行了增强,包括语言模型的更新、插值层的升级、视觉编码器分辨率的提升,以及数据质量的改进,这些都共同推动了模型的性能提升,使得LLaVA 1.5能够在多模态任务上取得更好的效果。

  1. LLM模型
    • Vicuna v1.5 13B:LLaVA 1.5 使用了更大、更强的语言模型——Vicuna v1.5(13B参数),相较于LLaVA原版使用的语言模型,Vicuna v1.5 具有更强的语言理解和生成能力,特别是在多模态任务中表现出色。
  2. 融合(插值层)
    • MLP层:LLaVA 1.5 将原先的单一线性投影层(Projection Layer)替换为更复杂的多层感知机(MLP)。MLP具有多个线性层堆叠,并能捕捉更复杂的非线性关系,这有助于更好地对齐视觉和语言特征,从而提升多模态生成效果。
  3. Vision Encoder(视觉编码器)
    • CLIP ViT-L/336px:在LLaVA 1.5中,输入图像的分辨率被提高到336像素(相比LLaVA的224像素)。这种分辨率提升使得模型能够提取更多细节,从而更好地理解图像中的内容,提升对图像的细节捕捉能力。
  4. 更高质量的数据
    • 数据质量的提升通常意味着使用了更丰富、更具多样性且标注更加精准的训练数据集。这有助于提高模型的表现,尤其是在更复杂的多模态任务上。

LLava 1.6(LLaVA-NeXT)模型

论文

LLaVA-NeXT: Improved reasoning, OCR, and world knowledge

LLaVA 1.5模型的改进

在这里插入图片描述
LLaVA 1.6在多个方面进行了重要升级,包括视觉编码器分辨率的提升、语言模型参数量的大幅增加、OCR能力的增强以及视觉对话性能的改进。这些改进使得LLaVA 1.6在图像理解、语言生成、推理和OCR任务上都达到了新的高度,表现更加出色。

  1. Vision Encoder分辨率
  • LLaVA引入了“AnyRes”技术。这项技术使模型具有适应性,能够根据输入图像的不同分辨率进行调整,从而优化图像处理过程。
  • 支持更大的输入分辨率,新增的分辨率包括672x672、336x1344、1344x336等。这些更高的分辨率允许模型捕捉更多的图像细节,从而增强其对图像的理解能力。
  • 还支持通过图片裁切、编码和合并的方式处理不同分辨率的输入,进一步增强了视觉编码器的灵活性和表现。
  1. LLM模型参数量大升级
    • LLaVA 1.6将语言模型(LLM)的参数量从1.5版本的13B提升到34B。这一升级使得模型具有更强的语言理解和生成能力,尤其在处理复杂的多模态任务时,表现得更加出色。
  2. OCR能力提升
    • OCR(光学字符识别)能力的提升使得LLaVA 1.6在图像中的文字识别和推理能力上有了显著进展。通过改进指令数据集的构建,LLaVA 1.6能够更好地进行OCR任务,提升了视觉推理的准确性。
  3. 更好的视觉对话
    • 更好的视觉对话,更多场景,覆盖不同应用,以及更好的世界知识和逻辑推理。它能够根据图像内容提供更丰富、更精确的回答,进一步增强了多模态交互的能力。
  4. 高效部署和推理
    • 高效的推理和部署能力是LLaVA 1.6的亮点之一,尤其是在资源受限的环境下,其优化的推理框架(如SGLang)能够在保证模型表现的同时,提升推理速度和响应能力。这对于实际应用场景非常重要,尤其是在实时处理需求高的任务中。

Reference

【LLM多模态】LLava模型架构和训练过程 | CLIP模型
一文读懂多模态大模型:LLaVA系列 | 从图像到视频的内容理解


历史文章

机器学习

机器学习笔记——损失函数、代价函数和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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Sentinel】初识Sentinel

目录 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 1.1.2.超时处理 1.1.3.仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 1.1.雪崩问题及解决方案 1.1.1.…

[A-24][V-09]ARMv8/v9-SMMU工作场景与SMMU的虚拟化架构

ver0.1 [看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章] 前言 我们在介绍ARM的内存体系的时候,行文中经常讲MMU比作PE-Cores的带刀护卫。按照这个逻辑,那么SMMU也可以称之为总线上各个Master(设备)的带刀护卫,利刃出鞘之后,任何驱动送过来的地址都…

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…

硬件设计-时钟振荡器

目录 摘要 壳式晶振 正常工作条件 摘要 本章主要介绍了晶振的分类、各项参数的意义、特点,同时也介绍了时钟抖动的成因、测量 方法、消除措施和典型滤波电路,使得我们可以正确地选择和使用晶振。 壳式晶振 如图 所示,壳式晶振的名字来源于…

Redis基础知识分享(含5种数据类型介绍+增删改查操作)

一、redis基本介绍 1.redis的启动 服务端启动 pythonubuntu:~$ redis-server客户端启动 pythonubuntu:~$ redis-cli <127.0.0.1:6379> exit pythonubuntu:~$ redis-cli --raw //(支持中文的启动方式) <127.0.0.1:6379> exit2.redis基本操作 ping发送给服务器…

sql字段值转字段

表alertlabel中记录变字段 如何用alertlabel表得到下面数据 实现的sql语句 select a.AlertID, (select Value from alertlabel where AlertIDa.AlertID and Labelhost) as host, (select Value from alertlabel where AlertIDa.AlertID and Labeljob) as job from (select …

llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~

实际问题场景&#xff1a; 使用llamafactory进行微调qwen2.5 7B和14B的大模型时&#xff0c;会出现out of memory的报错。尝试使用降低batch_size&#xff08;原本是2&#xff0c;现在降到1&#xff09;的方式&#xff0c;可以让qwen2.5:7B跑起来&#xff0c;但时不时会不稳定…

【hackmyvm】hacked靶机wp

tags: HMVrootkitDiamorphine Type: wp 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. 获取参数 3. 提权 靶机链接 https://hackmyvm.eu/machines/machine.php?vmHacked 作者 sml 难度 ⭐️⭐️⭐️⭐️️ 2. 信息收集 2.1. 端口扫描…

.NET平台用C#通过字节流动态操作Excel文件

在.NET开发中&#xff0c;通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据。这种方法允许开发者直接在内存中创建、修改和保存Excel文档&#xff0c;无需依赖直接的文件储存、读取操作&#xff0c;从而提高了程序的性能和安全性。使用流技术处理Excel不仅简化了…

应用层1——C/S、P2P、DNS域名系统

目录 一、网络应用模型 1、C/S 2、p2p模型 二、域名解析系统DNS 1、为什么有DNS系统&#xff1f; 2、域名的特点 3、DNS域名系统原理 4、递归查询、迭代查询 5、常用的根域名与顶级域名 一、网络应用模型 1、C/S 客户/服务器模型 客户请求服务&#xff0c;服务器提供…

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候&#xff0c;发现http接口如果返回的状态码是424时&#xff0c;我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现&#xff1a; 我的拦截器代码如下&#xff1a; 解决办法&#xff1a; 先说解决办法&#xff…

在Windows上读写Linux磁盘镜像的一种方法

背景 嵌入式开发中&#xff0c;经常会把系统的Linux磁盘镜像保存到Windows上&#xff0c;以便上传到网盘备份或发送给工厂&#xff0c;但是如果想读取/修改镜像中的某个文件&#xff0c;一般有2种方案&#xff1a; 直接访问 就是用虚拟磁盘软件将镜像文件挂载成磁盘&#xf…

ffmpeg之显示一个yuv照片

显示YUV图片的步骤 1.初始化SDL库 目的&#xff1a;确保SDL库正确初始化&#xff0c;以便可以使用其窗口、渲染和事件处理功能。操作&#xff1a;调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 2.创建窗口用于显示YUV图像&#xff1a; 目的&#xff1a;创建一个…

Windows下播放文件作为麦克风声源的一种方式

近期测试一种外语的ASR识别成功率&#xff0c;样本素材是懂这门语言的同事录制的mp3文件。测试client端原本是从麦克风拾音生成媒体流的。 这样&#xff0c;就需要想办法把mp3文件转换为测试client的输入声音。物理方式上&#xff0c;可以用一根音频线&#xff0c;把电…

如何在网页端使用 IDE 高效地阅读 GitHub 源码?

如何在网页端使用 IDE 高效地阅读 GitHub 源码&#xff1f; 前言什么是 GitHub1s&#xff1f;使用 GitHub1s 阅读 browser-use 项目源码步骤 1: 打开 GitHub 项目页面步骤 2: 修改 URL 使用 GitHub1s步骤 3: 浏览文件结构步骤 4: 使用代码高亮和智能补全功能步骤 5: 快速跳转和…

Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)

背景 随笔。Microsoft word 2013基础使用&#xff0c;仅做参考和积累。 问题 Microsoft word 2013&#xff0c;对段落标题文字应用【标题样式】不生效&#xff08;主要表现为在导航窗格不显示&#xff09;。 图1 图2 观察图1和图2&#xff0c;发现图1的文字在应用【标题一】样…

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

OpenCV和PyQt的应用

1.创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮&#xff08;QPushButton&#xff09;&#xff1a; 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行翻…

kibana启动报错:Invalid character in header content [“kbn-name“]

启动时候kibana报错&#xff1a; 打开 kibana配置文件&#xff0c;config/kibana.yml&#xff0c;配置上server.name即可&#xff0c;如下&#xff1a;

Pandas08

Pandas01 Pandas02 Pandas03 Pandas04 Pandas05 Pandas06 Pandas07 文章目录 内容回顾同期群分析1.1 同期群分析概念1.2 案例代码 数据分析报告数据分析工作内容数据分析简历说明用户生命周期标签1 什么是生命周期标签2 如何计算生命周期标签 内容回顾 TGI 偏好分析 TGI 目标…