DeepSeek-OCR——上下文视觉压缩:同等长度下,通过更少的视觉token解决长上下文处理难题
前言
虽然我司侧重具身开发了,但对模型的重要进展不可能不关注,毕竟具身能有如今的快速发展,很大程度上便是得益于大模型
对于本文要介绍的DeepSeek-OCR,其实早在它刚发布时 我便关注到了,只是当时忙着和团队推进一系列B端客户项目的进展,无暇顾及
进入11月份后,研发的压力有所缓解
- 一方面 解读之前待解读的文章
- 二方面 我也和团队把遗留的一些课程(比如deepseek项目实战营、具身机械臂线上营、人形二次开发线上营)在今年之内,尽可能收尾掉
第一部分 DeepSeek-OCR: Contexts Optical Compression
1.1 引言与相关工作
1.1.1 引言
如DeepSeek-OCR原论文所说,当前的大型语言模型在处理长文本内容时,由于其对序列长度的二次扩展特性,面临显著的计算挑战
- 故作者探索了一种潜在的解决方案:利用视觉模态作为高效的文本信息压缩介质
一张包含文档文本的图片能够通过远少于等量数字文本的(视觉)token数表达丰富的信息,这表明通过视觉token实现的视觉压缩有可能实现更高的压缩比 - 这一见解促使作者从大语言模型(LLM)为中心的视角重新审视视觉-语言模型(VLMs),重点关注视觉编码器如何提升LLM在处理文本信息时的效率,而不仅仅是进行人类擅长的基础VQA任务 [12,16,24,32,41]
————
作为连接视觉与语言的中间模态,OCR任务为该视觉-文本压缩范式提供了理想的测试平台,因为它在视觉和文本表征之间建立了天然的压缩-解压映射,同时提供了可量化的评估指标
首先,为了更好的压缩,作者提出了 DeepEncoder,这是一种新型架构,即使在高分辨率输入下也能保持较低的激活内存和最少的视觉标记数量。它通过一个 16× 卷积压缩器将窗口注意力和全局注意力编码器组件串联起来。这一设计能够确保窗口注意力组件处理大量视觉token,而压缩器在密集的全局注意力组件处理前减少视觉token数量,从而实现高效的内存和token压缩
其次,作者基于 DeepEncoder 和 DeepSeek3B-MoE [19,20] 开发了 DeepSeek-OCR

- 如图1(a)所示,其
在9-10 倍文本压缩下实现了96%+ 的OCR 解码精度
在10-12 倍压缩下约为90 %,在Fox [21] 基准测试(涵盖多样化文档布局)上的20× 压缩下约为∼60 %(实际准确率在考虑输出与标准答案之间的格式差异时甚至更高) - 如图 1(b) 所示,该模型在 OmniDocBench 端到端模型中实现了最先进的性能,同时使用的视觉 token 最少
此外,作者为模型赋予了解析图表、化学式、简单几何图形和自然图像的能力,以进一步提升其实用性
在实际生产中,利用 20 个节点(每个节点配备 8张 A100-40G GPU),DeepSeek-OCR 每天可为 LLM 或 VLM 生成 3300 万页的数据
1.1.2 相关工作
首先,对于VLM中的典型视觉编码器
当前开源VLM主要采用三类视觉编码器,如图2所示

- 第一类是由Vary [36] 代表的双塔架构,利用并行的SAM [17] 编码器,通过增加视觉词汇参数来实现高分辨率图像处理
该方法虽然可以控制参数量和激活内存,但存在显著缺点:需要对图像进行两次预处理,增加了部署复杂度,并使训练过程中编码器流水线并行性变得困难 - 第二类是以InternVL2.0 [8] 为代表的分块(tile-based)方法,通过将图像分割为小块并并行处理,从而在高分辨率设置下降低激活内存消耗
虽然这种方法能够支持极高分辨率,但由于原生编码器分辨率通常较低(低于512×512),导致大尺寸图像被过度切分,产生大量视觉Token,存在明显局限性 - 第三类是以Qwen2-VL [35] 为代表的自适应分辨率编码,采用NaViT [10] 框架,通过基于patch的切分直接处理完整图像,无需tile并行
虽然该编码器能灵活适应多种分辨率,但在处理大尺寸图像时,会消耗大量激活内存,易导致GPU显存溢出,并且训练时序列打包需要极长的序列长度。过长的视觉Token序列会显著降低推理的预填充和生成速度
其次,对于端到端 OCR 模型
OCR,尤其是文档解析任务,一直是图像转文本领域中高度活跃的研究主题。随着大规模视觉语言模型(VLMs)的发展,大量端到端的 OCR 模型不断涌现,彻底变革了传统需要分别进行检测和识别的专家模型体系,通过简化流程提升了 OCR 系统的效率
- Nougat [6] 首次在 arXiv 上采用端到端框架进行学术论文的 OCR,展示了模型处理密集感知任务的潜力
————
GOT-OCR2.0 [38] 将 OCR2.0 的应用范围扩展到更多合成图像解析任务,并设计了一种在性能与效率之间权衡的 OCR 模型,进一步凸显了端到端OCR 研究的发展潜力 - 此外,诸如 Qwen-VL 系列 [35]、InternVL 系列 [8] 以及众多衍生模型等通用视觉模型,不断提升它们的文档 OCR 能力,以探索更极限的密集视觉感知边界
然而,目前尚未有模型解决的核心研究问题在于:对于包含 1000 个单词的文档,至少需要多少视觉 token 用于解码?该问题对于探究“一图胜千言”这一原理的研究具有重要意义
1.2 DeepSeek-OCR的模型架构
如图3所示,DeepSeek-OCR 采用统一的端到端视觉语言模型(VLM)架构,包含编码器和解码器两个部分

- 编码器(即 DeepEncoder)主要负责提取图像特征,并对视觉表征进行分词和压缩。解码器则根据图像令牌和提示生成所需的结果
DeepEncoder大约包含 3.8 亿参数,主要由一个 8000 万参数的 SAM-base [17] 和一个 3 亿参数的CLIP-large [29] 串联组成 - 解码器采用 30 亿参数的 MoE [19,20] 架构,激活参数量为 5.7 亿
接下来的段落将详细介绍模型组件、数据工程和训练技巧
1.2.1 DeepEncoder:涉及架构、多分辨率支持
为了探索上下文视觉压缩的可行性,需要一种具备以下特性的视觉编码器:
- 能够处理高分辨率
- 在高分辨率下具有较低的激活量
- 视觉token数量少
- 支持多种分辨率输入
- 参数量适中
然而,目前开源的编码器尚无法完全满足所有这些条件。因此,作者自行设计了一种新型视觉编码器,命名为DeepEncoder
1.2.1.1 DeepEncoder 的架构
DeepEncoder 主要由两个部分组成:
- 一是以窗口注意力机制为主的视觉感知特征提取模块
具体采用的SAM-base(patch-size 16) - 二是具备密集全局注意力的视觉知识特征提取模块
具体采用的 CLIP-large,对于 CLIP,作者移除了第一个 patch embedding 层,因为其输入已经不是原始图像,而是前一流程输出的 token
且在这两个模块之间,作者借鉴了 Vary [36] 的设计
- 采用了一个包含2层卷积的模块,对视觉 token 进行16倍下采样
每层卷积的核大小为3,步幅为2,填充为1,并且通道数从256增加到1024- 假设输入一张1024×1024的图像,DeepEncoder 会将其分割为 1024/16×1024/16=4096 个patch token
——
由于编码器的前半部分以窗口注意力为主,参数量仅为8000万,因此激活开销可以接受
在进入全局注意力前,4096个Token经过压缩模块后,Token数量变为4096/16=256,从而使整体激活内存得以控制
1.2.1.2 多分辨率支持
假设有一张包含1000个视觉字符的图像,并希望测试解码所需的视觉token数量。这就要求模型能够支持可变数量的视觉token
换言之,DeepEncoder需要支持多种分辨率。作者通过对位置编码的动态插值来满足前述需求,并为模型的同步训练设计了多种分辨率模式,从而实现了单一 DeepSeek-OCR 模型支持多种分辨率的能力
如图 4 所示,DeepEncoder 主要支持两种主要的输入模式(且每种模式又包含多个子模式):

- 原生分辨率
原生分辨率支持四种子模式:Tiny、Small、Base 和 Large,分别对应的分辨率和token数量为:512×512(64)、640×640(100)、1024×1024(256)和1280×1280(400)
————
由于 Tiny 和 Small 模式分辨率较小,为了避免视觉token的浪费,图像直接按原始形状缩放处理
而对于 Base 和 Large 模式,为了保持原图纵横比,图像会被填充至相应的尺寸
填充后,有效视觉token数量将少于实际视觉token数量,其计算公式如下
其中和
分别表示原始输入图像的宽度和高度
- 动态分辨率Dynamic resolution
动态分辨率可以由两种原生分辨率组成。例如,Gundam 模式由n 个640 × 640 的切片(局部视角)和一个1024 × 1024 的全局视角组成
切片方法遵循InternVL2.0 [8]。支持动态分辨率主要是出于应用层面的考虑,特别是针对超高分辨率输入(如报纸图片)。切片是一种次级窗口注意力,能够进一步有效减少激活内存
————
值得注意的是,由于原生分辨率较大,在动态分辨率模式下图片不会被切得过碎(切片数量控制在2 到9 之间)
在Gundam 模式下,DeepEncoder 输出的视觉token 数量为:n × 100 + 256,其中n 为切片数量。对于宽和高均小于640 的图片,n 设为0,即Gundam 模式会退化为Base 模式
Gundam 模式与四种原生分辨率模式一同训练,以实现一个模型支持多种分辨率的目标。需要注意的是,Gundam-master 模式(1024×1024 局部视图 + 1280×1280 全局视图)是在已经训练好的 DeepSeek-OCR 模型上继续训练而得的
这样做主要是为了负载均衡,因为 Gundam-master 的分辨率过高,如果与其他模式一同训练,会导致整体训练速度变慢
1.2.2 MoE 解码器
解码器采用了 DeepSeekMoE [19,20],具体为 DeepSeek-3B-MoE
在推理过程中,模型会激活 64 个路由专家中的 6 个和 2 个共享专家,总计约 5.7 亿个参数被激活。3B 规模的DeepSeekMoE 非常适合以特定领域(比如OCR)为核心的视觉语言模型(VLM)研究,因为它在获得 30 亿参数模型表达能力的同时,还兼具 5 亿参数小模型的推理效率
解码器根据 DeepEncoder 压缩后的潜在视觉token重建原始文本表示如下:
其中
是来自DeepEncoder 的压缩潜在(视觉)token
是重建的文本表示
- 函数
表示一种可以通过OCR 风格训练由紧凑型语言模型有效学习的非线性映射
合理的推测是,LLMs 通过专门的预训练优化,将展现出对这种能力更自然的整合
1.3 数据引擎
作者为DeepSeek-OCR构建了复杂且多样化的训练数据集,包括
- OCR 1.0数据,主要涵盖场景图像OCR和文档OCR等传统OCR任务
- OCR 2.0数据,主要包含复杂人工图像的解析任务,如常见图表、化学式以及平面几何解析数据
- 通用视觉数据,主要用于为DeepSeek-OCR注入一定的通用图像理解能力,并保留其通用视觉接口
1.3.1 OCR 1.0 数据
首先,文档数据是 DeepSeek-OCR 的首要任务。作者团队从互联网上收集了 3000 万页多样化的 PDF数据,涵盖大约 100 种语言,其中中文和英文约为 2500 万页,其他语言约为 500 万页
针对这些数据,他们建立了两种类型的真实标签:粗标注和细标注
- 粗标注是直接利用fitz从完整数据集中获取,旨在训练模型识别视觉文本,特别是少数民族语言
- 精细标注包括中文和英文各200万页,采用先进的版面模型(如PP-DocLayout[33])和OCR模型(如MinuerU [34]及GOT-OCR2.0 [38])完成标注,从而构建检测与识别交替的数据
对于少数民族语言,在检测环节作者发现版面模型具有一定的泛化能力;在识别环节,使用fitz创建小块数据集来训练GOT-OCR2.0,随后用训练好的模型对版面处理后的小块进行标注,采用模型飞轮机制扩展生成60万数据样本
在DeepSeek-OCR模型训练过程中,粗标注与精细标注通过不同的提示词加以区分。精细标注图文对的真实标签可参见图5「OCR 1.0精细标注展示。作者将真实值格式化为交错布局和文本格式,每段文本前都附有其在原始图像中的坐标与标签。所有坐标均被归一化为1000个区间」

- 且作者还收集了300万Word数据,直接提取内容用于构建无需版式的高质量图文对,这部分数据主要提升了公式和HTML格式表格的识别效果
- 此外,他们还选择了一些开源数据 [28,37] 作为补充
其次,针对自然场景OCR,作者的模型主要支持中文和英文
图像数据来源于LAION [31]和悟空[13],并通过PaddleOCR [9]进行标注,每种语言的数据量均为一千万条。与文档OCR类似,自然场景OCR也可以通过提示词控制是否输出检测框
1.3.2 OCR 2.0 数据
// 待更
1.4 训练流程
// 待更
