百度开源 Unlimited OCR:让长文档解析一次完成
百度开源了 Unlimited OCR,一个基于 DeepSeek OCR 改进的端到端文档解析模型,总参数 3B、激活参数仅 570M。该模型提出 Reference Sliding Window Attention(R-SWA)机制,将解码阶段的 KV Cache 固定为常数,使单次前向传播即可连续解析数十页文档。在 OmniDocBench v1.6 基准上达到 93.92% 综合指标,位列端到端模型第一;推理速度较 DeepSeek OCR 提升 12.7%,输出长度达 6000 tokens 时速度优势扩大至 35%。
欢迎体验 Unlimited OCR,代码和权重已开源:
- GitHub:http://github.com/baidu/Unlimited-OCR
- ModelScope:https://modelscope.cn/models/PaddlePaddle/Unlimited-OCR
- 论文地址:https://modelscope.cn/papers/2606.23050
效果展示
Unlimited OCR 的核心能力是长程解析(Long-horizon Parsing):输入数十页 PDF 文档图像,一次前向传播从第一页连续解析到最后一页,输出全文 Markdown 格式结构化内容,KV Cache 始终保持恒定,输出延迟不随页数增长。

推理速度
速度是 Unlimited OCR 的一个核心优势。在短输出场景下,R-SWA 与标准注意力的吞吐量基本一致;随着输出变长,标准注意力受到历史 KV 缓存增长影响,吞吐量逐渐下降,而 R-SWA 保持相对稳定。
| 输出长度 | DeepSeek OCR | Unlimited OCR | 速度差距 |
| 256 tokens | 7229 TPS | 7230 TPS | 持平 |
| 1024 tokens | 7423 TPS | 7841 TPS | +5.6% |
| 2048 tokens | 7167 TPS | 7881 TPS | +10.0% |
| 4096 tokens | 6430 TPS | 7905 TPS | +22.9% |
| 6144 tokens | 5823 TPS | 7848 TPS | +34.8% |
在 OmniDocBench 的真实文档评测中,Unlimited OCR 的吞吐量为 5580 TPS,DeepSeek OCR 为 4951 TPS,速度提升约 12.7%。在 6000 tokens 左右的长输出场景下,速度提升可达到约 35%。
基准结果
在速度提升之外,Unlimited OCR 也保持了较强的解析质量。在 OmniDocBench v1.6 上,Unlimited OCR 取得了 93.92% 的综合得分。
| 模型 | 参数量 | 综合得分 |
| HunyuanOCR | 1B | 89.95% |
| DeepSeek-OCR 2 | 3B-A0.5B | 90.25% |
| FireRed-OCR | 2B | 93.26% |
| Logics-Parsing-v2 | 4B | 93.33% |
| Qianfan-OCR | 4B | 93.90% |
| Unlimited OCR | 3B-A0.5B | 93.92% |
相比 DeepSeek OCR 基线,Unlimited OCR 综合得分提升 +6.22%,文本编辑距离下降 0.035,表格结构还原准确率提升接近 6%。
长文档解析
长文档是 Unlimited OCR 最重要的应用场景。在内部多页文档测试集上,Unlimited OCR 支持多页文档一次性解析,结果如下:
| 页数 | 编辑距离 ↓ | Distinct-35 ↑ |
| 2 页 | 0.036 | 99.87% |
| 5 页 | 0.045 | 99.98% |
| 10 页 | 0.053 | 99.83% |
| 20 页 | 0.057 | 99.89% |
| 40+ 页 | 0.107 | 96.90% |
在 40 页以上的输入中,模型仍能保持较低编辑距离,并维持较高的 Distinct-35 指标,说明重复生成问题得到了较好控制。
技术解析
端到端 OCR 模型近几年进展很快。以 DeepSeek OCR 为代表的方案通常使用大语言模型作为解码器,借助语言先验提升识别和结构还原质量。
不过在长文档场景下,这类模型会遇到一个实际问题:输出越长,解码器的 KV 缓存越大,推理速度和显存占用都会受到影响。因此,很多系统在工程上会选择逐页处理文档,再把结果拼接起来。
Unlimited OCR 希望把这件事做得更直接:让模型在一次前向过程中完成多页甚至整本书级别的解析,同时保持稳定的推理成本。对长文档、扫描书籍、报告和论文等场景来说,这意味着更少的工程拼接,也更接近连续阅读式的文档理解。
整体架构
Unlimited OCR 沿用 DeepSeek OCR 的编码器-解码器架构:DeepEncoder 负责图像压缩编码,MoE-LLM 解码器负责自回归生成 Markdown 文本。关键改动是将解码器中所有标准 Multi-Head Attention 替换为 R-SWA。
主要配置如下:
- 编码器:沿用 DeepEncoder,视觉 Token 压缩率为 16×,一张 1024×1024 的 PDF 页面约用 256 个 Token 表示
- 解码器:3B 参数 MoE 架构,推理时激活约 500M 参数
- 上下文长度:32K,可支持多页文档一次性解析

关键创新:Reference Sliding Window Attention
Unlimited OCR 提出了一种参考滑动窗口注意力机制:Reference Sliding Window Attention,简称 R-SWA。
R-SWA 的思路是把输入图像 Token 和已生成文本 Token 分开处理:
| 信息类型 | 注意力策略 |
| 图像 Token | 始终完整可见 |
| 输出 Token | 只保留最近 个 Token,默认窗口为 128 |
| 历史输出 | 不再持续累积 KV 缓存 |
对于 OCR 任务来说,图像内容是固定参考,生成文本只需要保留局部上下文。基于这个特点,R-SWA 在保证模型能持续查看原始图像的同时,将文本侧 KV 缓存限制在固定窗口内。
标准 MHA 的 KV 缓存大小会随输出长度 T 线性增长:

R-SWA 则将缓存大小限制为:

因此,当输出长度增加时,R-SWA 的文本侧缓存不会继续增长,长文档推理的速度和显存占用更稳定。这也是 Unlimited OCR 能够面向长输出场景持续扩展的关键。

本地部署教程
环境要求
- Python 3.12+
- CUDA 12.9
方式一:Transformers 直接推理
1. 安装依赖
pip install torch==2.10.0 torchvision==0.25.0
pip install transformers==4.57.1
pip install Pillow==12.1.1 matplotlib==3.10.8 einops==0.8.2
pip install addict==2.4.0 easydict==1.13 pymupdf==1.27.2.2 psutil==7.2.2
2. 下载模型
从 ModelScope 下载:
# pip install modelscope
# modelscope download --model PaddlePaddle/Unlimited-OCR --local_dir ./Unlimited-OCR
3. 单图推理
from transformers import AutoModel, AutoTokenizer
model_path = "./Unlimited-OCR"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(
model_path,
trust_remote_code=True,
use_safetensors=True
).eval().cuda()
model.infer(
tokenizer,
prompt='<image>document parsing.',
image_file='your_image.jpg',
output_path='./output',
base_size=1024,
image_size=640,
crop_mode=True, # gundam 模式,适合单页高精度
max_length=32768,
no_repeat_ngram_size=35,
ngram_window=128,
save_results=True,
)
4. 多页/PDF 推理
# 多页图片推理
model.infer_multi(
tokenizer,
prompt='<image>Multi page parsing.',
image_files=['page1.png', 'page2.png', 'page3.png'],
output_path='./output',
image_size=1024, # base 模式,多页固定 1024
max_length=32768,
no_repeat_ngram_size=35,
ngram_window=1024, # 多页场景窗口设为 1024
save_results=True,
)
PDF 文件通过 PyMuPDF 以 300 DPI 渲染为 PNG 后传入
infer_multi
。
方式二:SGLang 高并发部署
SGLang 部署适合生产环境,支持 OpenAI 兼容 API 和并发推理。
1. 环境搭建
uv venv --python 3.12
source .venv/bin/activate
# 安装 SGLang(使用仓库提供的 wheel)
uv pip install wheel/sglang-0.0.0.dev11416+g92e8bb79e-py3-none-any.whl
uv pip install kernels==0.11.7
uv pip install pymupdf==1.27.2.2
2. 启动推理服务
python -m sglang.launch_server \
--model PaddlePaddle/Unlimited-OCR \
--served-model-name Unlimited-OCR \
--attention-backend fa3 \
--page-size 1 \
--mem-fraction-static 0.8 \
--context-length 32768 \
--enable-custom-logit-processor \
--disable-overlap-schedule \
--skip-server-warmup \
--host 0.0.0.0 --port 10000
关键参数说明:
--attention-backend fa3:使用 FlashAttention 3 后端--mem-fraction-static 0.8:GPU 显存中 80% 用于静态分配--context-length 32768:最大上下文长度 32K--enable-custom-logit-processor:启用 no-repeat-ngram 逻辑处理器
3. 批量推理
仓库提供了 infer.py 脚本,自动启动 SGLang 服务并并发处理目录或 PDF:
python infer.py \
--image_dir ./examples/images \
--output_dir ./outputs \
--concurrency 8 \
--image_mode gundam
参数说明:
--image_dir:输入图片目录--output_dir:输出 Markdown 文件目录--concurrency:并发请求数--image_mode:gundam(高精度模式)或 base(基础模式)
模型:https://modelscope.cn/models/PaddlePaddle/Unlimited-OCR
更多推荐




所有评论(0)