DeepSeek-OCR: Contexts Optical Compression 详解
TL;DR
- 2025 年 Deepseek 团队提出的 DeepSeek-OCR 算法,文本 token 的数量在视觉 token 的 10 倍以内(即压缩率 < 10×)时,DeepSeek-OCR 可实现 97% 的解码(OCR)精度;即使在 20× 压缩率下,OCR 准确率仍可保持在约 60%。这为诸如历史长上下文压缩、LLM 记忆遗忘机制等研究方向展现出相当可观的潜力。
Paper name
DeepSeek-OCR: Contexts Optical Compression
Paper Reading Note
Paper URL:
- https://github.com/deepseek-ai/DeepSeek-OCR/blob/main/DeepSeek_OCR_paper.pdf
Project URL:
- https://huggingface.co/deepseek-ai/DeepSeek-OCR
Code URL:
- https://github.com/deepseek-ai/DeepSeek-OCR
Introduction
背景
-
当前的大型语言模型(LLMs)在处理长文本时面临显著的计算挑战,其开销随序列长度呈二次增长。本文探索一种潜在的解决方案:将视觉模态作为高效的文本信息压缩媒介。
- 单张包含文档文本的图像,能够用显著更少的 token 表达丰富信息,相比等量的数字文本更为紧凑;这表明,通过视觉 token 进行光学压缩有望实现更高的压缩比。
- 本文关注视觉编码器如何提升 LLM 在处理文本信息时的效率,而非人类本就擅长的基础 VQA 任务
-
当前主流 VLM 视觉编码器的问题
- 第一类是以 Vary 为代表的双塔(dual-tower)架构,通过并行的 SAM 编码器来提升高分辨率图像处理时的视觉词表参数规模。该方法虽然在参数量与激活内存上更可控,但也存在显著缺点:需要对图像进行两套预处理,增加了部署复杂度;同时在训练中使编码器管线的并行化变得困难。第二类是以 InternVL2.0 [8] 为代表的切片(tile-based)方法,通过将图像划分为小块并行处理,在高分辨率场景下降低激活内存。尽管这种方法能够处理极高分辨率,但由于其原生编码器分辨率通常较低(低于 512×512),会导致大图被过度切分,产生大量视觉 token。第三类是以 Qwen2-VL 为代表的自适应分辨率编码,采用 NaViT 范式,在不进行切片并行的情况下,直接以补丁(patch)分割方式处理整幅图像。该编码器可灵活应对多种分辨率,但在处理大图时面临巨大的激活内存开销(可能引发 GPU 显存溢出),且在训练中的序列打包需要极长的序列长度。过长的视觉 token 序列会同时拖慢推理阶段的 prefill 与 generation。

- 第一类是以 Vary 为代表的双塔(dual-tower)架构,通过并行的 SAM 编码器来提升高分辨率图像处理时的视觉词表参数规模。该方法虽然在参数量与激活内存上更可控,但也存在显著缺点:需要对图像进行两套预处理,增加了部署复杂度;同时在训练中使编码器管线的并行化变得困难。第二类是以 InternVL2.0 [8] 为代表的切片(tile-based)方法,通过将图像划分为小块并行处理,在高分辨率场景下降低激活内存。尽管这种方法能够处理极高分辨率,但由于其原生编码器分辨率通常较低(低于 512×512),会导致大图被过度切分,产生大量视觉 token。第三类是以 Qwen2-VL 为代表的自适应分辨率编码,采用 NaViT 范式,在不进行切片并行的情况下,直接以补丁(patch)分割方式处理整幅图像。该编码器可灵活应对多种分辨率,但在处理大图时面临巨大的激活内存开销(可能引发 GPU 显存溢出),且在训练中的序列打包需要极长的序列长度。过长的视觉 token 序列会同时拖慢推理阶段的 prefill 与 generation。
本文方案
-
DeepSeek-OCR 由两个组件构成:DeepEncoder 和作为解码器的 DeepSeek3B-MoE-A570M。具体而言,DeepEncoder 作为核心引擎,被设计为在高分辨率输入下保持较低的激活量,同时实现较高的压缩率,从而确保视觉 token 的数量既最优又可控。
- DeepEncoder 通过 16× 卷积压缩器将窗口注意力与全局注意力编码组件串联
-
当文本 token 的数量在视觉 token 的 10 倍以内(即压缩率 < 10×)时,模型可实现 97% 的解码(OCR)精度;即使在 20× 压缩率下,OCR 准确率仍可保持在约 60%。这为诸如历史长上下文压缩、LLM 记忆遗忘机制等研究方向展现出相当可观的潜力。
-
在 OmniDocBench 的端到端模型中以最少的视觉 token达到SOTA水平。此外,我们还为模型赋予图表、化学式、简单几何图形与自然图像的解析能力,以进一步增强其实用性。在生产中,使用 20 个节点(每个 8× A100-40G),DeepSeek-OCR 每日可为 LLM/VLM 生成 3300 万页数据。

Methods
DeepSeek-OCR 架构

如图 3 所示,DeepSeek-OCR 采用统一的端到端 VLM 架构,由编码器与解码器组成。编码器(即 DeepEncoder)负责提取图像特征、将视觉表征离散化为 token 并进行压缩;解码器则基于图像 token 与提示(prompt)生成所需结果。
DeepEncoder 约 3.8 亿 参数,主要由 80M 的 SAM-base 与 3 亿参数的 CLIP-large 串联构成。解码器采用 3B MoE 架构,推理时激活参数约 5.7 亿。下面将分别介绍模型组件、数据工程与训练技巧。
DeepEncoder
为探索“光学方式压缩上下文”的可行性,我们需要具备如下特性的视觉编码器:
1)可处理高分辨率;2)在高分辨率下激活开销低;3)视觉 token 数量少;4)支持多分辨率输入;5)参数规模适中。现有开源编码器难以同时满足以上条件。为此,我们设计了全新的视觉编码器 DeepEncoder。
DeepEncoder 的架构
DeepEncoder 主要由两部分组成:
- 以窗口注意力(window attention)为主的视觉感知特征提取组件;
- 以稠密全局注意力(dense global attention)为主的视觉知识特征提取组件。
为继承既有预训练收益,我们分别采用 SAM-base(patch 大小 16) 与 CLIP-large 作为两部分的主干架构。对于 CLIP,由于其输入不再是原始图像而是上一阶段输出的 token,我们移除了第一层 patch embedding。在两组件之间,我们借鉴 Vary [36],使用 2 层卷积模块对视觉 token 做 16× 下采样:每层卷积核大小 3、步幅 2、填充 1,通道数由 256 增至 1024。
例如,若输入一张 1024×1024 的图像,DeepEncoder 会将其切分为 1024/16 × 1024/16 = 4096 个 patch token。由于编码器前半部分以窗口注意力为主且仅 80M 参数,激活量可接受;在进入全局注意力前,4096 个 token 经过压缩模块变为 4096/16 = 256,从而使整体激活内存保持可控。
多分辨率支持
设有一幅包含 1000 个光学字符的图像,我们希望测试解码所需的最少视觉 token。这要求模型支持可变数量的视觉 token,即 DeepEncoder 必须支持多分辨率。我们通过位置编码的动态插值来满足这一需求,并设计了若干分辨率模式进行混合训练,使单个 DeepSeek-OCR 模型具备多分辨率能力。

如图 4 所示,DeepEncoder 主要支持两大输入模式:原生分辨率(native resolution)与动态分辨率(dynamic resolution),各自包含多个子模式。
-
原生分辨率含四个子模式:Tiny、Small、Base、Large,其分辨率与 token 数分别为
-
512×512(64),
-
640×640(100),
-
1024×1024(256),
-
1280×1280(400)。
由于 Tiny 与 Small 分辨率较小,为避免浪费视觉 token,直接按原图比例缩放;而 Base 与 Large 为了尽量保留原始长宽比,对图像进行填充(padding)至对应尺寸。填充后有效视觉 token少于名义 token,计算公式为:N valid = ⌈ N actual × [ 1 − max ( w , h ) − min ( w , h ) max ( w , h ) ] ⌉ (1) N_{\text{valid}} = \left\lceil N_{\text{actual}} \times \left[1 - \frac{\max(w,h)-\min(w,h)}{\max(w,h)}\right] \right\rceil \tag{1} Nvalid=⌈Nactual×[1−max(w,h)max(w,h)−min(w,h)]⌉(1)
其中 (w,h) 为原始输入图像的宽与高。
-
-
动态分辨率可由两种原生分辨率组合而成。例:Gundam 模式由 n × 640 × 640 n \times 640\times 640 n×640×640 的局部视图(tiles)与 1024×1024 的全局视图组成,切片方法参考 InternVL2.0。支持动态分辨率主要出于应用层面考虑,尤其面向超高分辨率输入(如报纸版面)。切片相当于一种二次窗口注意力,能进一步降低激活内存。需注意:由于我们原生分辨率较大,在动态分辨率下图像不会被过度切碎(tile 数控制在 2–9)。
在 Gundam 模式下,DeepEncoder 的视觉 token 数为: n × 100 + 256 n \times 100 + 256 n×100+256,其中 (n) 为 tile 数。若图像的宽与高均小于 640,则设 (n=0),即 Gundam 退化为 Base 模式。Gundam 与四种原生模式联合训练,实现一模多能的目标。
Gundam-master 模式(1024×1024 局部视图 + 1280×1280 全局视图)则在已训练完成的 DeepSeek-OCR 上继续训练得到,主要是出于负载均衡考虑:其分辨率过大,若与其他模式同时训练将拖慢整体训练速度。

MoE 解码器
我们的解码器采用 DeepSeekMoE,具体为 DeepSeek-3B-MoE。推理阶段,模型在 64 个路由专家中激活 6 个,外加 2 个共享专家,合计约 5.7 亿 激活参数。3B DeepSeekMoE 非常适合以特定领域为中心(本文为 OCR)的 VLM 研究:它具备 3B 模型的表达能力,同时享有约 5 亿参数小模型的推理效率。
解码器从 DeepEncoder 压缩后的潜在视觉 token 重构原始文本表征:
f dec : R n × d latent → R N × d text ; X ^ = f dec ( Z ) , 其中 n ≤ N (2) f_{\text{dec}}:\ \mathbb{R}^{n \times d_{\text{latent}}}\ \rightarrow\ \mathbb{R}^{N \times d_{\text{text}}};\ \ \hat{X}=f_{\text{dec}}(Z),\ \text{其中 } n \le N \tag{2} fdec: Rn×dlatent → RN×dtext; X^=fdec(Z), 其中 n≤N(2)
其中 Z ∈ R n × d latent Z \in \mathbb{R}^{n \times d_{\text{latent}}} Z∈Rn×dlatent 为 DeepEncoder 的压缩潜在(视觉)token, X ^ ∈ R N × d text \hat{X} \in \mathbb{R}^{N \times d_{\text{text}}} X^∈RN×dtext 为重构后的文本表征。函数 f dec f_{\text{dec}} fdec 表示一个非线性映射,可通过 OCR 风格训练被紧凑型语言模型有效学习。合理推测,若进行定制化的预训练优化,LLM 将能更自然地整合此类能力。
数据引擎(Data Engine)
我们为 DeepSeek-OCR 构建了复杂而多样的训练数据,包括:OCR 1.0 数据(以传统 OCR 任务为主,如场景图像 OCR 和文档 OCR);OCR 2.0 数据(以复杂人工图像的解析任务为主,如常见图表、化学式、平面几何解析数据);以及通用视觉数据(主要用于为 DeepSeek-OCR 注入一定的通用图像理解能力,并保留通用视觉接口)。
OCR 1.0 数据
文档数据是 DeepSeek-OCR 的重中之重。我们从互联网收集了 3000 万页涵盖约 100 种语言的多样化 PDF 数据,其中中文与英文约 2500 万页,其他语言约 500 万页。针对这批数据,我们构建了两类真值(ground truth):粗标注与细标注。
-
粗标注:使用 fitz 直接从完整数据集中抽取,目标是教会模型识别光学文本,尤其是小语种。
-
细标注:包含中文与英文各 200 万页,利用先进的版面模型(如 PP-DocLayout [33])与 OCR 模型(如 MinerU [34]、GOT-OCR2.0 [38])生成检测—识别交错的数据。
对小语种而言,在检测部分我们发现版面模型具有一定的泛化能力;在识别部分,我们用 fitz 制作小块(patch)数据来训练一个 GOT-OCR2.0,随后在布局处理后用该模型为小块打标,通过“模型飞轮”共生产 60 万条数据样本。训练 DeepSeek-OCR 时,通过不同的**提示词(prompts)**区分粗标与细标。细标图文对的真值示例如图 5。

此外,我们还收集了 300 万份 Word 数据,通过直接抽取内容构建无版面的高质量图文对,这类数据主要有利于公式与 HTML 表格。并选取部分开源数据 [28, 37] 作为补充。
对于自然场景 OCR,模型主要支持中英双语。图像来源于 LAION [31] 与 Wukong [13],使用 PaddleOCR [9] 进行标注,中英各 1000 万条。与文档 OCR 类似,自然场景 OCR 也可通过提示词控制是否输出检测框。
OCR 2.0 数据
沿用 GOT-OCR2.0 [38] 的定义,我们将图表、化学式、平面几何解析数据统称为 OCR 2.0 数据。
-
图表数据:参考 OneChart [7],使用 pyecharts 与 matplotlib 渲染 1000 万张图,主要涵盖折线、柱状、饼图与复合图。我们将图表解析定义为图像 → HTML 表格的转换任务(见图 6(a))。

-
化学式数据:从 PubChem 获取 SMILES 文本,用 RDKit 渲染为图像,构建 500 万对图文样本。
-
平面几何数据:参考 Slow Perception [39] 生成。具体而言,以感知标尺大小为 4 对线段建模。为增强渲染多样性,我们引入几何平移不变的数据增强:将同一几何图在原图中平移,对应于在坐标系中心位置绘制的相同真值。基于此共构建 100 万条平面几何解析数据(见图 6(b))。
通用视觉数据
DeepEncoder 能继承 CLIP 的预训练收益,且参数量足以容纳通用视觉知识。因此我们也为 DeepSeek-OCR 准备了相应的通用视觉数据。参考 DeepSeek-VL2 [40],我们生成用于图像字幕(caption)、检测(detection)、指向/定位(grounding)等任务的数据。需注意,DeepSeek-OCR 不是通用 VLM,这部分数据只占总量的 20%。加入这类数据主要是为了保留通用视觉接口,方便对本模型与通用视觉任务感兴趣的研究者在未来继续推进相关工作。
纯文本数据
为确保模型的语言能力,我们引入了 10% 的内部纯文本预训练数据,所有样本均处理为 8192 tokens(这也是 DeepSeek-OCR 的序列长度)。
总结:训练 DeepSeek-OCR 时,数据配比为:OCR 数据 70%、通用视觉数据 20%、纯文本数据 10%。
训练流程(Training Pipelines)
我们的训练流程非常简洁,主要包含两个阶段:
a) 单独训练 DeepEncoder;
b) 训练 DeepSeek-OCR。
需要说明的是,Gundam-master 模式是基于已训练好的 DeepSeek-OCR 模型,使用 600 万条采样数据继续训练得到的。由于其训练协议与其他模式相同,后文不再赘述。
训练 DeepEncoder
参考 Vary [36],我们采用一个小型语言模型 [15],并使用下一词预测框架训练 DeepEncoder。在该阶段,我们使用上述全部 OCR 1.0 与 2.0 数据,以及从 LAION [31] 采样的 1 亿条通用数据。所有数据训练 2 个 epoch,批量大小 1280,优化器为 AdamW [23],余弦退火调度器 [22],学习率 5e-5,训练序列长度 4096。
训练 DeepSeek-OCR
当 DeepEncoder 就绪后,我们使用第 3.4 节的数据在 HAI-LLM 平台 [14] 上训练 DeepSeek-OCR。
整个模型使用流水线并行(PP),分为 4 段:DeepEncoder 占 2 段,解码器占 2 段。
- 对于 DeepEncoder:将 SAM 与压缩器视为视觉分词器(vision tokenizer),放在 PP0 并冻结参数;将 CLIP 部分视为输入嵌入层,放在 PP1 并解冻进行训练。
- 对于语言模型:DeepSeek3B-MoE 共 12 层,在 PP2 与 PP3 各放 6 层。
我们使用 20 个节点(每个节点 8× A100-40G)进行训练,数据并行(DP)= 40,全局 batch size = 640。优化器为 AdamW,**分步(step-based)**学习率调度器,初始学习率 3e-5。
- 仅纯文本数据时,训练速度约 900 亿 tokens/天;
- 多模态数据时,训练速度约 700 亿 tokens/天。
Experiments
视觉-文本压缩研究
为验证 DeepSeek-OCR 在富文本文档上的压缩-解压能力,并初步探索“上下文光学压缩”的可行性与边界,我们选用 Fox 基准 [21]。具体做法是:用 DeepSeek-OCR 的分词器(词表约 129k)对英文文档部分的真值文本进行分词,挑选 600–1300 个 token 的文档用于测试(恰好为 100 页)。由于文本 token 数不大,我们只需在 Tiny 和 Small 两种模式下测试:Tiny 对应 64 个视觉 token,Small 对应 100 个视觉 token。我们使用无版面提示词控制输出格式:
<image>
Free OCR.
尽管如此,输出格式仍无法与 Fox 基准完全一致,因此实际性能会略高于测试结果。表 2 显示,在10× 压缩比以内,模型的解码精度可达约 97%,这一结果非常有前景。未来有望通过“文本→图像”的方式实现近 10× 的无损上下文压缩。

当压缩比超过 10×时,性能开始下降,可能原因有二:其一,长文档的版面更复杂;其二,512×512 或 640×640 分辨率下长文本会变“模糊”。第一个问题可通过将文本渲染到单一布局页面来缓解;而第二个问题我们认为可视为遗忘机制的一种特性。当接近 20× 压缩时,精度仍可逼近 60%。这些结果表明,光学上下文压缩是非常有前景且值得投入的研究方向;而且该路径不增加额外开销——多模态系统本就配备视觉编码器,可直接复用 VLM 基础设施。
OCR 实用性能
DeepSeek-OCR 不仅是实验模型,同时具备强实用性,可用于为 LLM/VLM 预训练构建数据。为量化 OCR 性能,我们在 OmniDocBench [27] 上测试 DeepSeek-OCR(结果见表 3)。

- 仅用 100 个视觉 token(640×640 分辨率),DeepSeek-OCR 即超越使用 256 个 token 的 GOT-OCR2.0 [38];
- 使用 400 个 token(有效 token 285,1280×1280 分辨率),其性能与该基准上的最新 SOTA大致持平;
- 在 Gundam 模式下用不到 800 个 token,DeepSeek-OCR 的表现优于 MinerU2.0 [34](后者需要近 7000 个视觉 token)。
这说明我们的模型在实际应用中非常强大;并且由于更高的 token 压缩率,也拥有更高的研究上限。如表 4 所示,某些文档类别所需 token 极少即可达到满意效果:比如幻灯片仅需 64 个视觉 token;图书与报告用 100 个视觉 token 即可获得良好表现。结合 4.1 节的分析,这可能是因为这些类别的文本 token 多在 1000 以内,对应的视觉-文本压缩比不超过 10×。而对于报纸,则需要 Gundam 甚至 Gundam-master 模式才能获得可接受的编辑距离,因为报纸的文本 token 通常在 4000–5000,远超其他模式可承受的 10× 压缩。上述实验进一步展示了上下文光学压缩的边界,可为 VLM 视觉 token 优化、LLM 上下文压缩与遗忘机制研究提供有效参考。
4.3 定性研究
4.3.1 深层解析(Deep parsing)
DeepSeek-OCR 兼具版面能力与 OCR 2.0 能力,可通过二次模型调用对文档中的图像进行更深入的解析,我们称之为“深层解析”。如图所示,模型可在统一提示词下,对图表、几何、化学式,乃至自然图像执行深层解析。



多语种识别
互联网 PDF 数据中不仅包含中英文,还有大量多语种内容,这对训练 LLM 同样关键。对于 PDF 文档,DeepSeek-OCR 可处理近 100 种语言。与中英文文档类似,多语种数据同样支持带版面与不带版面两种 OCR 输出格式。可视化结果见图 11,我们展示了阿拉伯语与 **僧伽罗语(Sinhala)**的识别示例。

通用视觉理解
同时具备一定通用视觉理解和处理能力

讨论(Discussion)
我们的工作是对视觉-文本压缩边界的初步探索,旨在研究解码 (N) 个文本 token 所需的最小视觉 token 数量。初步结果令人鼓舞:DeepSeek-OCR 在约 10× 压缩比下即可实现近乎无损的 OCR 压缩,而在 20× 压缩下仍能保持 60% 的准确率。这些发现为未来的多种应用提供了启示方向。例如,在多轮对话中,可以对早于第 (k) 轮的对话历史进行光学处理,实现约 10× 的压缩效率;而对于更久远的上下文,可通过逐步缩小渲染图像尺寸来进一步减少 token 消耗。

这一假设受到人类记忆随时间衰退与视觉感知随距离衰减之间自然类比的启发——两者都呈现出渐进性的信息损失模式(如图 13 所示)。结合这两种机制,上下文光学压缩方法可实现一种类似生物遗忘曲线的“记忆衰减”:近期信息保持高保真度,而远期记忆则通过更高压缩比自然淡化。
虽然我们的初步探索展示了可扩展超长上下文处理的潜力——即近期上下文保持高分辨率,而旧上下文占用更少计算资源——但我们也承认,这仍是早期阶段工作,需要进一步研究验证。该方法为实现理论上无限上下文架构提供了新思路:在信息保留与计算约束之间取得平衡。然而,这类视觉-文本压缩系统的实际可行性与局限性仍有待未来深入研究。
6. 结论(Conclusion)
在本技术报告中,我们提出了 DeepSeek-OCR,并通过该模型初步验证了“上下文光学压缩”的可行性,证明少量视觉 token 就能有效解码多达其 10 倍以上数量的文本 token。我们相信这一发现将推动未来 VLM 与 LLM 的发展。
此外,DeepSeek-OCR 还是一个高度实用的模型,能够进行大规模预训练数据生产,可作为 LLM 的重要辅助工具。
当然,仅靠 OCR 还不足以全面验证真正的上下文光学压缩。我们计划在后续工作中开展数字-光学文本交织预训练、needle-in-a-haystack(针堆检索)测试等进一步实验。
从更宏观的角度看,光学上下文压缩仍拥有巨大的研究与改进空间,代表了一个极具潜力的全新研究方向。
Conclusion
- 本文虽然主要是做 ocr 工作,不过将 text 渲染为图片进行压缩的方式还是挺有意思的。Deepseek-OCR 发布当天智谱也发布了一篇类似的工作 Glyph,思路也很类似,说明这个方向应该是有一些潜力且已经受到了一部分关注了。
- 不过基于图片压缩文本的无损性还是值得进一步探讨,比如这里是否可能是 llm decoder 提供了较多的语言先验才补充了大量的丢失信息,以及 97% 的准确率要到 100% 肯定还有非常长的路要走。这里论文作者也有一定认识,比如在论文里也提到了后续会补充 needle-in-a-haystack 等实验
