写在前面
AIGC时代的 《三年面试五年模拟》AI算法工程师/开发工程师求职面试秘籍独家资源: 【三年面试五年模拟】AI算法工程师面试秘籍
AIGC算法岗/开发岗面试面经交流社群(涵盖AI Agent 、AIGC图像创作、AI视频、LLM大模型、AI多模态、数字人、传统深度学习、具身智能等AIGC面试干货资源)欢迎大家加入:https://t.zsxq.com/hHb1C
论文标题 :Unlimited OCR Works Welcome the Era of One-shot Long-horizon Parsing
机构 :百度(Baidu Inc.)
论文链接 :https://arxiv.org/abs/2606.23050
HTML 版 :https://arxiv.org/html/2606.23050v1
开源地址 :https://github.com/baidu/Unlimited-OCR
类型 :Technical Report(技术报告,非 peer-review 论文)
基线模型 :DeepSeek OCR(3B 总参数,0.5B 激活 MoE)
关键词:长序列 OCR、Reference Sliding Window Attention、KV Cache、端到端文档解析、MoE
零、30 秒速览
| 维度 | 内容 |
|---|---|
| 解决什么问题 | 现有端到端 OCR 模型输出越长,KV Cache 线性膨胀,解码越来越慢,无法一次性解析整本书 |
| 核心创新 | R-SWA(Reference Sliding Window Attention):视觉 token 全量可见 + 输出 token 仅看最近 n 个(默认 128) |
| 效果 | OmniDocBench v1.5 Overall 93.23% (DeepSeek OCR 87.01%,+6.22pp );可一次 forward 解析 40+ 页 |
| 效率 | KV Cache 从 O ( T ) O(T) O(T) 降到 O ( L m + n ) O(L_m + n) O(Lm+n) 常数级;6K token 输出时 TPS 比 DeepSeek OCR 高 35% |
| 训练成本 | 仅 200 万 PDF 数据、4000 step 继续训练,冻结 DeepEncoder,只训 LLM |
一、问题背景:为什么现有 OCR 做不到"抄整本书"?
1.1 人类 vs 机器的根本差异
人类可以连续抄写数百页书、翻译数小时音频,认知负荷并不会随篇幅线性爆炸。当前 OCR 模型却做不到------没有任何现有模型能在单次 forward 中解析超过 10 页,只能 for-loop 逐页处理,每页重置记忆。
论文指出,这不是简单的"context 不够长"问题,而是工作记忆(Working Memory)机制的差异:
人类抄书时的注意力焦点:
① 原书(参考源,始终可见)
② 刚写出的几个字(局部上下文,追踪进度)
③ 即将写的下一个字
→ 远端输出"软遗忘",近端上下文追踪进度
→ 不需要回顾全部已写内容
现有 for-loop OCR:
页1 → 解析 → 丢弃状态
页2 → 解析 → 丢弃状态
...
→ 外部调度器拼接,不是 AGI 级别的连续认知
1.2 端到端 OCR 的两条技术路线
| 路线 | 代表 | 特点 | 长序列瓶颈 |
|---|---|---|---|
| Pipeline | PaddleOCR、MinerU、MonkeyOCR | 检测→裁剪→识别,启发式拼接 | 工程 workaround,非模型内生能力 |
| End-to-end VLM | DeepSeek OCR、dots.ocr、Nougat | 单页一次 forward,LLM 解码 | KV Cache 随输出长度线性增长 |
端到端路线中,Decoder 是成本大头:
- 激活参数量:DeepSeek OCR 用 MoE,推理仅激活 500M
- KV Cache :标准 MHA 下,Cache 大小 = L m + T L_m + T Lm+T(前缀 + 已生成长度), T T T 越大越慢
假设视觉 token 与文本 token 压缩比 1:10,10K 视觉 token(约 20--30 页 @1024×1024)需要 100K+ 文本 token 才能完整解码------这对 vanilla LLM OCR 是 KV 存储和注意力计算的灾难。
1.3 为什么不能用现有"高效注意力"直接套?
论文明确排除了两类替代方案:
| 方案 | 为何不适用 |
|---|---|
| 标准 Full Attention | 每个 token attend 全部历史,KV Cache 无界增长 |
| Linear Attention(状态转移) | 视觉/reference token 也会参与 recurrent 状态更新 → 视觉特征逐步模糊,OCR 精度下降 |
| Vanilla SWA(滑动窗口) | 视觉 token 也被滑出窗口 → 丢失参考源,无法持续 OCR |
R-SWA 的关键洞察:视觉 token 是静态参考,不参与状态转移;只有输出 token 做因果滑动窗口。
二、核心方法:Reference Sliding Window Attention (R-SWA)
2.1 直觉图解

图 1:每个生成 token attend 全部 reference token(视觉 token + prompt)+ 前 n 个输出 token(默认 128)。对比 Full Attention:KV Cache 恒定;对比 Vanilla SWA:视觉 token 不被滑出,避免渐进模糊。
2.2 数学形式化
对于解码第 t t t 个 token,可 attend 的位置集合为:
N ( t ) = P ∪ D n ( t ) \mathcal{N}(t) = \mathcal{P} \cup \mathcal{D}_n(t) N(t)=P∪Dn(t)
其中:
- P = { 1 , ... , L m } \mathcal{P} = \{1, \dots, L_m\} P={1,...,Lm}:前缀段 (视觉 token + prompt),长度 L m L_m Lm,全局可见、固定不变
- D n ( t ) = { j ∣ max ( L m + 1 , L m + t − n ) ≤ j ≤ L m + t − 1 } \mathcal{D}_n(t) = \{j \mid \max(L_m+1,\; L_m+t-n) \leq j \leq L_m+t-1\} Dn(t)={j∣max(Lm+1,Lm+t−n)≤j≤Lm+t−1}:解码段 的因果滑动窗口,宽度 n n n
注意力权重:
α t j = exp ( q t ⊤ k j / d k ) ∑ i ∈ N ( t ) exp ( q t ⊤ k i / d k ) , j ∈ N ( t ) \alpha_{tj} = \frac{\exp(\mathbf{q}_t^\top \mathbf{k}j / \sqrt{d_k})}{\sum{i \in \mathcal{N}(t)} \exp(\mathbf{q}_t^\top \mathbf{k}_i / \sqrt{d_k})}, \quad j \in \mathcal{N}(t) αtj=∑i∈N(t)exp(qt⊤ki/dk )exp(qt⊤kj/dk ),j∈N(t)
输出: o t = ∑ j ∈ N ( t ) α t j v j \mathbf{o}t = \sum{j \in \mathcal{N}(t)} \alpha_{tj} \mathbf{v}_j ot=∑j∈N(t)αtjvj
两个窗口的含义:
- m m m(前缀窗口)= L m L_m Lm:取决于文档页数/分辨率,与解码长度无关
- n n n(解码窗口)= 128(默认):只保留最近 128 个输出 token 的 KV
2.3 KV Cache 管理:从线性增长到常数上界
| 注意力类型 | KV Cache 大小 | 随解码长度 T T T 的变化 |
|---|---|---|
| 标准 MHA | C M H A ( T ) = L m + T C_{MHA}(T) = L_m + T CMHA(T)=Lm+T | 线性增长 |
| R-SWA | C R - S W A ( T ) = L m + min ( n , T ) ≤ L m + n C_{R\text{-}SWA}(T) = L_m + \min(n, T) \leq L_m + n CR-SWA(T)=Lm+min(n,T)≤Lm+n | 常数上界 |
Cache 压缩比:
ρ ( T ) = L m + min ( n , T ) L m + T \rho(T) = \frac{L_m + \min(n, T)}{L_m + T} ρ(T)=Lm+TLm+min(n,T)
当 T ≫ n T \gg n T≫n 时, ρ ( T ) ≈ L m + n T → 0 \rho(T) \approx \frac{L_m + n}{T} \to 0 ρ(T)≈TLm+n→0
Concrete 例子:
- 前缀 L m = 2560 L_m = 2560 Lm=2560(10 页 × 256 token/页)
- 窗口 n = 128 n = 128 n=128
- 已生成 T = 50000 T = 50000 T=50000 token
MHA Cache = 2560 + 50000 = 52560
R-SWA Cache = 2560 + 128 = 2688 (压缩 95%)
实现上,KV Cache 是一个容量为 m + n m + n m+n 的队列 :每生成一个新 token,第 ( m + 1 ) (m+1) (m+1) 个位置的 KV 被驱逐。
2.4 Kernel 级验证

图 2:DeepSeek OCR 的 MHA kernel 延迟随解码步数递增;Unlimited OCR(UOW)的 R-SWA 延迟保持恒定。MHA 在 KV Cache 长度跨越对齐边界时还会出现 spike。
三、Unlimited OCR 整体架构

图 3:Encoder(DeepEncoder)+ MoE-LLM Decoder(全部 attention 替换为 R-SWA)。KV Cache 以 m + n m+n m+n 容量队列管理。
3.1 DeepEncoder(冻结,来自 DeepSeek OCR)
DeepEncoder 是长序列 OCR 的输入侧关键 ------高压缩率 = 更短的前缀 = 更小的 L m L_m Lm。
结构: SAM-ViT → 16× token 压缩 → CLIP-ViT
| 特性 | 说明 |
|---|---|
| 前半段 | Window Attention 处理原始图像 token(低激活) |
| 后半段 | Global Attention 仅作用于压缩后 token |
| 压缩率 | 1024×1024 图像 → 256 token(16× 压缩) |
| 分辨率模式 | Base(1024×1024,多页)/ Gundam(动态分辨率,单页) |
为什么视觉 token 不能参与状态转移?
DeepEncoder 编码一次后,视觉 token 在整个长序列解码过程中保持静态。如果像 Linear Attention 那样对视觉 token 做 recurrent update,特征会逐步"糊掉",识别精度崩溃。
3.2 MoE-LLM Decoder(全部替换 R-SWA)
| 参数 | 值 |
|---|---|
| 总参数 | 3B |
| 激活参数 | 500M(MoE) |
| Attention | 所有层 MHA → R-SWA |
| 窗口宽度 n n n | 128 |
与 DeepSeek OCR 的唯一架构改动:Decoder 全部 attention 层换成 R-SWA。Encoder 不动。
3.3 信息如何在窗口间传递?
一个自然疑问:窗口只有 128 token,更早的输出被"遗忘"了,模型怎么知道 OCR 进度?
论文的解释是 "软遗忘 + 因果状态传递":
- 每个新 token 仍能看到全部视觉 reference(知道"整页/整书长什么样")
- 最近 128 个输出 token 提供局部进度锚点(类似人类"看刚写的几个字")
- 历史信息通过窗口内的因果链式传递逐步压缩进窗口,而非直接 attend 远端
OmniDocBench 上 Text Edit ↓0.035、Table TEDS ↑5.96% 说明这种机制在单页 PDF 任务上没有精度损失,反而因 forcing model focus 而提升。
四、训练细节
4.1 数据引擎
| 项目 | 配置 |
|---|---|
| 总量 | ~200 万 PDF OCR 样本 |
| 单页:多页 | 9:1 |
| 单页标注 | PaddleOCR 检测 + 坐标/内容拼接,坐标归一化 0--1000 |
| 多页合成 | 随机拼接 2--50 页单页数据,页间用 `< |
| 合成量多页 | ~20 万条 |
| 序列长度 | 全部 pack 到 32K token |
4.2 训练配置
| 项目 | 配置 |
|---|---|
| 初始化 | DeepSeek OCR checkpoint |
| 训练步数 | 4000 steps |
| Batch size | 256(global) |
| 序列长度 | 32K |
| GPU | 8 × 16 A800 |
| 冻结模块 | DeepEncoder(全部冻结) |
| 训练模块 | LLM(MoE)参数 |
| 优化器 | AdamW |
| 学习率 | 1e-4,cosine annealing |
| 并行 | DeepEP,Expert Parallelism = 4 |
| 框架 | Megatron-LM |
| 数据 packing | Random packing |
关键信息: 仅 200 万数据 + 4000 step 继续训练,不改 Encoder,就在 OmniDocBench 上超越 DeepSeek OCR 6.22pp------说明 R-SWA 本身对 OCR 任务是有效且几乎"免费"的改进。
4.3 推理部署
- Transformers 库:实现 R-SWA 的 KV Cache 管理
- SGLang 推理引擎:对应优化支持
- 两个框架均可在恒定 TPS 和 GPU 内存下运行
五、实验结果(详细拆解)
5.1 OmniDocBench v1.5:与 DeepSeek OCR 直接对比
| 模型 | Size | Overall↑ | Text Edit↓ | Formula CDM↑ | Table TEDS↑ | Table TEDS-S↑ | Read-order Edit↓ |
|---|---|---|---|---|---|---|---|
| DeepSeek-OCR | 3B-A0.5B | 87.01 | 0.073 | 83.37 | 84.97 | 88.80 | 0.086 |
| DeepSeek-OCR 2 | 3B-A0.5B | 89.17 | 0.049 | 86.85 | 85.60 | 90.06 | 0.060 |
| Unlimited-OCR | 3B-A0.5B | 93.23 | 0.038 | 92.61 | 90.93 | 94.07 | 0.045 |
| vs DeepSeek-OCR | --- | +6.22 | -0.035 | +9.24 | +5.96 | +5.27 | -0.041 |
v1.5 完整榜单中的位置(节选):
| 模型 | Size | Overall↑ |
|---|---|---|
| MinerU2-VLM | 0.9B | 85.56 |
| Qwen2.5-VL | 72B | 87.02 |
| Gemini-2.5 Pro | --- | 88.03 |
| dots.ocr | 3B | 88.41 |
| Qwen3-VL | 235B | 89.15 |
| DeepSeek-OCR 2 | 3B-A0.5B | 89.17 |
| Unlimited-OCR | 3B-A0.5B | 93.23 |
用 3B-A0.5B 的激活参数量,Overall 93.23%,超越 235B 的 Qwen3-VL(89.15%)和 Gemini-2.5 Pro(88.03%)。
5.2 OmniDocBench v1.6:最新 SOTA 对比
| 模型 | Size | Overall↑ | Text Edit↓ | Formula CDM↑ | Table TEDS↑ |
|---|---|---|---|---|---|
| HunyuanOCR | 1B | 89.95 | 0.088 | 87.68 | 91.01 |
| DeepSeek-OCR 2 | 3B-A0.5B | 90.25 | 0.050 | 91.84 | 83.89 |
| dots.ocr | 3B | 90.77 | 0.048 | 89.95 | 87.18 |
| FireRed-OCR | 2B | 93.26 | 0.037 | 95.44 | 88.04 |
| Logics-Parsing-v2 | 4B | 93.33 | 0.041 | 95.65 | 88.42 |
| Qianfan-OCR | 4B | 93.90 | 0.040 | 95.08 | 90.53 |
| Unlimited-OCR | 3B-A0.5B | 93.92 | 0.042 | 95.79 | 90.16 |
v1.6 上与 Qianfan-OCR(4B,93.90%)基本持平,Formula CDM 95.79% 为最高。
5.3 九类文档子类别分析
| 文档类型 | UOW Text Edit | DS-OCR Text | DS-OCR 2 Text | UOW R-order | DS-OCR 2 R-order |
|---|---|---|---|---|---|
| PPT | 0.025 | 0.052 | 0.031 | 0.023 | 0.025 |
| Academic Paper | 0.023 | 0.028 | 0.013 | 0.012 | 0.013 |
| Book | 0.019 | 0.022 | 0.033 | 0.025 | 0.027 |
| Colorful Textbook | 0.046 | 0.130 | 0.053 | 0.051 | 0.066 |
| Exam Paper | 0.049 | 0.074 | 0.047 | 0.049 | 0.048 |
| Magazine | 0.020 | 0.049 | 0.026 | 0.061 | 0.100 |
| Newspaper | 0.081 | 0.131 | 0.139 | 0.134 | 0.176 |
| Note | 0.066 | 0.145 | 0.068 | 0.018 | 0.035 |
| Research Report | 0.008 | 0.015 | 0.008 | 0.013 | 0.011 |
结论:
- 9 类文档中,UOW 在绝大多数指标上优于 DeepSeek OCR
- 对比 DeepSeek OCR 2,7/9 的 Text Edit 和 Reading Order 指标 UOW 更优
- 复杂版面(PPT、报纸、杂志、笔记)无劣势 → R-SWA 替换全部 MHA 是完整且合理的
5.4 长序列 OCR(核心能力验证)
| 页数 | Distinct-20↑ | Distinct-35↑ | Edit Distance↓ |
|---|---|---|---|
| 2 页 | 99.76% | 99.87% | 0.0362 |
| 5 页 | 99.78% | 99.98% | 0.0452 |
| 10 页 | 97.49% | 99.83% | 0.0526 |
| 15 页 | 99.92% | 99.99% | 0.0787 |
| 20 页 | 98.73% | 99.89% | 0.0572 |
| 40+ 页 | 96.08% | 96.90% | 0.1069 |
- Distinct-n:生成文本中 unique n-gram 占比,越高说明重复/崩溃越少
- 20 页同时输入仍保持 Edit < 0.06
- 40+ 页 Edit 0.1069,Distinct-35 仍 96.90%
- 40+ 页的主要错误来自 DeepEncoder Base 模式(1024×1024)下小字看不清,不是 R-SWA 在长序列中"迷失方向"
5.5 推理效率(TPS 上限对比)
Prefill 固定 10 token,理想并发条件下:
| 输出长度 | DeepSeek OCR TPS | Unlimited OCR TPS | UOW 优势 |
|---|---|---|---|
| 256 | 7229.32 | 7229.52 | ≈ 持平 |
| 512 | 7468.27 | 7714.78 | +3.3% |
| 1024 | 7422.50 | 7840.94 | +5.6% |
| 2048 | 7166.85 | 7881.11 | +10.0% |
| 4096 | 6430.21 | 7905.18 | +23.0% |
| 6144 | 5822.87 | 7847.71 | +35.0% |
OmniDocBench 实测:UOW 5580 TPS vs DeepSeek OCR 4951 TPS (Base 模式,512 并发),+12.7%。文档越短差距越小,输出越长优势越明显。
六、R-SWA vs 其他注意力机制对比
| 机制 | Reference 可见性 | 输出历史 | KV Cache | OCR 适用性 |
|---|---|---|---|---|
| Full MHA | 全部可见 | 全部可见 | O ( L m + T ) O(L_m + T) O(Lm+T) | 精度好,长序列不可行 |
| Vanilla SWA | 可能被滑出 | 最近 n 个 | O ( n ) O(n) O(n) | 丢失参考源,OCR 崩溃 |
| Linear Attention | 状态转移 | 压缩状态 | O ( 1 ) O(1) O(1) | 视觉特征模糊,精度降 |
| R-SWA | 始终全部可见 | 最近 n 个 | O ( L m + n ) O(L_m + n) O(Lm+n) | 长序列 + 精度兼顾 |
R-SWA 的本质是 "Reference-Full + Output-Sliding" 的非对称注意力,这个设计模式可推广到:
- ASR:音频 token 为 reference,转写文本为 sliding output
- Translation:源语言 token 为 reference,译文为 sliding output
- 任何 reference-based long-horizon generation 任务
七、局限性与未来方向
7.1 当前局限
| 局限 | 说明 |
|---|---|
| 非真正 Unlimited | 32K context 下 prefill 页数仍有限;页数越多 L m L_m Lm 越大 |
| Prefill 仍是瓶颈 | 虽然 decode KV 恒定,但 prefill 阶段的视觉 token 数量随页数线性增长 |
| 多页分辨率受限 | Base 模式 1024×1024,40+ 页小字识别下降(Encoder 限制,非 R-SWA) |
| 仅验证了 OCR | ASR/翻译等任务尚未系统验证 |
7.2 未来计划
- 短期:训练 128K context 模型,支持更多页 prefill
- 长期:构建 prefill pool,模型学会自动 fetch prefill KV chunks(模拟人类翻页)
- 扩展:R-SWA 迁移到 ASR、翻译等 reference-based 任务
八、与 DeepSeek OCR 的关系
DeepSeek OCR Unlimited OCR
├── DeepEncoder (SAM+CLIP) → DeepEncoder(完全不变,冻结)
├── MoE LLM 3B/0.5B → MoE LLM 3B/0.5B(结构不变)
└── 标准 MHA Attention → R-SWA Attention(唯一改动)
KV Cache: O(L_m+T) KV Cache: O(L_m+n)
单页 OCR ✓ 单页 OCR ✓✓(+6.22pp)
多页 for-loop ✗ 多页 one-shot ✓(40+页)
开源关系: Unlimited OCR 基于 DeepSeek OCR checkpoint 继续训练,代码和权重在 GitHub 公开。
九、工程落地建议
9.1 什么时候该用 Unlimited OCR?
| 场景 | 推荐 | 原因 |
|---|---|---|
| 单页 PDF/图片 OCR | 可用 | 精度超 DeepSeek OCR,速度 +12.7% |
| 2--20 页文档一次性解析 | 强烈推荐 | 核心能力区间,Edit < 0.08 |
| 40+ 页整本书 | 可用但注意分辨率 | Edit ~0.11,小字可能漏 |
| 实时短文本 OCR | 可选 | 短序列优势不明显 |
| 替代 Pipeline OCR | 视需求 | 端到端更简洁,但 32K 有上限 |
9.2 部署注意事项
- 推理框架:Transformers 或 SGLang(均已支持 R-SWA KV 管理)
- 窗口宽度 n = 128 n=128 n=128 为默认值,调大 → 更多历史上下文但 Cache 增大
- 多页场景用 DeepEncoder Base 模式 (1024×1024);单页高质量用 Gundam 模式
- Prefill 长度规划:每页 ~256 visual token + 文本输出 ~2500 token/页 → 32K 约容纳 10--12 页 prefill + decode
十、核心 Takeaway
- 问题定义精准:长序列 OCR 的瓶颈不在 Encoder 压缩率,而在 Decoder KV Cache 的无界增长
- R-SWA 设计优雅:Reference 全可见 + Output 滑动窗口,避免了 Linear Attention 的视觉模糊和 Vanilla SWA 的 reference 丢失
- "软遗忘"符合认知科学:128 token 窗口 + 全图 reference ≈ 人类抄书的工作记忆模式
- 改进代价极低:冻结 Encoder、200 万数据、4000 step → +6.22pp Overall,几乎 free lunch
- 通用性潜力大:R-SWA 是通用 parsing attention,不绑定 OCR
参考链接
- 论文 PDF:https://arxiv.org/pdf/2606.23050
- 论文 HTML:https://arxiv.org/html/2606.23050v1
- GitHub:https://github.com/baidu/Unlimited-OCR
- 基线 DeepSeek OCR:https://arxiv.org/abs/2510.18234
- OmniDocBench:https://github.com/opendatalab/OmniDocBench