[EAI-026] DeepSeek-VL2 技术报告解读

news2025/4/22 3:23:47

Paper Card

论文标题:DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding
论文作者:Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bingxuan Wang, Zhenda Xie, Yu Wu, Kai Hu, Jiawei Wang, Yaofeng Sun, Yukun Li, Yishi Piao, Kang Guan, Aixin Liu, Xin Xie, Yuxiang You, Kai Dong, Xingkai Yu, Haowei Zhang, Liang Zhao, Yisong Wang, Chong Ruan
论文链接:https://arxiv.org/abs/2412.10302v1
论文出处:/
论文被引:/
项目主页:https://github.com/deepseek-ai/DeepSeek-VL2

Abstract

本文介绍了大型专家混合(MoE)视觉语言模型系列 DeepSeek-VL2,在 DeepSeek-VL 基础上做了两个主要升级。视觉组件结合了 Dynamic Tiling 视觉编码策略,旨在处理具有不同纵横比的高分辨率图像。语言组件利用具有多头潜在注意力机制的DeepSeekMoE模型,该机制将键值缓存压缩成潜在向量,以实现高效推理和高吞吐量。在改进的视觉语言数据集上进行训练,在各种任务中展示了优越的能力,包括 VQA、OCR、文档/表格/图表理解和视觉定位(Visual grounding)等。DeepSeek-VL2系列有三个模型:DeepSeek-VL2-Tiny、DeepSeek-VL2-Small和DeepSeek-VL2,分别具有10亿、28亿和45亿个激活参数。 与现有的开源密集型和基于MoE的模型相比,DeepSeek-VL2在激活参数相似或更少的情况下实现了具有竞争力或最先进的性能。

Summary

DeepSeek-VL2 对具身智能的影响?
从PaLM-E开始掀起了利用VLM构建具身场景VQA的模型,pi0引入了擅长做 VG 的PaliGemma作为VLA的骨干,而具身数据高度异构,已有研究从模型层面设计MoE架构的模型来实现跨本体的泛化,比如何恺明团队的HPT。DeepSeek-VL2利用原生MoE的LLM构建VLM,可能天然的适合异构数据学习场景,而无需单独针对policy head进行MoE设计,从而统一动作空间。
在这里插入图片描述

模型架构

在这里插入图片描述

整体上是decoder-only 的 LLaVA 风格架构,包括三个核心模块:(1) 视觉编码器;(2) 视觉语言适配器;(3) 专家混合语言模型。

两个改进:动态平铺(Dynamic Tilimg)策略,多头潜在注意力(Multi-head Latent Attention,MLA)的 DeepSeekMOE 语言模型。这些创新使得模型能够更高效地处理高分辨率视觉输入和文本数据。

Dynamic tiling

在这里插入图片描述

并不神秘, InternVL 系列和 Qwen-VL 系列已经使用。InternVL 系列技术报告中讲得更清楚。
为啥要用这玩意?原来的视觉编码器只能接受固定分辨率的图像输入,这在一些更高分辨率和极端纵横比的图像上需要缩放和padding之后再输入视觉编码器,会影响多模态模型的理解能力。因此,引入了动态分辨率策略。

DeepSeek-VL2的上一个版本DeepSeek-VL使用了混合视觉编码器:SigLip-384和SAM-B-1024,可以生成丰富的视觉表征,但是收到固定1024x1024分辨率的输入限制。应用动态分辨率之后,仅仅使用SigLip 视觉编码器就可以处理不同分辨率的图像输入。具体咋干的?首先,定义了一组候选分辨率 C R = { ( m ⋅ 384 , n ⋅ 384 ) ∣ m ∈ N , n ∈ N , 1 ≤ m , n , m n ≤ 9 } C_R = \{ (m \cdot 384, n \cdot 384) | m \in \mathbb{N}, n \in \mathbb{N}, 1 \le m,n,mn \le 9 \} CR={(m384,n384)mN,nN,1m,n,mn9},其中 m : n m:n m:n 表示纵横比。然后,对于输入高宽为 ( H , W ) (H, W) (H,W) 的图像,计算最匹配的高宽比,然后将图像划分为 m i × n i m_i \times n_i mi×ni 384 × 384 384 \times 384 384×384 像素的图像块,再加上一个原始图像的缩略图,最终有 m i × n i + 1 m_i \times n_i + 1 mi×ni+1 个图块,经过 SigLip-SO400M-384 处理后,产生了 27x27=729 个 1152 维的 vision embedding 向量。为了提高计算效率,当处理多张图像时,禁用了动态分辨率。

Vision-Language Adaptor
在这里插入图片描述
在视觉图块处理之后,应用 2×2 的 pixel shuffle,以将每个图块的视觉token从27×27压缩到14×14=196个token。然后,在处理 (1+mi×ni) 图块时引入三个特殊token。对于全局缩略图图块 (14×14),在每一行的末尾添加<tile_newline> token,总共得到 14×15=210 个token。对于 mi×ni 局部图块,它们排列在一个形状为
(mi⋅14, ni⋅14)的二维网格中,在最后一列的末尾添加 mi⋅14 个<tile_newline>token以指示所有局部图块一行的结束。此外,在全局缩略图图块和局部图块之间插入一个<view_separator>token。完整的视觉序列包含
210+1+mi⋅14×(ni⋅14+1) 个视觉token,这些token随后使用两层多层感知器 (MLP) 投影到语言模型的嵌入空间中。图3显示了动态平铺策略。

模型版本:DeepSeek-VL2 有三个变体,模型总计参数为 3B、16B、27B,模型激活参数分别为:1.0B、2.8B 和 4.5B。
在这里插入图片描述

数据构建

训练过程包括三个阶段:(1)视觉-语言对齐,(2)视觉-语言预训练,(3)监督微调 (SFT)

Stage1:视觉语言对齐数据

数据来源:ShareGPT4V
数据模态:图文对
数据类型:图像描述和问答
数据规模:120 万样本(~2B tokens)

Stage2:视觉语言预训练数据

数据来源:开源+改写
数据模态:70%图文对+30%纯文本
数据类型:图文交错、图像描述、OCR、VQA、视觉定位、GroundingQA
数据规模:(~796.5B tokens)

1-图文交错数据
  1. 开源数据抽取:WIT [79]、WikiHow [38] 和 OBELICS [41] 中的 30% 随机样本,30% 是通过 DeepSeek-VL2-Tiny 的预备实验确定的
  2. 开源数据翻译:为了增强多语言能力,从 Wanjuan [29] 中提取的中文内容补充了英文数据集
  3. 内部收集构建:扩展对世界知识的覆盖范围
2-图像描述数据
  1. 开源数据改写:最初使用了各种开源数据集 [50, 78, 73, 51, 48, 82, 40, 36, 39, 8, 80, 37, 25, 28],但是后边分析发现质量参差不齐的问题,因此自己开发了一个图像描述数据生成管线:它以 (1) OCR提示,(2) 元数据信息(例如,位置、相机设置)和 (3) 相关的原始描述作为提示。使用内部图像描述生成器,遵循类似于PixelProse 的提示策略重新为图像添加描述,使用不同的指令来指导VLM的图像描述生成。
  2. 改写数据清洗:基于 DeepSeek Chat 构建质检管线,对生成的图像描述进行打分,然后过滤掉低质量的图像描述。
3-OCR 数据
  1. 开源数据抽取:LaTeX OCR [7] 和12M RenderedText [93],目前仅仅包含中英文字体提取,未来会扩展到更多语种。
4-VQA 数据

通用视觉问答:来自 DeepSeek-VL 中的通用视觉问答。

表格、图标和文档理解:采用 PubTabNet [112]、FinTabNet [111] 和 Docmatix [42] 来增强文档理解能力。

网页to代码和图表to代码生成:

  • 开源数据抽取:利用 Websight [44] 实现网页到代码功能,使用公开的 Jupyter Notebook 中的 Python 绘图代码。
  • 合成数据生成:使用 DeepSeek V2.5 复制了 Websight 的一部分来增强此数据集。利用 DeepSeek V2.5 生成的 Python 绘图代码来减少图表to代码数据中的噪声。

带有视觉提示的数据:遵循 [9],将各种视觉提示(箭头、方框、圆圈和涂鸦)叠加到 [9, 89, 90] 中的图像上,来构建视觉提示理解数据。然后,创建关注这些视觉提示突出显示的对象的问答对。

5-视觉定位数据(Visual grounding data)

数据来源:[71, 75]
数据格式:不同的多模态模型格式可能不同,在使用这类数据训练自己的模型的时候要特别注意。尤其是¬
在这里插入图片描述
训练过程中,prompt 是从候选池中随机抽取的。还构建了object缺失的负样本,以增强模型的鲁棒性。

参数解释:

  • <|ref|>, <|/ref|>, <|det|>, <|/det|>:special tokens
  • <query>:a placeholder for either the category name (e.g., “car”) or description of the object (e.g., “the leftmost person”)
  • [[x1, y1, x2, y2], …]:a list of bounding boxes, where each bounding box corresponds to an object’s position. The coordinates x1, y1 and x2, y2 specify the top-left and bottom-right corners respectively, normalized to values between 0 and 999 according to the resolution of the image. 注意这里的图片尺寸是0-999,而不是归一化。
6-参考表达数据 (Grounded conversation data)

在这里插入图片描述
As in other visual grounding data, <|grounding|>, <|ref|>, <|/ref|>, <|det|>, <|/det|> are special tokens and x1, y1, x2, y2 is subject to the same normalization scheme.

Stage3:SFT 数据

数据来源:开源+内部构建的数据
数据模态:图文对+纯文本+代码
数据类型:GeneralVQA,OCR和文档理解,图标和表格理解,推理、逻辑和数学题,教材和学术问题,网页to代码、图标to代码生成,视觉定位,GroundingQA,纯文本数据
数据规模:(~19.5B tokens)

1-通用视觉问答数据

开源数据清洗:已有的开源数据[74, 10, 43, 9, 27, 31, 47]存在三个问题:(1)答案简短,(2)OCR 质量差,以及(3)内容虚构。通过联合考虑原始问题、图像和 OCR 信息来重新生成答案。 实验表明,这种方法能够产生更全面、更准确的结果。

内部自建数据1:开发了一个内部中文问答数据集,其中包含各种图像描述和单轮/多轮对话。 此数据集有助于减轻语言混合问题。

内部自建数据2:补充现实世界和文化视觉知识,包括动漫、表情包、美食和艺术。

2-OCR和文档理解数据

开源数据清洗:预训练阶段已经让模型具备很强的OCR能力,在SFT阶段没有进一步提高OCR性能,而是专注于清洗现有的开源数据集[43, 24, 92, 104, 66, 77, 31, 67],删除 OCR 质量差的样本。

内部自建数据:对于文档理解,从内部数据中整理了一个多样化的文档页面子集。然后,生成针对文档理解的、多轮对话问答对。

3-表格和图标理解数据

开源数据复用:Cauldron[43]数据集具有较高的质量,可以直接用

开源数据清洗:通过基于原始问题重新生成所有公共数据集[14, 49]的答案来增强基于表格的问答数据

4-推理、逻辑和数学数据

开源数据清洗:使用更详细的推理过程增强了公共推理数据集[76, 43, 61, 17, 102, 109],并标准化了响应格式,将最终答案放在响应的末尾。

5-教材和学术数据

内部自建数据:构建了一个内部数据集,重点关注文档集合中的教材。 此数据集主要强调跨多个学科的大学水平内容。

6-网页代码和Python绘图代码数据

开源数据清洗:通过重新生成答案来提高其质量

内部自建数据:扩展了内部用于网页代码和Python绘图代码的数据集,超出了预训练期间使用的数据集

7-视觉定位数据

开源数据翻译:使用来自[85, 64, 101, 2, 110, 23]的数据开发了VG数据集,为了提升模型能力,将查询短语翻译成中文,并创建额外的负样本。

合成数据生成:还添加了上下文视觉定位数据,其中任务涉及在给定参考图像中由矩形或椭圆突出显示的参考对象的情况下,跨多个图像定位同一类别中的对象。

在这里插入图片描述
参数解释:

  • <|grounding|>, <|ref|>, <|/ref|>, <|det|>, <|/det|> are special tokens
  • <object> placeholder represents phrases like “an object within the red bounding box” while is the model’s description of the detected object (e.g., “cat”)
8-视觉定位对话数据

使用[62, 72]构建基于视觉定位的对话数据,以进一步增强预训练阶段建立的模型能力。

9-纯文本数据

为了保持模型的语言能力,在SFT阶段还使用了纯文本指令调优数据集[98, 4, 18, 68, 91, 70, 84, 6, 19]。

训练策略

DeepSeek-VL2 通过三阶段流程进行训练:
1)初始阶段——视觉-语言对齐:建立视觉特征和语言特征之间的联系,使预训练语言模型能够有效地处理视觉输入;使用Stage1数据;冻结LLM,训练视觉编码器和视觉-语言适配器MLP

2)预训练阶段——视觉-语言预训练:增强模型的多模态理解能力,同时保持了其大部分语言能力;使用Stage2数据;解冻所有参数(包括视觉编码器、视觉-语言适配器和语言模型)训练

3)微调阶段——SFT:确保模型在各种视觉-语言任务中具有强大的性能;使用Stage3数据;解冻所有参数(包括视觉编码器、视觉-语言适配器和语言模型)训练

在所有阶段,都强调视觉理解能力,并仅针对文本token计算下一个token预测损失。
在这里插入图片描述

超参数如表2所示

基础设施:由16/33/42个节点组成的集群在7/10/14天内完成,每个节点配备8个NVIDIA A100 GPU。

模型评估

定量分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定性分析

GQA

在这里插入图片描述

多图对话

在这里插入图片描述

视觉定位

在这里插入图片描述

视觉定位对话

在这里插入图片描述

实验结论

在问介绍了DeepSeek-VL2,这是一个基于MoE的视觉语言模型的增强版本,共有3B、16B和27B参数规模,对应的激活参数分别为1.0B、2.8B和4.5B。 此配置有助于在训练和推理阶段有效地降低计算消耗,三个模型分别可以在具有10GB、40GB和80GB内存的单个GPU上部署。 采用动态平铺视觉编码策略来有效地处理具有各种纵横比的高分辨率图像。

局限性:

  • 目前,DeepSeek-VL2 的上下文窗口每次对话会话仅允许包含少量图像。计划在下一个版本中扩展上下文窗口,以实现更丰富的多图像交互。
  • 此外,与其他VLM一样,该模型偶尔会在模糊图像或未见过的物体时表现不好。
  • 最后,虽然 DeepSeek-VL2 在视觉感知和识别任务方面表现出色,但推理能力仍有待加强。

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

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

相关文章

Java 23新特性

文章目录 Java 23新特性一、引言二、Markdown文档注释&#xff08;JEP 467&#xff09;示例 三、ZGC&#xff1a;默认的分代模式&#xff08;JEP 474&#xff09;1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法&#xff08;JE…

二叉树--链式存储

1我们之前学了二叉树的顺序存储&#xff08;这种顺序存储的二叉树被称为堆&#xff09;&#xff0c;我们今天来学习一下二叉树的链式存储&#xff1a; 我们使用链表来表示一颗二叉树&#xff1a; ⽤链表来表⽰⼀棵⼆叉树&#xff0c;即⽤链来指⽰元素的逻辑关系。通常的⽅法是…

C++,vector:动态数组的原理、使用与极致优化

文章目录 引言一、vector 的核心原理1. 底层数据结构1.1 内存布局的三指针模型1.2 内存布局示意图 2. 动态扩容机制2.1 动态扩容过程示例 3. 关键结论4. 代码验证内存布局5. 总结 二、vector 的使用方法1. 基本操作2. 迭代器与范围遍历 三、vector 的注意事项1. 迭代器失效2. 性…

bootstrap.yml文件未自动加载问题解决方案

在添加bootstrap.yml文件后,程序未自动扫描到,即图标是这样的: 查了一些资料,是缺少bootstrap相关依赖,虽然已经添加了spring-cloud-context依赖,但是这个依赖并未引入bootstrap依赖,可能是版本问题,需要手动引入 <dependency><groupId>org.springframework.cloud&…

物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

一、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种基于发布/订阅模式的轻量级通讯协议&#xff0c;构建于TCP/IP协议之上。它最初由IBM在1999年发布&#xff0c;主要用于在硬件性能受限和网络状况不佳的情…

计算机网络 性能指标相关

目录 吞吐量 时延 时延带宽积 往返时延RTT 利用率 吞吐量 时延 时延带宽积 往返时延RTT 利用率

软件测试02----用例设计方法

今天目标 1.能对穷举场景设计测试点 2.能对限定边界规则设计测试点 3.能对多条件依赖关系进行设计测试点 4.能对项目业务进行设计测试点 一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#…

冷启动+强化学习:DeepSeek-R1 的原理详解——无需监督数据的推理能力进化之路

本文基于 DeepSeek 官方论文进行分析,论文地址为:https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf 有不足之处欢迎评论区交流 原文翻译 在阅读和理解一篇复杂的技术论文时,逐字翻译是一个重要的步骤。它不仅能帮助我们准确把握作者的原意,还能为后续…

014-STM32单片机实现矩阵薄膜键盘设计

1.功能说明 本设计主要是利用STM32驱动矩阵薄膜键盘&#xff0c;当按下按键后OLED显示屏上会对应显示当前的按键键值&#xff0c;可以将此设计扩展做成电子秤、超市收银机、计算器等需要多个按键操作的单片机应用。 2.硬件接线 模块管脚STM32单片机管脚矩阵键盘行1PA0矩阵键盘…

Spring Boot 2 快速教程:WebFlux处理流程(五)

WebFlux请求处理流程 下面是spring mvc的请求处理流程 具体步骤&#xff1a; 第一步&#xff1a;发起请求到前端控制器(DispatcherServlet) 第二步&#xff1a;前端控制器请求HandlerMapping查找 Handler &#xff08;可以根据xml配置、注解进行查找&#xff09; 匹配条件包括…

unity学习25:用 transform 进行旋转和移动,简单的太阳地球月亮模型,以及父子级关系

目录 备注内容 1游戏物体的父子级关系 1.1 父子物体 1.2 坐标关系 1.3 父子物体实际是用 每个gameobject的tranform来关联的 2 获取gameObject的静态数据 2.1 具体命令 2.2 具体代码 2.3 输出结果 3 获取gameObject 的方向 3.1 游戏里默认的3个方向 3.2 获取方向代…

CH340G上传程序到ESP8266-01(S)模块

文章目录 概要ESP8266模块外形尺寸模块原理图模块引脚功能 CH340G模块外形及其引脚模块引脚功能USB TO TTL引脚 程序上传接线Arduino IDE 安装ESP8266开发板Arduino IDE 开发板上传失败上传成功 正常工作 概要 使用USB TO TTL&#xff08;CH340G&#xff09;将Arduino将程序上传…

DeepSeekMoE:迈向混合专家语言模型的终极专业化

一、结论写在前面 论文提出了MoE语言模型的DeepSeekMoE架构&#xff0c;目的是实现终极的专家专业化(expert specialization)。通过细粒度的专家分割和共享专家隔离&#xff0c;DeepSeekMoE相比主流的MoE架构实现了显著更高的专家专业化和性能。从较小的2B参数规模开始&#x…

扩散模型(二)

相关阅读&#xff1a;扩散模型&#xff08;一&#xff09; Parameterization of L t L_t Lt​ for Training Loss 回想一下&#xff0c;我们需要训练一个神经网络来近似反向扩散过程中的条件概率分布&#xff0c;即, p θ ( x t − 1 ∣ x t ) N ( x t − 1 ; μ θ ( x t…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象

2.18 对象数组&#xff1a;在NumPy中存储Python对象 目录 #mermaid-svg-shERrGOBuM2rBzeB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shERrGOBuM2rBzeB .error-icon{fill:#552222;}#mermaid-svg-shERrGOBuM2rB…

LabVIEW双光子成像系统:自主创新,精准成像,赋能科研

双光子成像系统&#xff1a;自主创新&#xff0c;精准成像&#xff0c;赋能科研 第一部分&#xff1a;概述 双光子成像利用两个低能量光子同时激发荧光分子&#xff0c;具有深层穿透、高分辨率、低光损伤等优势。它能实现活体深层组织的成像&#xff0c;支持实时动态观察&…

bagging框架

bagging 1 bagging介绍 Bagging的全称是Bootstrap Aggregating&#xff0c;其思想是通过将许多相互独立的学习器的结果进行结合&#xff0c;从而提高整体学习器的泛化能力 bagging框架流程&#xff1a;首先&#xff0c;它从原始数据集中使用有放回的随机采样方式抽取多个子集…

《机器学习数学基础》补充资料:仿射变换

本文是对《机器学习数学基础》 第 2 章 2.2.4 节齐次坐标系的内容拓展。 1. 名称的来源 仿射&#xff0c;是英文单词 affine 的中文翻译。 单词 affine&#xff0c;读音&#xff1a;[ə’faɪn]。来自于英语 affinity。英语词根 fin 来自于拉丁语 finis&#xff0c;表示“边…

冲刺一区!挑战7天完成一篇趋势性分析GBD DAY1-7

Day1. 公开数据库的挖掘太火热了,其中GBD数据库的挖掘又十分的火爆.那我就来挑战一篇GBD、一篇关于趋势性分析的GBD&#xff01; GBD数据库挖掘是目前的四大刊常客&#xff0c;经常出现在顶级期刊上面。这个数据库亮点就是&#xff1a;可视化&#xff0c;统计学简单、而数据可…

掌握API和控制点(从Java到JNI接口)_36 JNI开发与NDK 04

4、 *.so的入口函数&#xff1a;JNI_OnLoad() VM (virtual machine)的角色 Java代码在VM上执行。在执行Java代码的过程中&#xff0c;如果Java需要与本地代码(*.so)沟通时&#xff0c; VM就会把*.so視为插件<Tn>而加载到VM里。然后让Java函数呼叫到这插件<Tn>里的…