【大模型系列】mPLUG-Owl3(2024.08)
- 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 模型结构
- 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)
传统的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=Himg∗g+Htexti∗(1−g)
核心点:visual feature不直接作为LLM的输入,而是在LLM中间几层参与计算,再与文本特征融合到一起,因此不会因为输入的图片多而导致超出LLM的最大输入限制。
2 训练细节
- 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
3.2 视频理解指标
VideoQA测试时,mPLUG-Owl3抽帧128(V100-32G最大内存)
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来计算准确率分数
对于每个问题构造不同的测试样本:不同顺序的选项和多样化的干扰图片。干扰图片越多,其挑战越大。
实验结果证明mPLUG-Owl3具有比较强的抗干扰性。
5 总结
- mPLUG-Owl指标层面一般,与Qwen2VL-7B还有一定的差距
- 不过HATB的思路比较有趣,限制图片(视频帧)处理数量的瓶颈由之前的LLM的最大输入长度变成了GPU显存
相关文章:

【大模型系列】mPLUG-Owl3(2024.08)
Paper: https://arxiv.org/pdf/2408.04840Github: https://github.com/X-PLUG/mPLUG-OwlHuggingFace:https://huggingface.co/mPLUG/mPLUG-Owl3-7B-240728Author: Jiabo Ye et al. 阿里巴巴 文章目录 0 总结(省流版)1 模型结构1.1 Cross-attention Based Achitectur…...

从0到1学习node.js(express模块)
文章目录 Express框架1、初体验express2、什么是路由3、路由的使用3、获取请求参数4、电商项目商品详情场景配置路由占位符规则5、小练习,根据id参数返回对应歌手信息6、express和原生http模块设置响应体的一些方法7、其他响应设置8、express中间件8.1、什么是中间件…...

MambaVision
核心速览 研究背景 研究问题 :这篇文章提出了一种新的混合Mamba-Transformer骨干网络,称为MambaVision,专为视 觉应用量身定制。研究的核心问题是如何有效地结合Mamba的状态空间模型(SSM)和Transf ormer的自注意力机制…...
MySQLDBA修炼之道-开发篇(二)
四、开发进阶 1. 范式和反范式 范式是数据库规范化的一个手段,是数据库设计中的一系列原理和技术,用于减少数据库中的数据冗余,并增进数据的一致性。 范式 1.1 第一范式 第一范式是指数据库表的每一列(属性)都是不可…...

前端必备的环境搭建
一、nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置) 参考地址:nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 说明: 1)关于nodejs目录不显示&a…...
SpringCloud笔记
什么是降级熔断?为什么要进行熔断? 熔断降级是一种分布式系统的保护机制,用于应对服务不稳定或不可用的情况。 熔断是指当某个服务的调用失败次数或异常比例达到一定阈值时,自动切断对该服务的调用,让请求快速失败&…...
优秀的程序员思考数据结构
原文地址:https://read.engineerscodex.com/p/good-programmers-worry-about-data 我最近在这篇很棒的 Stack Overflow 文章中看到了 Linus Torvalds(Linux 和 Git 的创建者)的一句话。(这篇文章回顾了那篇文章中的许多引述。 它…...

「C/C++」C/C++标准库之#include<cstdlib>通用工具库
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

Oracle视频基础1.1.3练习
1.1.3 需求: 完整格式查看所有用户进程里的oracle后台进程 查看物理网卡,虚拟网卡的ip地址 ps -ef | grep oracle /sbin/ifconfig要以完整格式查看所有用户进程中的 Oracle 后台进程,并查看物理和虚拟网卡的 IP 地址,可以使用以下…...

python项目实战——多协程下载美女图片
协程 文章目录 协程协程的优劣势什么是IO密集型任务特点示例与 CPU 密集型任务的对比处理 I/O 密集型任务的方式总结 创建并使用协程asyncio模块 创建协程函数运行协程函数asyncio.run(main())aiohttp模块调用aiohttp模块步骤 aiofiles————协程异步函数遇到的问题一 await …...

基于.NET 8.0,C#中Microsoft.Office.Interop.Excel来操作office365的excel
开发环境: Visual Studio 2022 office365 项目模板:WPF应用程序 框架:.NET 8.0 依赖:Microsoft.Office.Interop.Excel 注意: 1.使用Microsoft.Office.Interop.Excel库时,服务器或电脑里面必须安装得…...

使用无线方式连接Android设备进行调试的两种方法
1.使用配对码配对设备方式 手机(或者平板等安卓设备)和电脑需连接在同一WiFi 下;保证 SDK 为最新版本(adb --version ≥ 30.0.0); step1.手机启用开发者选项和无线调试模式(会提示确认ÿ…...
Valgrind的使用
Valgrind 是一个强大的开源工具,用于检测程序中的内存错误、内存泄漏以及线程问题。它广泛应用于 C/C++ 等需要手动管理内存的编程语言中。以下内容将详细介绍 Valgrind 的安装、基本使用方法、常用命令及其输出结果的解析。 1. 什么是 Valgrind? Valgrind 是一个用于内存调…...
微信小程序瀑布流实现,瀑布流长度不均等解决方法
这是一开始实现的瀑布流,将数据分为奇数列和偶数列 <view class"content-left"><block wx:for"{{list}}" wx:key"list"><template isitem-data data{{...item}} wx:if"{{index % 2 0}}"></template&…...

Notepad++通过自定义语言实现日志按照不同级别高亮
借助Notepad的自定义语言可以实现日志的按照不同级别的高亮; 参考: https://blog.csdn.net/commshare/article/details/131208656 在此基础上做了一点修改效果如下: xml文件: <NotepadPlus><UserLang name"Ansibl…...

2024年四川省大学生程序设计竞赛 补题记录
文章目录 Problem A. 逆序对染色(思维树状数组)Problem B. 连接召唤(贪心)Problem E. L 型覆盖检查器(模拟)Problem F. 小球进洞:平面版(几何)Problem G. 函数查询Proble…...

17_事件的处理
目录 绑定事件与解绑事件优化事件的绑定和解绑方式处理不同事件类型的绑定处理同一事件类型多个事件处理函数事件冒泡与更新时机问题 绑定事件与解绑事件 既然要处理事件,那么首先面临的问题是如何在 vnode 中描述这个事件,在 vnode.props 中࿰…...

1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)
相同点: (1)传递区间 队列、二值信号量、计数型信号量均可用在任务与任务,任务与中断之间进行消息传递 (2) 传递方式 创建队列--发送队列--接受队列 创建二值信号量--发送二值信号量--接受二值信号量 创建计…...
数据库设计与范式及其应用
数据库设计是数据库管理系统(DBMS)中的核心环节,良好的数据库设计不仅可以提高数据存取的效率,还能增强数据的可维护性和一致性。范式(Normalization)是一种设计原则,用于减少数据冗余和提高数据…...
笔记-配置PyTorch(CUDA 12.2)
文章目录 前言一、安装 PyTorch(CUDA 12.2)1. 创建并激活 Conda 环境2. 安装 PyTorch(CUDA 12.2)3. 安装 torch_geometric 及依赖项4. 验证安装 总结 前言 一、安装 PyTorch(CUDA 12.2) 1. 创建并激活 Con…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...