百度发布Unlimited OCR:3B参数MoE模型,KV缓存恒定实现长文档高效解析
Baidu Releases Unlimited OCR, a 3B Model That Keeps the KV Cache Flat for Long-Document Parsing
百度推出Unlimited OCR,一个3B参数的MoE模型,推理时仅激活500M参数。其核心创新Reference Sliding Window Attention(R-SWA)将KV缓存大小固定为Lm + n(n默认128),内存和延迟不随输出长度增长。模型基于DeepSeek OCR继续训练4000步,支持32K最大长度,通过DeepEncoder实现16倍token压缩。在OmniDocBench v1.5上整体得分93.23,超出DeepSeek OCR基线6.22分;v1.6得分93.92为最高。Base模式下吞吐达5580 TPS,比DeepSeek OCR提升12.7%,6000 token输出时延迟低35%。适用于整本书转录等场景,代码与权重已在HuggingFace开源。
Baidu这个OCR模型用R-SWA把KV缓存压成常量,长文档解析终于不用越跑越慢了。MIT开源,3B总参但推理只消500M,做文档管线的可以直接接。
大多数端到端 OCR 模型会随着输出增长而变慢。每生成一个 token 都会增加 KV cache。内存上升,生成拖沓。解析几十页变得不切实际。百度的 Unlimited OCR 直接解决了这一问题。它把解码器的注意力换成了一种能让内存保持恒定的设计。
TL;DR
- Unlimited OCR 是一个 3B 参数的 Mixture-of-Experts 模型,仅有 500M 参数处于激活状态。
- 它用 Reference Sliding Window Attention(R-SWA)取代了解码器注意力,使 KV cache 保持恒定。
- 该模型在 32K 最大长度下,一次前向传播即可解析几十页。
- 它在 OmniDocBench v1.5 上得分 93.23,比 DeepSeek OCR 基线高出 6.22 分。
- 它是在 DeepSeek OCR 基础上通过继续训练构建的,而非从零开始训练。
什么是 Unlimited OCR?
Unlimited OCR 以 DeepSeek OCR 作为基线。它保留了 DeepEncoder 和 Mixture-of-Experts 解码器。MoE 设计拥有 3B 总参数,但在推理时仅激活 500M。
DeepEncoder 是压缩引擎。它将窗口注意力下的 SAM-ViT 与全局注意力下的 CLIP-ViT 级联起来。在衔接处,它应用了 16× token 压缩。一张 1024×1024 的 PDF 图像仅变成 256 个视觉 token。更少的输入 token 意味着更小的预填充。
DeepEncoder 原生支持五种分辨率模式,而 Unlimited OCR 保留其中两种。‘Base’ 模式以 1024×1024 运行,适用于多页任务。‘Gundam’ 模式对单页使用动态分辨率。

R-SWA 如何保持缓存恒定
其贡献是参考滑动窗口注意力(Reference Sliding Window Attention)。标准多头注意力会为每个 token 存储一个 key 和一个 value。随着输出长度 T 增长,缓存也随之增长。其大小为 CMHA(T) = Lm + T。内存和延迟无上限地攀升。
R-SWA 打破了这种关联。每个生成的 token 会关注所有参考 token,即视觉 token 和提示词。它还会关注前 n 个输出 token,其中 n 默认为 128。更早的一切都被逐出。缓存变成一个大小为 m + n 的固定队列。
其大小为 CR-SWA(T) = Lm + min(n, T) ≤ Lm + n。它被一个常数所界定。当 T 增长到远超 n 时,缓存比率趋近于零。因此内存保持平稳,每步延迟也保持平稳。
研究团队将其比作软遗忘。一个人抄书时会瞥一眼原文和最后几个词,而不会重新阅读已经抄录的全部内容。视觉 token 从不经历状态更新。这避免了线性注意力中出现的渐进式模糊。下方的交互式模拟器让你可以调整 T,并观察两种缓存如何响应。
训练方式
Unlimited OCR 并非从零开始训练。研究团队从 DeepSeek OCR 检查点继续训练了 4,000 步。他们冻结了 DeepEncoder,仅训练解码器。训练使用了约 2M 文档样本,在 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 cache 使长输出过程中的内存占用和延迟保持平稳。
- 在 OmniDocBench v1.5 和 v1.6 上取得端到端 SOTA 分数。
- 仅 5 亿激活参数,使推理成本保持低廉。
- MIT 许可证、开放权重,并同时支持 Transformers 和 SGLang。
- 在单页场景下,R-SWA 带来的收益并未伴随可测量的准确率损失。
弱点:
- 解析并非真正无限;32K 上下文仍然限制了预填充。
- 尽管压缩力度很大,随着页数累积,长预填充仍会增长。
- 多页运行仅使用 Base 模式,因此非常小的文字可能会被遗漏。
- ASR 和翻译迁移仍属于未来工作,并非已交付的成果。
来源:MarkTechPost(RSS) · marktechpost.com