多模态大模型Ovis核心技术点、训练细节、训练数据

ops/2025/3/16 3:18:02/

文章提出:传统的 MLLMs 中,文本嵌入是从 LLM 的嵌入查找表中索引得到的,而视觉嵌入是由视觉编码器(如:ViT)直接生成的连续向量。这种差异导致在视觉和文本信息融合时存在挑战

与传统的MLLM不同,Ovis 通过在视觉编码器的过程中引入一个额外的视觉嵌入查找表来解决这个问题。这种方法使得视觉嵌入的生成过程与文本嵌入类似。

效果

核心创新

从下面模型结构代码可以看到,Ovis和传统的LLava架构其实差不多,最大的区别就是LLava使用MLP,Ovis使用“视觉词汇”。

模型结构代码

Ovis 的核心创新在于其视觉嵌入表的引入:

  1. 图(a):基于连接器的MLLM:传统多模态模型(如LLava)的典型架构,连接器通常是一个MLP,其作用是将视觉特征投影到与文本嵌入相同的维度空间中。

  2. 图(b):Ovis的结构化嵌入对齐:视觉编码器的输出不再直接通过MLP投影,而是送入一个视觉嵌入表(Visual Embedding Table)。这个表是一个可学习的结构,类似于文本嵌入。表。

    • 视觉编码器:图像首先被视觉编码器(如 ViT)处理,分为多个patches,每个patch生成一个连续的特征向量。

    • 视觉嵌入表:不同于传统方法直接通过 MLP 投影,Ovis 在视觉编码器后整合了一个可学习的视觉嵌入表。每个图像patch的特征向量用于多次索引该表,生成最终的视觉嵌入。为了使视觉和文本嵌入具有兼容的形状,视觉嵌入表的维度设置为与文本嵌入表相同。

      视觉嵌入表实现过程

    • 嵌入对齐:视觉嵌入表的引入使得视觉嵌入的生成方式与文本嵌入类似。文本嵌入通常通过查找表为每个token分配一个嵌入向量,而 Ovis 通过视觉嵌入表为视觉patch生成结构化的嵌入,实现了两者的对齐。

训练方法

训练分为三个阶段:

阶段 1:初始化训练

在这个阶段,冻结 LLM 和视觉编码器的大部分参数,仅随机初始化视觉编码器的最后一块参数。使用视觉描述数据集(如 COYO)来训练这些新初始化的参数,以及 Ovis 的投影矩阵 W W W 和视觉嵌入表 { e k } k = 1 K \{e_k\}_{k=1}^{K} {ek}k=1K

阶段 2:扩展训练

在这个阶段,解冻 Ovis 的投影矩阵 W W W 和视觉嵌入表 { e k } k = 1 K \{e_k\}_{k=1}^{K} {ek}k=1K,并继续训练视觉编码器的所有参数。使用视觉描述数据集(如 ShareGPT4V-Pretrain)进行训练。这个阶段的目标是进一步优化视觉嵌入的生成。

阶段 3:多模态指令学习

在前两个阶段的基础上,解冻 LLM 模块,并在多模态指令数据集(如 LLaVA-Finetune)上训练整个模型。这个阶段的目的是赋予 Ovis 跟随多模态指令的能力。

训练超参数设置:

训练数据集

参考文献:Ovis: Structural Embedding Alignment for Multimodal Large Language Model,https://arxiv.org/abs/2405.20797


http://www.ppmy.cn/ops/166107.html

相关文章

Unity大型游戏开发全流程指南

一、开发流程与核心步骤 1. 项目规划与设计阶段 需求分析 明确游戏类型(MMORPG/开放世界/竞技等)、核心玩法(战斗/建造/社交)、目标平台(PC/移动/主机)示例:MMORPG需规划角色成长树、副本Boss…

【go】函数类型的作用

Go 语言函数类型的巧妙应用 函数类型在 Go 语言中非常强大,允许将函数作为值进行传递和操作。下面详细介绍函数类型的各种妙用: 1. 回调函数 // 定义一个函数类型 type Callback func(int) int// 接受回调函数的函数 func processData(data []int, ca…

conda install 和 pip install 的区别

conda install 和 pip install 是两个常用的包安装命令,但它们在很多方面存在差异。 1. 所属管理系统不同 1.1 conda install conda install 是Anaconda和Miniconda发行版自带的包管理工具 conda 的安装命令。conda 是一个跨平台的开源包管理系统和环境管理系统&…

蓝桥杯 阶乘求值

问题描述 给定 nn,求 n!n! 除以 10000000071000000007 的余数。 其中 n!n! 表示 nn 的阶乘,值为从 11 连乘到 nn 的积,即 n!123…nn!123…n。 输入格式 输入一行包含一个整数 nn。 输出格式 输出一行,包含一个整数,表示…

LearnOpenGL-笔记-其四

上一篇笔记中结束了材质的内容,现在让我们进入新的部分: 光照贴图 光照贴图的概念其实非常简单,简单地说,我们希望不同的材质拥有不同的光照属性,所以不同的材质要应用不用的光照贴图,最常见的有我们的漫…

(七)Spring Boot学习——Redis使用

有部分内容是常用的,为了避免每次都查询数据库,将部分数据存入Redis。 一、 下载并安装 Redis Windows 版的 Redis 官方已不再维护,你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux&a…

四元数 实部 虚部顺序,不同仿真器

一些库将四元数表示为 (w,x,y,z),将实部定位为第一个元素。 而其他的一些库则将其 表示为 (x,y,z, w)。 QuaternionConventionSimulator/LibrarywxyzMuJoCo, SAPIEN, CoppeliaSim, IsaacSim, Gazebo, Blender, Taichi…

【Go每日一练】实现简单的控制台计算器

👻创作者:丶重明 👻创作时间:2025年3月7日 👻擅长领域:运维 目录 1.😶‍🌫️题目:简单的控制台计算器2.😶‍🌫️代码输出3.😶‍&#…