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

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.rhkb.cn/news/10342.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)

四、特征工程 4.1 分子描述符计算 分子描述符作为量化分子性质的关键数值,能够从多维度反映药物分子的结构和化学特征,在药物相互作用预测中起着举足轻重的作用。RDKit 库凭借其强大的功能,为我们提供了丰富的分子描述符计算方法,涵盖了多个重要方面的分子性质。 分子量…

【算法】动态规划专题① ——线性DP python

目录 引入简单实现稍加变形举一反三实战演练总结 引入 楼梯有个台阶&#xff0c;每次可以一步上1阶或2阶。一共有多少种不同的上楼方法&#xff1f; 怎么去思考&#xff1f; 假设就只有1个台阶&#xff0c;走法只有&#xff1a;1 只有2台阶&#xff1a; 11&#xff0c;2 只有3台…

0 基础学运维:解锁 K8s 云计算运维工程师成长密码

前言&#xff1a;作为一个过来人&#xff0c;我曾站在技术的门槛之外&#xff0c;连电脑运行内存和内存空间都傻傻分不清&#xff0c;完完全全的零基础。但如今&#xff0c;我已成长为一名资深的k8s云计算运维工程师。回顾这段历程&#xff0c;我深知踏上这条技术之路的艰辛与不…

事务03之MVCC机制

MVCC 多版本并发控制机制 文章目录 MVCC 多版本并发控制机制一&#xff1a;并发事务的场景1&#xff1a;读读场景2&#xff1a;写写场景3&#xff1a;读写 or 写读场景 二&#xff1a;MVCC机制综述1&#xff1a;MVCC日常生活的体现2&#xff1a;多版本并发控制 三&#xff1a;M…

数据结构-Stack和栈

1.栈 1.1什么是栈 栈是一种特殊的线性表&#xff0c;只允许在固定的一段进行插入和删除操作&#xff0c;进行插入和删除操作的一段称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵顼后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#xff0c;就像一…

langchain基础(二)

一、输出解析器&#xff08;Output Parser&#xff09; 作用&#xff1a;&#xff08;1&#xff09;让模型按照指定的格式输出&#xff1b; &#xff08;2&#xff09;解析模型输出&#xff0c;提取所需的信息 1、逗号分隔列表 CommaSeparatedListOutputParser&#xff1a;…

AI编程:如何编写提示词

这是小卷对AI编程工具学习的第2篇文章&#xff0c;今天讲讲如何编写AI编程的提示词&#xff0c;并结合实际功能需求案例来进行开发 1.编写提示词的技巧 好的提示词应该是&#xff1a;目标清晰明确&#xff0c;具有针对性&#xff0c;能引导模型理解问题 下面是两条提示词的对…

【B站保姆级视频教程:Jetson配置YOLOv11环境(五)Miniconda安装与配置】

B站同步视频教程&#xff1a;https://www.bilibili.com/video/BV1MwFDeyEYC/ 文章目录 0. Anaconda vs Miniconda in Jetson1. 下载Miniconda32. 安装Miniconda33. 换源3.1 conda 换源3.2 pip 换源 4. 创建环境5. 设置默认启动环境 0. Anaconda vs Miniconda in Jetson Jetson…

仿真设计|基于51单片机的无线投票系统仿真

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;投票系统分为发送端和接收端。 &#xff08;2&#xff09;发送端通过按…

玩转大语言模型——使用langchain和Ollama本地部署大语言模型

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

(动态规划基础 打家劫舍)leetcode 198

已知h2和h1&#xff0c;用已知推出未知 推是求答案&#xff0c;回溯是给答案 这里图片给出dfs暴力&#xff0c;再进行记录答案完成记忆化搜索&#xff0c;再转为dp数组 #include<iostream> #include<vector> #include<algorithm> //nums:2,1,1,2 //dp:2,2,…

origin如何在已经画好的图上修改数据且不改变原图像的画风和格式

例如我现在的.opju文件长这样 现在我换了数据集&#xff0c;我想修改这两个图表里对应的算法里的数据&#xff0c;但是我还想保留这图像现在的形式&#xff0c;可以尝试像下面这样做&#xff1a; 右击第一个图&#xff0c;出现下面&#xff0c;选择Book[sheet1] 选择工作簿 出…

[STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器

一、定时器简介 STM32 中的定时器&#xff08;TIM&#xff0c;Timer&#xff09;是其最重要的外设之一&#xff0c;广泛用于时间管理、事件计数和控制等应用。 1.1 基本功能 定时功能&#xff1a;TIM定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中…

Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

04树 + 堆 + 优先队列 + 图(D1_树(D1_基本介绍))

目录 一、什么是树&#xff1f; 二、相关术语 根结点 边 叶子结点 兄弟结点 祖先结点 结点的大小 树的层 结点的深度 结点的高度 树的高度 斜树 一、什么是树&#xff1f; 树是一种类似于链表的数据结构&#xff0c;不过链表的结点是以线性方式简单地指向其后继结…

Rust语言进阶之文件处理:std::fs用法实例(九十九)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

flowable expression和json字符串中的双引号内容

前言 最近做项目&#xff0c;发现了一批特殊的数据&#xff0c;即特殊字符"&#xff0c;本身输入双引号也不是什么特殊的字符&#xff0c;毕竟在存储时就是正常字符&#xff0c;只不过在编码的时候需要转义&#xff0c;转义符是\&#xff0c;然而转义符\也是特殊字符&…

学习数据结构(5)单向链表的实现

&#xff08;1&#xff09;头部插入 &#xff08;2&#xff09;尾部删除 &#xff08;3&#xff09;头部删除 &#xff08;4&#xff09;查找 &#xff08;5&#xff09;在指定位置之前插入节点 &#xff08;6&#xff09;在指定位置之后插入节点 &#xff08;7&#xff09;删除…

14-8C++STL的queue容器

一、queue容器 (1)queue容器的简介 queue为队列容器&#xff0c;“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…

算法基础学习——快排与归并(附带java模版)

快速排序和归并排序是两种速度较快的排序方式&#xff0c;是最应该掌握的两种排序算法&#xff0c; &#xff08;一&#xff09;快速排序&#xff08;不稳定的&#xff09; 基本思想&#xff1a;分治 平均时间复杂度&#xff1a;O(nlogn) / 最慢O(n^2) / 最快O(n) 步骤&…