DeepSeek-OCR深度解析(超详细)从光学压缩到代码实现,一篇就够了!
0. 前言。
DeepSeek-OCR提出创新的"光学压缩"范式,将长文本转为图像,通过DeepEncoder将高分辨率文档压缩为少量视觉Token,再由MoE解码器还原为文本。这种方法显著降低处理长序列计算复杂度,实验证明10倍压缩率下仍保持97%的OCR精度,为解决大模型长上下文问题提供全新思路。
DeepSeek-OCR的介绍文章已经很多了,本文深入探讨DeepSeek-OCR的具体原理细节,包括整个模型包含哪些部分,每一部分的输入输出的具体是什么,shape是什么,每一部分的输入输出是如何连接起来的,最后对于方法中的超参数是如何设置的。
0. 前言
DeepSeek-OCR 将长文本上下文变成成图片,从而压缩输入大模型输入token长度,以解决大语言模型(LLM)处理长序列时面临的计算挑战。
整体而言,这篇论文的核心贡献在于提出并初步验证了“光学压缩”这一概念的可行性,并设计了一个名为 DeepSeek-OCR 的视觉语言模型(VLM)作为概念验证。它通过一个创新的编码器 DeepEncoder,能够用远少于文本Token数量的视觉Token来高效地表示一篇文档图像,并由一个解码器精准地将其还原为文字,从而实现高压缩率下的信息处理。
1. 论文核心思想:上下文光学压缩 (Contexts Optical Compression)
当前LLM处理长文本时,其核心瓶颈在于Transformer架构中自注意力机制的计算复杂度会随着序列长度N呈 O(N²) 的平方级增长。这使得处理成千上万甚至更长的文本序列变得非常昂贵和缓慢。
作者反其道而行之,提出了一个新颖的思路:我们能否不直接处理一维的文本Token序列,而是先将文本渲染成一张二维的图像,然后让VLM来“读取”这张图像?
这个想法的直觉来源是,一张包含丰富文本信息的文档图像,可以用相对较少的视觉Token(Vision Tokens)来表示,而这些文本如果转换成数字文本Token(Text Tokens),数量会庞大得多。例如,一张A4纸的文档图像可能只需要几百个视觉Token就能捕捉其全貌,而其上的文字可能对应着数千个文本Token。这个从“大量文本Token”到“少量视觉Token”的转换过程,就是论文所谓的“光学压缩”。而从“少量视觉Token”还原出文字的过程,则可以看作是“解压缩”,这本质上就是一个OCR(光学字符识别)任务。

原论文图3:DeepSeek-OCR 整体架构图,清晰地展示了从图像输入到文本输出的完整流程。
2. 方法整体架构 (Overall Architecture)
DeepSeek-OCR遵循一个统一的端到端Encoder-Decoder架构,由两大核心组件构成(如原论文图3所示):
- DeepEncoder (编码器): 这是实现光学压缩的核心引擎。它的职责是接收高分辨率的文档图像,提取其特征,并将其转换(压缩)成数量可控的、高质量的视觉Token。
- DeepSeek-3B-MoE (解码器): 这是一个30亿参数的混合专家模型(Mixture-of-Experts)。它接收由DeepEncoder产生的视觉Token和用户的文本指令(Prompt),并根据这些信息生成最终的文本结果(例如,OCR识别出的全文)。
整个工作流程可以概括为:图像 -> DeepEncoder -> 视觉Token -> DeepSeek-3B-MoE 解码器 -> 输出文本
3. 各模块方法细节与代码实现解析
源码链接地址
- deepencoder.py
- modeling_deepseekocr.py
现在我们来深入剖析每个模块的设计细节,并结合代码进行讲解。
3.1 DeepEncoder:一个为压缩而生的视觉编码器
DeepEncoder的设计目标非常明确:处理高分辨率输入、保持低激活内存、产生少量视觉Token。为了实现这一目标,它精巧地串联了三个关键部分。
输入与维度:
- 输入: 一张高分辨率图像,例如
1024x1024像素。PyTorch张量维度为[B, C, H, W],即[1, 3, 1024, 1024]。
架构组件:
- SAM-base (视觉感知与局部特征提取)
-
[1, 3, 1024, 1024](输入图像) -
-> PatchEmbed ->``[1, 64, 64, 768](Patch嵌入) -
-> Transformer Blocks ->``[1, 64, 64, 768](特征图) -
-> Neck ->``[1, 256, 64, 64]->...-> 最终输出[1, 1024, 16, 16]的特征图。 -
通过
build_sam_vit_b()函数构建ImageEncoderViT模型。 -
该模型接收图像输入后,首先通过
PatchEmbed模块将图像分割成16x16的图块(Patches),并嵌入到高维空间。对于1024x1024的输入,会得到64x64个patches。 -
接着,这些patches会经过一系列的
Block(Transformer层)。这些Block在forward函数中,通过判断self.window_size > 0来决定是使用窗口注意力还是全局注意力。SAM的设计中,大部分层使用窗口注意力,少数层使用全局注意力,从而平衡了局部信息和全局信息的捕获。 -
功能描述: 使用SAM (Segment Anything Model) 的ViT部分(ViTDet),一个约80M参数的模型,作为特征提取的起点。SAM的ViT主干采用了窗口注意力(Window Attention),这使得它在处理高分辨率图像时能有效控制计算量和内存占用,非常适合提取局部细节特征。
-
代码实现 (
deepencoder.py): -
维度变化:
- 16x Token Compressor (卷积压缩器)
- 功能描述: 在SAM和CLIP之间,有一个16倍的卷积压缩器。它是一个简单的2层卷积网络,负责对SAM输出的视觉Token进行降采样,大幅减少Token数量,这是实现高压缩率的关键一步。
- 代码实现: 论文中提到的这个独立压缩器在您提供的
modeling_deepseekocr.py的forward函数中并未直接体现为一个独立的nn.Module。其功能更像是被整合进了SAM编码器的末端(如ImageEncoderViT中的neck和net_2,net_3卷积层)以及后续与CLIP的交互中。SAM输出的特征图[1, 1024, 16, 16]实际上已经经过了从64x64到16x16的下采样,实现了16倍的压缩((6464)/(1616) = 16)。
- CLIP-large (视觉知识与全局特征提取)
-
输入为
[1, 1024, 16, 16]的特征图,经过CLIP的patch_embedding(这里是卷积层)和Transformer层处理。 -
通过
build_clip_l()构建VitModel。这是一个标准的ViT模型。 -
在
DeepseekOCRModel的forward方法中,vision_model(patches, local_features_1)表明,SAM输出的特征 (local_features_1) 被送入CLIP模型 (vision_model) 进行处理。这是一种串行处理流程,符合图3的描述。 -
功能描述: 使用CLIP的ViT-L模型(约300M参数)作为第二级编码器。CLIP经过海量图文对预训练,拥有强大的视觉概念理解和知识。它采用全局注意力(Dense Global Attention),适合对压缩后的Token进行深度整合,提取全局和语义层面的信息。
-
代码实现 (
deepencoder.py&modeling_deepseekocr.py): -
维度变化:
- 特征融合与投影 (Projector)
-
local_features = torch.cat((global_features_2[:, 1:], local_features_1.flatten(2).permute(0, 2, 1)), dim=-1): 这行代码展示了特征的融合方式。global_features_2是CLIP的输出,local_features_1是SAM的输出。它们被拼接在一起。 -
local_features = self.projector(local_features): 融合后的特征被送入一个MlpProjector,它通常是一个简单的多层感知机(MLP),将特征维度从CLIP/SAM的维度(例如2048)投影到解码器LLM的隐藏层维度(例如2560)。 -
功能描述: 将SAM和CLIP的特征进行融合,并通过一个投影层(Projector)映射到与语言模型相同的维度空间。
-
代码实现 (
modeling_deepseekocr.py): -
输出: 最终生成
[1, n, d_model]的视觉Token序列,其中n是压缩后的视觉Token数量,d_model是LLM的嵌入维度。
3.2 MoE 解码器
- 论文描述: 采用 DeepSeek-3B-MoE 模型。MoE架构的优势在于它可以用更少的计算量(只激活一小部分专家网络)获得与更大密集模型相当的性能,非常适合作为高效的解码器。
- 公式解析:这个公式优美地总结了解压缩过程:
- 输入: ,代表
n个维度为d_latent的视觉Token(压缩后的隐空间表示)。 - 输出: ,代表解码出的
N个维度为d_text的文本Token。 - 核心在于
n << N,即用少量的视觉Token生成大量的文本Token。
3.3 多分辨率支持 (Multi-resolution Support)
为了在不同场景下平衡性能和效率,DeepSeek-OCR支持多种图像输入模式。

原论文图4:不同分辨率的输入图片处理示例

原论文表1:多分辨率超参数设置
- 论文描述 (原论文图4 & 原论文表1):
- Native Resolution (原生分辨率): 包括
Tiny(512, 64 tokens),Small(640, 100 tokens),Base(1024, 256 tokens),Large(1280, 400 tokens)。对于小尺寸模式,图像直接缩放;对于大尺寸模式,图像会被填充(padding)到指定尺寸以保持长宽比。 - Dynamic Resolution (动态分辨率):
Gundam模式。它将超高分辨率图像(如报纸)切成n个640x640的小图块(局部视图),外加一个1024x1024的全局视图。这种“分而治之”的策略借鉴自 InternVL 2.0,能处理任意大的图像。
- 代码实现 (
modeling_deepseekocr.py):
dynamic_preprocess函数实现了Gundam模式的切图逻辑。它会计算最适合当前图像长宽比的切图网格(例如3x2),然后将图像缩放并切割成对应数量的图块。ImageOps.pad在代码中用于实现Base和Large模式下的填充操作,确保图像内容不因拉伸而变形。
4. 论文创新点 (Innovations)
- 提出“光学压缩”新范式: 这是本文最大的贡献。它为解决LLM长上下文问题提供了一个全新的、极具想象力的视角,将文本序列长度的挑战转化为一个VLM的视觉理解问题。
- 精心设计的DeepEncoder架构: 专门为“光学压缩”任务设计的SAM+Compressor+CLIP串行架构,兼顾了局部细节(窗口注意力)、全局知识(全局注意力)和高压缩率(卷积压缩),是一个有效的工程实现。
- SOTA性能与极致效率: 实验证明,该模型在显著减少视觉Token(比主流模型少一个数量级)的情况下,依然能在文档理解基准测试中达到顶尖水平,为VLM的效率优化树立了新的标杆。
5. 实验设置与结果分析
5.1 实验设置
- 基准测试 (Benchmarks):
- Fox Benchmark: 用于评估模型的压缩与解压能力,即不同压缩率下的OCR精度。
- OmniDocBench: 一个综合性的真实文档解析任务基准,用于评估模型的实际应用性能。
- 核心评价指标:
- 压缩率 (Compression Ratio):
(基准真相文本Token数) / (模型使用的视觉Token数)。 - OCR精度 (Precision): 字符级别的识别准确率。
- 编辑距离 (Edit Distance): 在OmniDocBench中使用,越低越好。
- 超参数设置 (Section 3.5.2):
- 训练硬件: 20个节点,每个节点8张A100-40G GPU。
- 并行策略: 40路数据并行(DP)。
- 批量大小 (Global Batch Size): 640。
- 优化器: AdamW。
- 学习率: 初始学习率为
3e-5,使用阶梯式衰减。 - 训练速度: 多模态数据约70B tokens/天,纯文本数据约90B tokens/天。
5.2 实验结果与分析
1. 压缩能力分析 (Fox Benchmark)

原论文图1(a):压缩率与OCR精度的关系。原论文图1(b):在OmniDocBench上的性能对比。横轴是视觉Token数(越少越好),纵轴是性能(编辑距离,越低越好)。
如上图1(a)和下表2所示,结果非常惊人:
- 在10倍压缩率以内 (
< 10x),模型能达到约 97% 的OCR解码精度,几乎是无损解压。 - 即使在接近20倍的超高压缩率下 (
20x),精度依然能保持在 60% 左右。
这充分证明了光学压缩范式的巨大潜力。对于许多应用场景,近10倍的无损上下文压缩是极具吸引力的。
| 文本Token数 | 视觉Token=64 | 视觉Token=100 |
|---|---|---|
| 精度 / 压缩率 | 精度 / 压缩率 | |
| 600-700 | 96.5% / 10.5x | 98.5% / 6.7x |
| 700-800 | 93.8% / 11.8x | 97.3% / 7.5x |
| 800-900 | 83.8% / 13.2x | 96.8% / 8.5x |
| … | … | … |
| 1200-1300 | 59.1% / 19.7x | 87.1% / 12.6x |
表2:DeepSeek-OCR 在不同文本长度下的压缩表现
2. 实际性能分析 (OmniDocBench)
上图1(b)将DeepSeek-OCR与其他SOTA模型进行了对比,结论一目了然:
- DeepSeek-OCR系列模型位于图的右下角,这是最理想的位置,代表着“用最少的视觉Token,取得了最好的性能”。
- 具体数据 (表3):
- DeepSeek-OCR (Small, 100 tokens) 的性能 (编辑距离0.221) 已经超越了使用256个Token的 GOT-OCR2.0 (0.287)。
- DeepSeek-OCR (Gundam, 795 tokens) 的性能 (0.127) 远超需要近7000个Token的 MinerU2.0 (0.133)。
这些结果有力地证明了DeepSeek-OCR不仅是一个理论模型,更是一个在实际应用中兼具高性能和高效率的强大工具。
6. 论文的缺点与未来展望
尽管这篇论文取得了突破性的成果,但作为一名学者,我们也要辩证地看待其局限性:
- 压缩边界: 实验显示,当压缩率超过10倍后,性能开始明显下降。这可能是由于在较低分辨率下图像模糊导致信息损失,或是复杂文档布局在压缩后难以区分。这指出了光学压缩的当前边界。
- 任务局限性: 目前的工作主要集中在OCR这个“解压缩”任务上。光学压缩范式是否能推广到更复杂的、需要对文本内容进行推理的通用视觉问答(VQA)任务,还有待验证。
- 非对话优化: 论文明确指出,模型没有经过指令微调(SFT)阶段,因此它不是一个聊天机器人。其能力需要通过特定的提示词(completion prompts)来激活。
- 渲染开销: 将长文本渲染成图像本身需要一定的计算开销和时间,尽管这可能远小于LLM处理长序列的开销,但在实时性要求极高的场景下仍需考虑。
未来工作展望: 论文为未来研究开辟了广阔空间,例如:
- 对话历史压缩: 将多轮对话历史渲染成一张不断更新的“对话卷轴”图像,以实现理论上无限长的对话记忆。
- 代码理解: 将整个代码库渲染成图像,让VLM从宏观结构和微观细节上理解代码。
- 记忆与遗忘模拟: 论文中图13的构想非常有趣,可以通过逐渐降低历史文本图像的分辨率(使用更少的Token)来模拟人类记忆随时间模糊、遗忘的机制。
总结
《DeepSeek-OCR: Contexts Optical Compression》是一篇极富创意和启发性的论文。它没有在现有技术路线上“卷”参数或优化算法,而是提出了一个颠覆性的“光学压缩”框架来应对LLM的长上下文挑战。通过扎实的模型设计(DeepEncoder)和充分的实验验证,它证明了这一方向的巨大潜力,不仅在文档智能领域取得了SOTA的效率和性能,更为未来VLM和LLM的发展开辟了全新的可能性。这无疑是近年来VLM领域最值得关注的工作之一。
如何学习AI大模型 ?
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓
CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

👉3.大模型实际应用报告合集👈
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

👉4.大模型实战项目&项目源码👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战项目来学习。(全套教程文末领取哈)
👉5.大模型经典学习电子书👈
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
👉6.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
为什么分享这些资料?
只要你是真心想学AI大模型,我这份资料就可以无偿分享给你学习,我国在这方面的相关人才比较紧缺,大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


CSDN粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)