{"notes":[{"id":"deepseek/deepseek-ocr-2","category":"deepseek","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DeepSeek-OCR 2","subtitle":"目光的顺序","author":"Z. Yuan","paperDate":"2026-01-28","publishedOn":"2026-11-08","world":"external/deepseek-ocr2","paperTitle":"DeepSeek-OCR 2: Visual Causal Flow","paperUrl":"https://arxiv.org/abs/2601.20552","bibliography":{"title":"DeepSeek-OCR 2: Visual Causal Flow","authors":["Haoran Wei","Yaofeng Sun","Yukun Li"],"url":"https://arxiv.org/abs/2601.20552","pdfUrl":"https://arxiv.org/pdf/2601.20552v1","codeUrl":"https://github.com/deepseek-ai/DeepSeek-OCR-2","preprint":{"id":"2601.20552","submittedOn":"2026-01-28","url":"https://arxiv.org/abs/2601.20552"},"publication":null,"citation":"@misc{deepseekdeepseekocr22026,\n  title = {{DeepSeek-OCR 2: Visual Causal Flow}},\n  author = {Haoran Wei and Yaofeng Sun and Yukun Li},\n  year = {2026},\n  eprint = {2601.20552},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2601.20552}\n}\n","citationPath":"/content/papers/citations/deepseek/deepseek-ocr-2.02901bc9ba9f.bib"},"thumbnail":{"src":"/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png","width":1194,"height":483},"locale":"zh-hans","path":"/content/papers/zh-hans/deepseek/deepseek-ocr-2.66da7ebcdc0a.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"把-clip-换成语言模型","text":"把 CLIP 换成语言模型","depth":3},{"id":"掩码决定谁能看谁","text":"掩码决定谁能看谁","depth":3},{"id":"一页要几个-token","text":"一页要几个 token","depth":3},{"id":"训练","text":"训练","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"omnidocbench-v15","text":"OmniDocBench v1.5","depth":3},{"id":"九类文档拆开看","text":"九类文档拆开看","depth":3},{"id":"上线之后看什么","text":"上线之后看什么","depth":3},{"id":"作者的愿景与后续成绩","text":"作者的愿景与后续成绩","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"deepseek/deepseek-ocr","relation":"referenced","topic":""}]},{"id":"deepseek/deepseek-ocr","category":"deepseek","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DeepSeek-OCR","subtitle":"一图胜千言","author":"Z. Yuan","paperDate":"2025-10-21","publishedOn":"2026-03-09","world":"external/deepseek-ocr","paperTitle":"DeepSeek-OCR: Contexts Optical Compression","paperUrl":"https://arxiv.org/abs/2510.18234","bibliography":{"title":"DeepSeek-OCR: Contexts Optical Compression","authors":["Haoran Wei","Yaofeng Sun","Yukun Li"],"url":"https://arxiv.org/abs/2510.18234","pdfUrl":"https://arxiv.org/pdf/2510.18234v1","codeUrl":"https://github.com/deepseek-ai/DeepSeek-OCR","preprint":{"id":"2510.18234","submittedOn":"2025-10-21","url":"https://arxiv.org/abs/2510.18234"},"publication":null,"citation":"@misc{deepseekdeepseekocr2025,\n  title = {{DeepSeek-OCR: Contexts Optical Compression}},\n  author = {Haoran Wei and Yaofeng Sun and Yukun Li},\n  year = {2025},\n  eprint = {2510.18234},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2510.18234}\n}\n","citationPath":"/content/papers/citations/deepseek/deepseek-ocr.66e8e5a7db8d.bib"},"thumbnail":{"src":"/content/papers/assets/6f53ecfe63f39804454a69ef4468c93e8018fa1afbe08d1bb52b7e8d52d194c3.png","width":1288,"height":350},"locale":"zh-hans","path":"/content/papers/zh-hans/deepseek/deepseek-ocr.84ff24061e34.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"整体架构","text":"整体架构","depth":3},{"id":"跟着一页-10241024-的图像走一遍","text":"跟着一页 1024×1024 的图像走一遍","depth":3},{"id":"解码器从压缩的表示中把字还原","text":"解码器：从压缩的表示中把字还原","depth":3},{"id":"数据与训练","text":"数据与训练","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"压缩比实验fox-上的-100-页","text":"压缩比实验：Fox 上的 100 页","depth":3},{"id":"实际文档omnidocbench","text":"实际文档：OmniDocBench","depth":3},{"id":"光学压缩与遗忘","text":"光学压缩与遗忘","depth":3},{"id":"发布后的讨论","text":"发布后的讨论","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"model-evaluation/linguistic-crutch","relation":"referenced","topic":""}]}],"text":"一份分三栏排版的报纸，人是怎么读的？\n\n我们不会从左上角一路扫到右下角。先读标题，再沿第一栏往下，读到底再跳回第二栏的顶端；看到「转第 5 版」，视线就跟着跳过去。下一眼看哪里，取决于刚刚读到了什么。\n\nVLM 不是这样读的。图像被切成一格一格的 patch，按固定的「从左到右、从上到下」顺序摊成一串，加上位置编码，交给语言模型。对普通照片来说没什么问题；对版面复杂的文档，这个顺序常常和内容的逻辑顺序对不上。\n\nDeepSeek-OCR 2 想让编码器自己决定**先看哪里、再看哪里**。这是 DeepSeek-AI 在 2026 年 1 月 28 日上传的技术报告，本文依据 v1 阅读，代码与权重同步开源。\n\n\n> [!TIP]\n> \n> 前一代的 DeepEncoder 与光学压缩的设计，可以先看：\n> \n> - **[[25.10] DeepSeek-OCR：一图胜千言](/blog/papers/deepseek/deepseek-ocr)**\n\n\n## 定义问题\n\n作者的出发点是一个观察：人的视线移动是有因果关系的，下一个注视点取决于前面看到的东西；可是现在的 VLM 编码器，把 2D 图像摊成 1D 序列时，用的是和内容无关的固定顺序。\n\n语言模型是用一维、有先后顺序的文本训练出来的。作者因此问：能不能把两段「一维、有因果顺序」的推理接起来，处理二维图像？\n\n- 第一段在编码器里：根据图像内容，把视觉 token 重新排出阅读顺序。\n- 第二段在解码器里：按这个顺序，自回归地输出文本。\n\n他们以文档阅读作为试验场，因为文档有多栏版面、公式和表格，阅读顺序本身就带着逻辑。\n\n## 解决问题\n\n### 把 CLIP 换成语言模型\n\n[![左：DeepEncoder，由 80M 的 Tokenizer 接 CLIP ViT 300M；右：DeepEncoder V2，由同一个 Tokenizer 接一个以 Qwen2 500M 为基础的语言模型，视觉 token 之后接上一组可学习的查询，只有查询的输出往下传](/content/papers/assets/e199e1e56c505533eb91beb5fa681e7a2366dac66b585a0317ab82b1c950d79d.png)](/content/papers/assets/e199e1e56c505533eb91beb5fa681e7a2366dac66b585a0317ab82b1c950d79d.png)\n\n*原论文 Figure 1，取自 [**v1 PDF 第 1 页**](https://arxiv.org/pdf/2601.20552v1#page=1)，CC BY 4.0。左为前一代 DeepEncoder，右为 DeepEncoder V2。*\n\n左右两边的上半部分一样：一个约 8,000 万参数的 Tokenizer，沿用前一代的 SAM-base 加两层卷积，把 token 数压到十六分之一。\n\n差别在下半部分。前一代用 3 亿参数的 CLIP 做全局注意力；V2 换成一个以 **Qwen2-0.5B** 初始化的语言模型架构，并在视觉 token 后面接上一组**可学习的查询**（作者称为 causal flow token）。\n\n这组查询和视觉 token 一样多。最后只有查询那一半的输出交给解码器，视觉 token 本身不往下传。\n\n作者也试过另一种接法：把视觉 token 放进独立的编码器，再用 cross-attention 让查询去读，类似 mBART 的编码器－解码器结构。结果训练不收敛。他们推测，视觉 token 被隔在另一个编码器里，和查询的交互不够；改成把视觉 token 当作前缀、放在同一个序列里，每一层都能交换信息，才训练得起来。\n\n### 掩码决定谁能看谁\n\n[![注意力掩码示意：ViT 式的双向掩码与 LM 式的因果掩码组合成 DeepEncoder V2 的掩码，前三行视觉 token 彼此互看，后三行查询可以看到所有视觉 token 与前面的查询](/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png)](/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png)\n\n*原论文 Figure 5，取自 [**v1 PDF 第 7 页**](https://arxiv.org/pdf/2601.20552v1#page=7)，CC BY 4.0。绿色表示可以注意，粉红表示不可注意，白圈是自己。*\n\n这张图是整个设计的核心，我们用三个视觉 token $v_0,v_1,v_2$ 和三个查询 $q_0,q_1,q_2$ 走一遍。行是「谁在看」，列是「被看的对象」，1 表示可以注意：\n\n```text\n       v0 v1 v2 | q0 q1 q2\nv0      1  1  1 |  0  0  0\nv1      1  1  1 |  0  0  0\nv2      1  1  1 |  0  0  0\n----------------+---------\nq0      1  1  1 |  1  0  0\nq1      1  1  1 |  1  1  0\nq2      1  1  1 |  1  1  1\n```\n\n- **左上**：视觉 token 彼此全部可见，和 ViT 一样是双向注意力，保留了 CLIP 那种看整张图的视野。\n- **右上**：视觉 token 看不到查询，所以图像特征不会受查询顺序的影响。\n- **左下**：每个查询都能看到所有视觉 token。\n- **右下**：查询之间是下三角，$q_1$ 只看得到 $q_0$ 和自己，和 decoder-only 语言模型的因果注意力一样。\n\n论文的公式写成：\n\n$$\nM=\\begin{bmatrix}\\mathbf{1}_{m\\times m} & \\mathbf{0}_{m\\times n}\\\\ \\mathbf{1}_{n\\times m} & \\mathrm{LowerTri}(n)\\end{bmatrix},\\quad n=m\n$$\n\n右下那个下三角就是「顺序」的来源。$q_0$ 先决定要从图像里取出什么；$q_1$ 知道 $q_0$ 取了什么，再决定下一个；依此类推。查询的输出排成一串，本身就是一种阅读顺序。\n\n作者把整个流程写成：\n\n$$\n\\mathbf{O}=\\mathcal{D}\\big(\\pi_Q(\\mathcal{T}^L(\\mathcal{E}(\\mathbf{I})\\oplus\\mathbf{Q}_0;\\mathbf{M}))\\big)\n$$\n\n$\\mathcal{E}$ 是 Tokenizer，$\\oplus$ 把视觉 token 和查询拼接起来，$\\mathcal{T}^L$ 是 $L$ 层带掩码的 Transformer，$\\pi_Q$ 只取最后 $n$ 个，也就是查询的输出，$\\mathcal{D}$ 是解码器。\n\n### 一页要几个 token\n\n为了不必给每种分辨率都准备一套查询，作者固定了两种视图：\n\n- **全局视图** 1024×1024：1024/16 = 64，64×64 = 4,096 块，压缩十六倍后是 **256** 个 token，配 256 个查询。\n- **局部裁剪** 768×768：768/16 = 48，48×48 = 2,304 块，压缩后 **144** 个，所有裁剪共用同一组 144 个查询。\n\n裁剪数 $k$ 在 0 到 6 之间，长宽都小于 768 时不裁剪。所以交给解码器的 token 数是 $144k+256$：最少 256，最多 $6\\times144+256=1{,}120$。\n\n作者特别比较了上限：前一代 Gundam 模式最多 1,156 个，Gemini 3 Pro 的视觉 token 上限也是 1,120。\n\n解码器没有换，仍是前一代的 3B MoE，激活约 5 亿参数。\n\n### 训练\n\n数据来源和前一代相同，OCR 数据占 80%。有两处小调整：OCR 1.0 数据按内容分成文本、公式、表格，以 3:1:1 采样；版面标注把语义相近的类别合并，例如图注和图标题。\n\n训练分三个阶段：\n\n1. **编码器预训练**：Tokenizer 沿用前一代，语言模型式编码器从 Qwen2-0.5B-base 初始化，接一个小型解码器做下一个 token 预测。160 张 A100，约 1 亿个图文对。\n2. **查询强化**：冻结 Tokenizer，编码器与 DeepSeek 解码器一起训练，强化查询的重排能力。\n3. **解码器专精**：冻结整个编码器，只训练解码器。在同样的 batch size 下，训练速度提高了一倍以上。\n\n## 讨论\n\n### OmniDocBench v1.5\n\n主要评测是 OmniDocBench v1.5，共 1,355 页、9 种文档类型，中英文都有。\n\n| 模型 | 视觉 token 上限 | Overall | 文本 ED | 阅读顺序 ED |\n| --- | ---: | ---: | ---: | ---: |\n| DeepSeek-OCR（裁剪 9 块） | 1,156 | 87.36 | 0.073 | 0.085 |\n| DeepSeek-OCR 2 | 1,120 | 91.09 | 0.048 | 0.057 |\n\n*表：原论文 Table 1 节选。ED 为编辑距离，越低越好；Overall 越高越好。*\n\n在相近的数据来源下，整体分数提高了 3.73，阅读顺序的编辑距离从 0.085 降到 0.057。作者也在 Table 2 拿整体编辑距离和 Gemini 3 Pro 比较：在相同的 1,120 个 token 上限下，DeepSeek-OCR 2 是 0.100，Gemini 3 Pro 是 0.115。\n\n同一张 Table 1 里还有两个值得注意的对手。PaddleOCR-VL 是 92.86，MinerU2.5 是 90.67，两者都先做版面分析、再裁剪识别，论文把它们归在 Pipeline 一类。换句话说，在这个基准上，端到端的 DeepSeek-OCR 2 已经和两阶段系统非常接近，但还没超过最好的那一个。\n\n### 九类文档拆开看\n\nTable 3 把两代模型在九类文档上的表现拆开。阅读顺序的编辑距离**九类全部改善**，例如彩色教科书从 0.125 降到 0.066，笔记从 0.089 降到 0.035。\n\n文本的编辑距离就没那么一致了。多数类别变好，但书籍从 0.022 变成 0.033，报纸从 0.131 变成 0.139。对于报纸，作者给了两个原因：视觉 token 上限较低，对文字极多的报纸不够用，以后可以增加裁剪数；以及报纸的训练数据只有 25 万条，对新的编码器来说太少。\n\n### 上线之后看什么\n\n这一节很短，但我认为是全文最实际的部分。\n\nDeepSeek-OCR 在公司内部有两种用途：替 DeepSeek 的语言模型读取用户上传的图片与文档，以及批量处理 PDF 来生成预训练数据。线上环境没有标准答案可以对照，作者选用**重复率**作为主要的可观测质量指标：\n\n| 模型 | 线上用户图片 | 预训练 PDF |\n| --- | ---: | ---: |\n| DeepSeek-OCR | 6.25% | 3.69% |\n| DeepSeek-OCR 2 | 4.17% | 2.88% |\n\n*表：原论文 Table 4，重复率越低越好。*\n\n重复是生成式 OCR 最容易观察到的失败：同一段字一直输出，程序一查就知道。\n\n反过来说，没有标准答案时，「字写顺了却写错了」这类错误，用重复率是看不到的。对要拿 OCR 结果做决策的应用来说，这张表提醒我们：线上监控要另外设计能看到这类错误的方法，例如和文本层比对、检查字段格式，或抽样人工复核。\n\n### 作者的愿景与后续成绩\n\n作者在讨论一节把话说得比较大：一个重排视觉信息的因果编码器，接上一个做任务推理的因果解码器，两段一维推理也许能走向「真正的二维推理」。他们还设想，同一个语言模型式编码器只要换一组查询，就能处理图像、语音与文本。这些目前都还是展望，论文只在文档阅读上做了验证。\n\nOmniDocBench 后来更新到 v1.6，加入了 296 页较难的样本。官方排行榜上，DeepSeek-OCR 2 的分数是 90.25；前五名则是一批 10 亿参数上下的专用模型，最高约 97 分。[OmniDocBench README](https://github.com/opendatalab/OmniDocBench)\n\n## 结论\n\nDeepSeek-OCR 2 改动的地方很集中：只换掉编码器的后半段，让一组可学习的查询依次读取图像，把视觉 token 重新排成阅读顺序。\n\n1. **掩码设计是关键**。视觉 token 彼此双向可见，查询之间是因果的；只有查询的输出往下传。\n2. **阅读顺序全面改善**。OmniDocBench v1.5 的阅读顺序编辑距离从 0.085 降到 0.057，九类文档全部变好。\n3. **文本识别不是每类都变好**。书籍与报纸的文本编辑距离反而略有上升，报纸受限于 token 上限与训练数据。\n4. **线上指标只看得到重复**。重复率从 6.25% 降到 4.17%，但这个指标看不到通顺的错字。\n\n把阅读顺序交给一组会依次看图的查询，是很直观的想法。它让模型读文档的方式更像人；至于读到的字是看清楚的，还是根据上下文补上的，仍然需要另外检查。\n","imageSizes":{"/content/papers/assets/e199e1e56c505533eb91beb5fa681e7a2366dac66b585a0317ab82b1c950d79d.png":{"width":1111,"height":588},"/content/papers/assets/2ba25df8f4e3579425551e93bdce7b8b0f180bb349cef46511dce7f44ffd68f3.png":{"width":1194,"height":483}}}
