当前位置: 首页 > news >正文

【大模型系列】mPLUG-Owl3(2024.08)

image.png

  • Paper: https://arxiv.org/pdf/2408.04840
  • Github: https://github.com/X-PLUG/mPLUG-Owl
  • HuggingFace:https://huggingface.co/mPLUG/mPLUG-Owl3-7B-240728
  • Author: Jiabo Ye et al. 阿里巴巴

文章目录

  • 0 总结(省流版)
  • 1 模型结构
    • 1.1 Cross-attention Based Achitecture
    • 1.2 HATB(Hyper Attention Transformer Block)
  • 2 训练细节
    • 2.1 数据处理
  • 3 指标
    • 3.1 图文理解指标
    • 3.2 视频理解指标
  • 4 Distractor Resistance Benchmark
  • 5 总结

0 总结(省流版)

  • 增强了处理长图片序列的能力
  • 提出了一种hyper attention blocks,有效地将视觉和余元集中到一个共同的由语言引导的语义空间
  • 提出了一个长视觉序列评估基准:Distractor Resistance

核心创新点:visual feature不直接作为LLM的输入,而是在LLM中间几层参与计算,再与文本特征融合到一起,因此不会因为输入的图片多而导致超出LLM的最大输入限制。

1 模型结构

image.png

  • Visual encoder: Siglip-400m
  • LLM: Qwen2

1.1 Cross-attention Based Achitecture

当前流行的MLLM模型(如LLaVA-Interleave,InternVL)通常将visual features直接插入embedding序列,与文本一起作为LLM输入,这种方式有2个问题:

  • 当处理多图、视频等长视觉序列时,很容超过LLM的最大输入序列长度
  • 视觉特征在经过LLM时,会损失视觉细节

mPLUG-Owl3的解决方案: 使用cross-attention将visual information送入LLM中。具体做法如下:

  • 给定一个交错的多模态序列 S = [ T _ 1 , I _ 1 , T _ 2 , I _ 2 , . . . , T _ n , I _ n ] S = [T\_1, I\_1, T\_2, I\_2, ...,T\_n, I\_n] S=[T_1,I_1,T_2,I_2,...,T_n,I_n],其中T表示文本,I表示图像
  • 先提取图像的视觉特征,并通过projector层与LLM的输入对齐,得到图像特征 H _ i m g H\_{img} H_img
  • 文本序列经过word embedding得到text feature H t e x t H_{text} Htext
  • 使用cross-attention融合 H i m g H_{img} Himg和LLM中不同层的文本特征 H t e x t i H_{text}^i Htexti(这就是文章中提出的:Hyper Attention Transformer Block,HATB,减少额外训的参数来,并提高训练效率;Qwen2中选择[0, 9, 17, 25]层插入HATB)

1.2 HATB(Hyper Attention Transformer Block)

image.png
传统的Flamingo Transformer Block存在的3个问题:

  • 引入了大量额外的参数
  • LLM学到的知识不能增强对于视觉输入的理解
  • 交叉注意力没有完全考虑到图像在交错序列中的原始位置,限制了其在多图场景上的性能

HATB的结构:

  • Shared Input Layernorm:共享输入的Layer Norm,虽然视觉和文本的特征来自不同的分布,但是实验证明直接使用集成在transormer block中的LN可以更好的收敛。这归功于LN输出的均值和方差与LLM输出的分布兼容(有点牵强)
  • Modality-Specific Key-Value Projection:图像特征的query与self-atten共享,k-v由独立的隐射层产生
  • Visual Position Modeling in Attention:开发了MI-Rope(Multimodal-Interleaved Rotary Position Embedding),对于图片n的视觉特征 I n I_n In,预先记录其在交错序列中的位置,然后计算其旋转编码Rope,这不仅能反映图片在序列中的位置关系,也能反映其在文本上下文中的位置。同时在cross-atten中使用causal attention mask
  • Adaptive Gating:一个融合机制,融合cross-attn输出的图像特征和self-attn输出的文本特征,其具体做法是将图像特征送入一个全连接层,并对输出结果取sigmoid得到权重,再用这个权重来加权图像和文本特征:
    g = S i g m o i d ( W g a t e T H i m g ) H f u s e d i = H i m g ∗ g + H t e x t i ∗ ( 1 − g ) g = Sigmoid(W_{gate}^T {H}^{img}) \\ H_{fused}^i = {H}_{img} * g + H_{text}^i * (1 - g) g=Sigmoid(WgateTHimg)Hfusedi=Himgg+Htexti(1g)

核心点:visual feature不直接作为LLM的输入,而是在LLM中间几层参与计算,再与文本特征融合到一起,因此不会因为输入的图片多而导致超出LLM的最大输入限制。

2 训练细节

image.png

image.png

  • Stage1: 多模态对齐训练,image-text pairs,冻结Visual encoder和LLM
  • Stage2: 多图理解训练,image/video caption,冻结Visual encoder
  • Stage3: 微调,混合单图、多图、视频数据,冻结Visual encoder

2.1 数据处理

  • 高分辨率图像:
    • 自适应裁剪,裁剪网格为 (2,2), (1,3), (1,4), (3,1), (4,1), (2,3), 和 (3,2)
    • 保留全图
    • 文本丰富的图片:100%裁剪
    • 单图无文本:20%裁剪
    • 多图和视频:不裁剪
  • 视频处理:默认采样8帧,占位符为<|image|>,采样多少帧就多少个,这样可以与单图、多图的训练统

3 指标

3.1 图文理解指标

MMB-EN,MMB-CN,AI2D,MM-Vet指标均低于同量级的Qwen2vl-7B
Qwen2vl指标

3.2 视频理解指标

VideoQA测试时,mPLUG-Owl3抽帧128(V100-32G最大内存)
image.png

MVBench,VideoMME均低于同量级的Qwen2vl-7B。
在这里插入图片描述

4 Distractor Resistance Benchmark

用于评估多模态模型在长视觉context中的干扰抵抗能力,数据采样自MMBench。每个测试样本构成如下:

  • 随机从MMBench-dev中采样N张图片作为干扰项
  • 构建输入,其格式为Image 1: <|image|> Image 2: <|image|> … Image N: <|image|>. In Image X, {question},其中Image X表示与问题相关图片的索引,N取1, 5, 10, 20, 50, 100, 200, 400。
  • 使用CircularEval来计算准确率分数

对于每个问题构造不同的测试样本:不同顺序的选项和多样化的干扰图片。干扰图片越多,其挑战越大。
image.png
实验结果证明mPLUG-Owl3具有比较强的抗干扰性。

5 总结

  • mPLUG-Owl指标层面一般,与Qwen2VL-7B还有一定的差距
  • 不过HATB的思路比较有趣,限制图片(视频帧)处理数量的瓶颈由之前的LLM的最大输入长度变成了GPU显存
http://www.lryc.cn/news/471097.html

相关文章:

  • 从0到1学习node.js(express模块)
  • MambaVision
  • MySQLDBA修炼之道-开发篇(二)
  • 前端必备的环境搭建
  • SpringCloud笔记
  • 优秀的程序员思考数据结构
  • 「C/C++」C/C++标准库之#include<cstdlib>通用工具库
  • Oracle视频基础1.1.3练习
  • python项目实战——多协程下载美女图片
  • 基于.NET 8.0,C#中Microsoft.Office.Interop.Excel来操作office365的excel
  • 使用无线方式连接Android设备进行调试的两种方法
  • Valgrind的使用
  • 微信小程序瀑布流实现,瀑布流长度不均等解决方法
  • Notepad++通过自定义语言实现日志按照不同级别高亮
  • 2024年四川省大学生程序设计竞赛 补题记录
  • 17_事件的处理
  • 1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)
  • 数据库设计与范式及其应用
  • 笔记-配置PyTorch(CUDA 12.2)
  • [C++]——红黑树(附源码)
  • 网络文件系统搭建
  • 基于vue、VantUI、django的程序设计
  • 京准电钟解读:NTP网络对时服务器助力厂区改造方案
  • 本地docker-compose仓库搭建以及推送docker镜像到仓库
  • WPF+MVVM案例实战(八)- 自定义开关控件封装实现
  • 单机kafka性能需要高性能的硬件做支撑
  • Spark 的 Http Broadcast 和 Torrent Broadcast 广播实现类的对比
  • 030_Subplot_In_Matlab中多图绘制之subplot函数
  • 免费云服务器有什么使用限制和注意事项?
  • 3-ZYNQ 折腾记录 -PS_PL AXI Interfaces