Unlimited-OCR 深度解析:OCR 正在从"逐页识别"走向"一次性长文档解析"

Unlimited-OCR:从逐页识别到一站式长文档解析,配有 R-SWA 滑动窗口示意、DeepEncoder、MoE 解码器三大特性图解,关键词覆盖 OCR/长文档/PDF 解析/R-SWA/KV cache/DeepEncoder

TL;DR

  • 场景:长 PDF 一次性解析、复杂版面文档转 Markdown、企业知识库与 RAG 入库。Unlimited-OCR(百度 2026 年 6 月 22 日发布、6 月 25 日开源)瞄准 OCR 从"单页识别"转向"长时域连续解析"。
  • 结论:核心是 R-SWA(Reference Sliding Window Attention)——把 decoder 的 KV cache 从线性增长压成常数,模型始终看得见视觉参考区和 Prompt,只保留最近一段输出窗口。
  • 产出:3B 总参数 / 激活约 570M 的 MoE 解码器 + DeepEncoder 高压缩视觉编码,OmniDocBench v1.6 综合分 93.92%,端到端 SOTA,单次前向可解析 40+ 页 PDF,速度较 DeepSeek-OCR 提升约 35%。

版本矩阵

功能 状态 说明
基于 DeepSeek-OCR 架构改造 ✅ 已验证 延续 DeepEncoder + MoE decoder 组合
R-SWA(Reference Sliding Window Attention) ✅ 已验证 把 decoder KV cache 从线性增长压成常数
总参数 3B / 激活约 570M ✅ 已验证 MoE 结构,BF16 权重
DeepEncoder 视觉压缩 1024×1024 → 256 token ✅ 已验证 16× 压缩,单页 base 模式
OmniDocBench v1.6 综合分 93.92% ✅ 已验证 端到端 SOTA
单次前向解析 40+ 页 PDF ✅ 已验证 多页连续解析能力
速度较 DeepSeek-OCR 提升 ~35% ✅ 已验证 long-horizon OCR 评测
Transformers + SGLang 双推理后端 ✅ 已验证 HuggingFace 标准接口 + 服务化部署
“Unlimited” = 真无限上下文 ❌ 误解 仍受 context length / prefill 长度约束
适合强监管票据/合同字段抽取 ⚠️ 待验证 推荐 pipeline + 模型校验混合方案
128K 上下文训练版本 ⚠️ 待验证 报告披露的未来方向,尚未发布

Unlimited-OCR:从逐页识别到一站式长文档解析,配有 R-SWA 滑动窗口示意、DeepEncoder、MoE 解码器三大特性图解,关键词覆盖 OCR/长文档/PDF 解析/R-SWA/KV cache/DeepEncoder

TL;DR

Unlimited-OCR 值得关注的地方,不是它又把 OCR 做成了一个更大的视觉语言模型,而是它把问题从"单页能不能识别"推进到了"长文档能不能连续、稳定、高效地解析"。

它基于 DeepSeek-OCR 继续改造,保留 DeepEncoder 对文档图像的高压缩能力,同时把 decoder 里的标准注意力替换为 R-SWA,也就是 Reference Sliding Window Attention。简单说,模型生成结果时始终能看见原始参考区,也就是视觉 token 和 prompt,但只保留最近一段输出历史,而不是把已经生成的全部 token 都放进 KV cache。

这让 Unlimited-OCR 更适合 OCR 这种 reference-based parsing 任务:文档本身一直在那里,模型不一定需要记住所有已经抄过的内容,只要持续看参考材料、保留最近上下文、继续向前解析。

1. OCR 的老问题:不是"不认识字",而是"读不完整"

过去我们提到 OCR,很容易把它理解成"图片转文字"。

给它一张图片,它识别文字;给它一页 PDF,它输出 Markdown;给它一张表格,它尽量还原行列结构。这个理解没有错,但它更像单页工具的视角。

真实业务里的文档往往不是一张孤立图片。

一份合同可能有几十页,一份研报可能有上百页,一篇论文里有正文、脚注、公式、表格、图片、跨页引用。扫描件还可能有歪斜、阴影、低分辨率、小字体、压缩噪声和复杂水印。

真正困难的不是"某一页能不能认出来",而是:

整份文档能不能一次性读完?
跨页结构能不能保持连续?
表格、公式、标题层级、阅读顺序能不能稳定输出?
长文档解析时,速度会不会越跑越慢?
显存会不会随着输出越来越长被 KV cache 撑爆?

Unlimited-OCR 正是朝这个问题去的。

它不是又一个普通 OCR 模型,而是一次针对"长时域文档解析"的 decoder 结构改造。

长文档 OCR 的老问题:左边逐页识别导致跨页结构断开,右边 KV cache 线性变大、越往后越慢,通过三组对比(断开拼图 / 上升柱状图 / 缓慢蜗牛)总结三大痛点

2. 为什么 LLM 做 OCR 会遇到长输出瓶颈

端到端 OCR 的基本流程可以理解成:

文档图片输入
视觉编码器压缩成视觉 token
LLM decoder 逐 token 生成文字、表格、公式、阅读顺序和 Markdown

传统 OCR 常常是多阶段 pipeline:版面检测、文本检测、文本识别、表格结构识别、公式识别、阅读顺序恢复、后处理。端到端 OCR 则把这些任务统一到视觉语言模型里,直接从图像生成结构化文本。

但问题出在 decoder。

LLM 自回归生成时,会保存历史 token 的 Key / Value,也就是 KV cache。这样生成下一个 token 时,不需要每一步都重新计算全部历史内容。

对于普通对话,这不是大问题,因为输出可能只有几百到几千 token。

但 OCR 是一种很典型的"拷贝型长输出任务"。一份长 PDF 可能需要输出几万甚至十几万 token。文档越长,输出越长,KV cache 越大,显存占用越高,注意力计算也越来越重。

在标准注意力下,decode 阶段的 KV cache 基本会随着输出长度线性增长,于是会出现一个很反直觉的问题:

模型刚开始解析很快,越往后越慢。
短文档表现不错,长文档显存和延迟开始失控。
把每页拆开单独 OCR,又容易丢失跨页上下文。

所以长文档 OCR 的核心瓶颈,不只是识别精度,而是长输出过程中的推理机制。

3. Unlimited-OCR 的核心思想:像人类抄书一样工作

Unlimited-OCR 技术报告里用了一个很直观的类比:人类抄书。

一个人抄一本书时,并不会把自己已经抄过的全部内容都牢牢记在脑子里。真正需要关注的东西大概只有三类:

原文在哪里
刚刚抄到哪里
下一小段要抄什么

换句话说,人类做长文本抄写时,并不是依赖"完整历史记忆",而是依赖"原始参考材料 + 最近工作记忆 + 当前进度"。

Unlimited-OCR 的 R-SWA 就是把这个思路放进注意力机制里。

R-SWA 的全称是 Reference Sliding Window Attention。

它让每个新生成的 token 始终能看到参考区,也就是视觉 token 和 prompt;同时只看最近一小段已经生成的输出 token,而不是看全部历史输出。

可以把它拆成三部分:

Reference:一直保留的参考信息
Sliding Window:只保留最近输出窗口
Attention:生成下一个 token 时可以关注哪些 token

标准 decoder 更像这样:

生成第 100 个 token:看输入 + 前 99 个输出 token
生成第 10000 个 token:看输入 + 前 9999 个输出 token

R-SWA 改成:

每一步都能看完整参考区
每一步只看最近 n 个输出 token
更早输出从工作记忆中移除

因此,模型不是"不记得文档",而是一直看着原始文档;它只是不会把所有已经输出过的文字都塞进 decoder 的工作记忆。

这对 OCR 很合理。

OCR 大多数时候不是自由创作,而是根据图像逐段转写。模型真正需要的是源文档和最近上下文,而不是完整历史生成文本。

R-SWA 怎么工作:左侧绿色"参考区常驻"包含 PDF/Prompt 始终可见,中间蓝色"稳定解码"是 Decoder 机器人,右侧粉色"最近窗口"展示 y₁₂…y₂₁ 的滑窗,旧输出(y₁…y₁₁)丢进垃圾桶、新输出 y₂₁ 进入

4. 为什么它适合 OCR,但不是通用记忆方案

R-SWA 成立有一个前提:任务有稳定的外部参考源。

OCR 有文档图像,ASR 有音频,翻译有原文。这些任务都可以看成 reference-based parsing,也就是"基于参考内容做连续解析"。模型只要能持续访问参考材料,并保留最近输出,就可以继续向前推进。

但小说创作、复杂推理、多轮规划、代码生成往往需要长程依赖。前面很远的设定、变量、约束和推理链条,可能影响后面输出。如果只保留最近窗口,就可能丢掉全局一致性。

所以 R-SWA 的结论不是"所有 LLM 都应该这么做",而是:它很适合 OCR、ASR、翻译这类有外部参考源、输出主要跟随输入推进的任务。

5. 架构:DeepEncoder + 带 R-SWA 的 MoE decoder

Unlimited-OCR 由两部分组成。

第一部分是 DeepEncoder。

第二部分是带 R-SWA 的 MoE LLM decoder。

DeepEncoder 来自 DeepSeek-OCR。它的作用是把高分辨率文档图像压缩成较少的视觉 token。技术报告中提到,DeepEncoder 可以把 1024 x 1024 的 PDF 页面图像压缩到 256 个 token。

这很关键。

如果视觉 token 太多,长文档还没开始输出,prefill 阶段就会被输入 token 撑爆。OCR 模型要处理多页文档,第一步必须先把页面图像压缩得足够狠,同时还不能丢掉文字细节。

第二部分是 MoE LLM decoder。报告中描述的 Unlimited-OCR 采用 3B 总参数、约 500M 激活参数的 MoE 结构。MoE 的好处是模型总容量可以较大,但每次推理只激活部分专家,从而控制实际计算量。

真正的核心改动在 decoder:把标准 Multi-Head Attention 替换成 R-SWA。

这让 decode 侧 KV cache 不再随着长输出持续增长。

6. “Unlimited” 不是无限上下文,而是固定 decode 成本

Unlimited-OCR 这个名字容易让人误解。

它不是说模型真的可以无限页、无限 token、无限上下文。

技术报告里也明确讨论了这个边界:当前模型仍然受 context length 和 prefill 长度限制。页面越多,视觉 token 仍然会累积,输入阶段仍然会越来越长。

所以 “Unlimited” 更准确的含义是:

在给定输入已经放进上下文后,
输出过程不会因为生成越来越长而持续增加 decode 侧 KV cache。

长文档 OCR 可以拆成两个阶段:

prefill:把文档图像编码后放进模型
decode:逐 token 输出识别结果

Unlimited-OCR 主要解决的是 decode 阶段问题,而不是彻底消灭所有长上下文问题。

如果输入是几百页扫描件,prefill 本身仍然可能成为瓶颈。报告里也提到,未来方向包括训练更长上下文版本,比如 128K,以及构建 prefill pool,让模型自动获取需要的 reference KV chunk,模拟人类翻页。

这说明它更像是长文档 OCR 的关键一步,而不是最终形态。

7. 效果:长文档更稳,也没有放弃单页能力

从论文和项目材料看,Unlimited-OCR 的评估重点不是单纯刷单页 OCR 分数,而是证明 R-SWA 对长输出有实际帮助。

报告中给出了 OmniDocBench v1.5、v1.6 等基准结果,也给出了覆盖 2、5、10、15、20、40+ 页的 long-horizon OCR 测试。重点不是单页刷分,而是长输出时能否保持连续解析能力。

效率上,报告也展示了一个很符合预期的趋势:

短输出时,R-SWA 的优势不一定夸张。
输出越长,标准 attention 的 decode 成本越容易下滑。
R-SWA 因为只保留固定输出窗口,吞吐更稳定。

这就是 Unlimited-OCR 真正想证明的点:当文档变长、输出变长时,模型不会被越来越长的历史输出拖垮。

8. 和传统 OCR pipeline 的区别

传统 OCR pipeline 更像工厂流水线:

版面检测
文本框检测
文字识别
表格结构识别
公式识别
阅读顺序恢复
Markdown / JSON 后处理

这种方式可控、可调、可解释,适合生产系统。缺点是链路长、模块多,复杂版面和跨页结构会让误差不断传递。

Unlimited-OCR 代表的是端到端文档智能路线。

它直接从图像生成结构化文本,把布局理解、文字识别、阅读顺序、表格和公式处理统一进一个模型。

优势是简单、统一、上限高;劣势是可控性弱、错误定位难、工程稳定性仍要验证。

所以实际生产选型不能简单说"端到端一定替代 pipeline"。

更合理的判断是:

复杂文档解析、长 PDF 转 Markdown、多页连续阅读:
端到端 OCR 会越来越强。

强监管、强字段校验、强可解释的票据、合同、财务系统:
pipeline + 模型校验仍然有价值。

未来主流形态很可能是混合式:端到端模型负责主解析,传统 OCR / layout / rule engine 负责校验、纠错和结构约束。

9. 工程部署:更像模型工程组件,不是开箱即用小工具

从开源资料看,Unlimited-OCR 支持 Transformers 推理,也提供了 SGLang 相关部署方式。

Transformers 方式适合研究、单机测试和快速验证。它通过 AutoTokenizerAutoModel 加载模型,调用 model.infer 处理单图,调用 model.infer_multi 处理多页图像或 PDF 转图片后的输入。

单图推理有两类配置:

Gundam:base_size=1024, image_size=640, crop_mode=True
Base:base_size=1024, image_size=1024, crop_mode=False

多页 / PDF 场景使用 Base 模式,也就是 image_size=1024

PDF 本身需要先用 PyMuPDF 转成图片,再输入 infer_multi

SGLang 方式更偏服务化,README 中给了 launch server 示例,包括 --attention-backend fa3--context-length 32768--enable-custom-logit-processor 等参数。

这说明 Unlimited-OCR 目前不是一个"pip install 后直接生产可用"的简单工具,更像适合模型工程团队二次封装的开源模型组件。

工程落地路径:PDF转图片 → Transformers/SGLang 推理服务 → 结构后处理(表格/标题/列表/段落)→ 多维度质量评估 → RAG 入库(分块/向量化/元数据/存储)→ 可回溯到原始页码,并标注固定模型版本、信任 remote_code、持续迭代改进

10. 适合哪些场景

更适合它的场景有五类:

长 PDF 转 Markdown
复杂版面文档解析
OCR + RAG 文档入库
企业知识库和私有文档处理
多页连续信息抽取

核心判断很简单:只要任务需要跨页连续阅读,它就比"逐页 OCR + 拼接"更值得评估。

11. 不适合哪些场景

Unlimited-OCR 也不是所有 OCR 场景的最优解。

不适合它的场景也很明确:

超轻量边缘设备
验证码、单行文本、车牌、快递单号
发票、票据、合同字段等强结构抽取
模糊、小字、压缩、倾斜、遮挡、手写扫描件
任意超长 PDF 无脑一次性输入

所以它不是万能 OCR,而是长文档解析方向上的一个强信号。

12. 对 RAG 和 AI Infra 的启发

Unlimited-OCR 的价值不只在 OCR。它给了一个更通用的思路:对于有参考源的长时域任务,不一定要让 decoder 记住全部历史。

传统长上下文优化常常围绕"如何让模型看更多 token"展开。Unlimited-OCR 换了个角度:如果任务本身有稳定参考源,模型可以一直看参考源,只保留最近工作记忆。

对 RAG 系统来说,它也提醒我们:很多时候检索效果差,不是因为向量库不够高级,而是因为入库前的文档解析就已经坏了。

一个更可靠的文档入库链路应该是:

PDF / 图片输入
OCR / 文档解析模型输出 Markdown、表格、公式、阅读顺序和页标记
结构化清洗,保留页码、坐标、标题层级
按语义结构 chunk,而不是固定字数切分
embedding + sparse index + rerank
回答时回溯原始页面区域

在这个链路里,Unlimited-OCR 负责第一层:把不可控的视觉文档变成尽可能可靠的结构化文本。这一层越好,后面的 RAG 才越有意义。

13. 生产落地建议

如果要把 Unlimited-OCR 放进生产系统,建议不要直接裸用模型输出。

更合理的链路是:文件预处理、模型解析、结构后处理、质量评估、入库、回溯。

文件预处理处理 PDF 转图片、DPI、旋转、空白页和损坏页;结构后处理恢复页码、修复表格、提取标题层级;质量评估覆盖空页率、重复率、乱码率和页码连续性;入库时保留 Markdown、表格 JSON、图片区域和原 PDF 页码;回答时必须能回溯到原始页面。

部署时还要固定模型 commit,审查 trust_remote_code,控制 CUDA / PyTorch / Transformers / SGLang 版本,并压测 DPI、显存、页数和重复输出。

14. 总结

Unlimited-OCR 可以用一句话概括:

它是在 DeepSeek-OCR 基础上,
通过 R-SWA 改造 decoder 注意力机制,
让端到端 OCR 模型更适合一次性长文档解析。

它解决的核心不是"图片里某个字认不认得",而是"几十页文档能不能连续、稳定、高效地解析"。

它的关键技术点有三个:

DeepEncoder:高压缩视觉 token,让多页文档输入更可承受。
MoE LLM decoder:保留生成和结构化能力,同时控制激活参数。
R-SWA:让 decode 侧 KV cache 不随生成长度线性增长。

它的限制也很明确:

仍受 context length 和 prefill 长度约束。
低质量小字扫描件仍然敏感。
需要工程后处理、质量评估和生产级部署封装。

但从趋势看,Unlimited-OCR 代表了 OCR 的一个新方向:从 pipeline OCR 走向端到端文档解析,从逐页处理走向长时域解析,从"识别文字"走向"理解文档结构"。

Unlimited-OCR 总结:1) DeepEncoder 高压缩视觉 token;2) MoE decoder 按需激活专家;3) R-SWA 固定最近窗口让解码成本稳定;4) 边界限制——不是真无限上下文,受 context length / prefill 成本 / 压缩策略三重约束;底部流程:文档图像 → 视觉 token → Markdown → RAG


错误速查卡

症状 根因 定位 修复
长 PDF 解析到后面越来越慢,吞吐下降到不可用 标准 attention 的 KV cache 随输出长度线性增长,长输出场景下显存与算力被输出历史拖垮 监控 GPU 显存曲线与 decode 阶段 token/s,确认是否随输出长度单调下降;对照 long-horizon OCR 评测中的 throughput 曲线 切换到 Unlimited-OCR(R-SWA)或同类固定输出窗口方案;评估是否需要拆分 PDF、缩短单次输入
单页 OCR 准确率还不错,但整份 PDF 拼起来跨页结构全乱了 把每页拆开单独 OCR 再拼接,丢失跨页标题、阅读顺序、表格延续与跨页引用 抽取跨页场景样本(如跨页表格、跨页公式、跨页章节标题),人工核对拼接结果是否结构连贯 改为 Unlimited-OCR 这类一次性长时域解析方案,或在拼接层引入版面/语义连续性后处理
短文本/单行 OCR(验证码、车牌、快递单号)效果差或过度慢 Unlimited-OCR 是面向长文档的端到端方案,需要复杂 pipeline 和较高推理成本,不适合极轻量短文本场景 看输入是否只是单字段短文本,且对延迟/成本极敏感 切回专用轻量 OCR(如 PaddleOCR、Tesseract、按字段裁剪的小模型),端到端长文档模型不放在该链路
显存没有爆炸,但 decode 仍有异常停顿或 OOM prefill 阶段视觉 token 累积过多,或 SGLang --context-length 与实际输入不匹配 打印 prefill 长度、检查 attention-backendcontext-length 配置、复现单页 token 数 控制单次输入页数;按需调高或拆分 context;模型侧等待更长上下文训练版本(如 128K 方向)落地
接入 HuggingFace Transformers 后报 trust_remote_code 相关错误 Unlimited-OCR 自定义 DeepEncoder/R-SWA 实现,需 trust_remote_code=True 才能加载 检查加载日志是否提示需要信任远端代码 AutoModel.from_pretrained(..., trust_remote_code=True);生产侧固定 commit、审计代码后再启用
OCR 输出缺少页码、表格结构、图注等结构信息 直出模型 Markdown 未做结构后处理,跨页内容会丢页码、表格、坐标 对照原始 PDF 核查结构后处理是否覆盖页码标记、表格 JSON、图注 加入结构后处理:恢复页码、提取标题层级、表格转 HTML/JSON;入库按语义结构 chunk 而非固定字数切分
端到端 OCR 出错后无法定位、不能回溯到原始页面 模型直接生成结构化文本,缺少位置/页码锚点 在 RAG 回答链路中尝试回溯原始页码,看是否能定位 入库阶段为每段文本附带原 PDF 页码、坐标、图片区域;回答侧强制要求返回页码锚点,无法定位时拒答
把 Unlimited-OCR 当成"无限上下文",几百页 PDF 一次输入 prefill 阶段视觉 token 随页数线性累积,超过 context length 后处理失败 看 prefill 长度与 context-length 配置、复现是否 OOM 或截断 控制单次输入页数(如 40+ 页一档);等更长上下文版本(128K 方向)落地;结合 prefill pool + 翻页策略
SGLang 启动后解码报错或吞吐异常低 --attention-backend 未指定 FA3、或与 R-SWA 不兼容 检查 launch server 日志与 attention backend 配置 按 README 指定 --attention-backend fa3 并保证硬件支持,必要时回退 Transformers 推理

作者:武子康的个人博客

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐