大多数端到端 OCR 模型会随着输出增长而变慢。每生成一个 token,KV cache 就会增加。内存占用上升,生成速度拖慢。解析数十页文档变得不切实际。百度的 Unlimited OCR 直接解决了这个问题。它用另一种设计替换了解码器的注意力机制,使内存占用保持恒定。
摘要
- Unlimited OCR 是一个 3B 参数的混合专家模型,其中仅有 500M 参数处于激活状态。
- 它用参考滑动窗口注意力(R-SWA)替换了解码器注意力机制,使 KV cache 保持恒定。
- 该模型在 32K 最大长度限制下,单次前向传播即可解析数十页文档。
- 它在 OmniDocBench v1.5 上取得了 93.23 的分数,比 DeepSeek OCR 基线高出 6.22 分。
- 它基于 DeepSeek OCR 通过持续训练构建,而非从头开始训练。
什么是 Unlimited OCR?
Unlimited OCR 以 DeepSeek OCR 作为基线。它保留了 DeepEncoder 和混合专家解码器。MoE 设计拥有总计 3B 参数,但在推理时仅激活 500M 参数。
DeepEncoder 是压缩引擎。它将窗口注意力下的 SAM-ViT 与全局注意力下的 CLIP-ViT 级联起来。在桥接处,它应用了 16 倍 token 压缩。一张 1024×1024 的 PDF 图像仅变成 256 个视觉 token。更少的输入 token 意味着更小的预填充。
DeepEncoder 原生支持五种分辨率模式,Unlimited OCR 保留了其中两种。“基础”模式以 1024×1024 运行,适用于多页文档处理。“高达”模式使用动态分辨率,适用于单页文档。

R-SWA 如何保持缓存恒定
其贡献在于参考滑动窗口注意力。标准多头注意力会为每个 token 存储一个键和值。随着输出长度 T 增长,缓存也随之增长。其大小为 CMHA(T) = Lm + T。内存和延迟会无限制地攀升。
R-SWA 打破了这种关联。每个生成的 token 会关注所有参考 token,即视觉 token 和提示词。它还会关注前 n 个输出 token,其中 n 默认为 128。所有更早的 token 都会被驱逐。缓存变成一个大小为 m + n 的固定队列。
其大小为 CR-SWA(T) = Lm + min(n, T) ≤ Lm + n。它受一个常数限制。当 T 远大于 n 时,缓存比率趋近于零。因此内存保持平稳,每步延迟也保持平稳。
研究团队将此与软遗忘进行类比。一个人抄写书籍时,会扫视原文和最后几个字,而不会重读已抄写的所有内容。视觉 token 从不经历状态更新,从而避免了线性注意力中出现的渐进式模糊。下方的交互式模拟器允许你调整 T 值,并观察两个缓存如何响应。
训练方式
Unlimited OCR 并非从头开始训练。研究团队从 DeepSeek OCR 检查点继续训练了 4,000 步。他们冻结了 DeepEncoder,仅训练解码器。训练使用了约 200 万份文档样本,在 8×16 块 A800 GPU 上进行。训练数据以 9:1 的比例偏向单页数据,多页样本则通过拼接方式构建。
基准测试
研究团队在 OmniDocBench v1.5 和 v1.6 上进行了评估。主要发现/统计结果是 v1.5 上的总体得分为 93.23,比 DeepSeek OCR 基线高出 6.22 分。下表比较了三个相关模型。这三个模型均采用相同的 3B-A0.5B 规模。
| 指标 (v1.5) | DeepSeek-OCR | DeepSeek-OCR 2 | Unlimited-OCR |
|---|---|---|---|
| 总体 ↑ | 87.01 | 89.17 | 93.23 |
| 文本编辑 ↓ | 0.073 | 0.049 | 0.038 |
| 公式 CDM ↑ | 83.37 | 86.85 | 92.61 |
| 表格 TEDS ↑ | 84.97 | 85.60 | 90.93 |
| 阅读顺序编辑 ↓ | 0.086 | 0.060 | 0.045 |
在 OmniDocBench v1.6 上,Unlimited OCR 总体得分达到 93.92。这是研究论文 v1.6 比较中的最高分。在文本、公式和表格识别方面均保持优势。
速度也有所提升。在 OmniDocBench 的 Base 模式下,Unlimited OCR 达到 5,580 TPS,而 DeepSeek OCR 为 4,951 TPS,提升了 12.7%。随着输出长度增加,差距进一步拉大。在 6,000 token 的输出上限下,DeepSeek OCR 落后 Unlimited OCR 35%。
适用场景
恒定缓存特别适合那些逐页处理系统表现不佳的工作负载。
- 整本书籍转录:输入 40 页以上的内容,并一次性连续解析。在 40 页以上时,报告的编辑距离保持在 0.11 以下,Distinct-35 达到 96.90%。
- 文档解析流水线:在单次前向传播中提取文本、表格、公式和阅读顺序。
- 高吞吐量批量解析:附带的 infer.py 启动一个 SGLang 服务器,并对一个文件夹或 PDF 发送并发请求。
- 超越 OCR:研究团队称 R-SWA 是一种通用的解析注意力机制,可应用于 ASR 和翻译。
运行方式:极简代码
Transformers 路径需要设置 trust_remote_code=True 以及 CUDA GPU。单图像解析使用 Gundam 模式。
import torch
from transformers import AutoModel, AutoTokenizer
name = "baidu/Unlimited-OCR"
tokenizer = AutoTokenizer.from_pretrained(name, trust_remote_code=True)
model = AutoModel.from_pretrained(
name, trust_remote_code=True, use_safetensors=True,
torch_dtype=torch.bfloat16,
).eval().cuda()
model.infer(
tokenizer,
prompt="<image>document parsing.",
image_file="your_image.jpg",
output_path="your/output/dir",
base_size=1024, image_size=640, crop_mode=True, # gundam mode
max_length=32768,
no_repeat_ngram_size=35, ngram_window=128,
save_results=True,
) 多页和 PDF 解析在 Base 模式下调用 model.infer_multi,图像尺寸设为 image_size=1024。为满足生产环境吞吐量,SGLang 使用 fa3 注意力后端提供兼容 OpenAI 的 API。
优势与不足
优势:
- 恒定 KV 缓存使得长输出场景下的内存和延迟保持平稳。
- 在 OmniDocBench v1.5 和 v1.6 上取得端到端 SOTA 分数。
- 仅 500M 活跃参数,推理成本低廉。
- MIT 许可证、开放权重,同时支持双 Transformers 和 SGLang。
- R-SWA 带来的提升在单页场景下未产生可测量的精度损失。
不足:
- 解析并非真正无限制;32K 上下文仍对预填充阶段构成边界。
- 尽管经过高度压缩,长预填充仍随页数累积而增长。
- 多页运行仅使用 Base 模式,因此可能遗漏极小的文字。
- ASR 和翻译迁移仍属未来工作,并非已交付成果。