1. 开篇:为什么 Unlimited-OCR 值得关注

2026 年 6 月,百度开源了 Unlimited-OCR——一个只有 3B 参数却能一次性解析 100 页 PDF 的 OCR 模型。截至目前,GitHub Star 已突破 2.6 万,成为 OCR 领域最受关注的开源项目。

传统 OCR 工具(Tesseract、PaddleOCR)处理长文档时采用"逐页独立识别"策略,每翻一页就清空上下文。这导致: - 上下文断裂:跨页表格、跨页段落无法连贯理解 - 重复计算:每页都要重新建立特征提取器 - KV Cache 爆炸:长文档的注意力缓存呈线性增长

Unlimited-OCR 通过创新的 R-SWA(Reference Sliding Window Attention) 机制彻底解决了这个问题。本文将深度解析其技术原理、最新进展(vLLM 集成、企业级服务)、部署指南和实战案例。

相关推荐阅读: - AI 模型部署指南系列 - 本地 LLM 推理优化实战

2. 核心技术:R-SWA 注意力机制

2.1 问题:长文档的 KV Cache 灾难

传统 Transformer 处理长文档时,KV Cache(Key-Value 缓存)随文档长度线性增长。处理 100 页 PDF 时,KV Cache 可能占用数十 GB 显存,导致: - 显存溢出(OOM) - 推理延迟急剧增加 - 无法在消费级 GPU 上运行

2.2 解决方案:R-SWA 机制

Unlimited-OCR 的核心创新是 R-SWA(Reference Sliding Window Attention),设计灵感来自人类阅读长文档的方式:

人类阅读长文档时:
1. 保持一个"滑动窗口"的工作记忆(当前阅读的几页)
2. 通过引用机制回溯关键信息(前面的重要内容)
3. 不会每翻一页就忘记前面所有内容

R-SWA 的技术实现:

PYTHON
# R-SWA 核心逻辑伪代码
class ReferentialSlidingWindowAttention(nn.Module):
    def __init__(self, window_size=2048, ref_size=512):
        self.window_size = window_size  # 当前窗口(局部细节)
        self.ref_size = ref_size        # 参考窗口(全局上下文)

    def forward(self, hidden_states, past_kv):
        # 1. 当前窗口注意力(局部细节)
        local_attn = self.local_attention(hidden_states[-self.window_size:])

        # 2. 参考窗口注意力(全局上下文)
        ref_attn = self.ref_attention(past_kv[-self.ref_size:])

        # 3. 门控融合:局部 + 全局
        gate = self.sigmoid(self.gate_proj(hidden_states))
        fused = gate * local_attn + (1 - gate) * ref_attn
        return fused

关键优势: - 固定内存占用:无论文档多长,注意力缓存只维护 window_size + ref_size - 连续上下文:跨页信息通过参考窗口保持连贯 - 高效推理:32K 上下文长度下,单次前向传播完成数十页解析

2.3 MoE 架构:3B 总参数,0.5B 激活

Unlimited-OCR 采用 Mixture of Experts(MoE) 架构:

指标 数值
总参数量 30 亿(3B)
每步激活参数 5 亿(0.5B)
上下文长度 32K tokens
支持分辨率 最高 1024×1024
支持语言 中/英/日/韩/德/法等

MoE 的好处:模型容量大(3B),但推理成本低(每步只激活 0.5B)。这意味着在消费级 GPU(如 RTX 3090/4090)上就能跑起来。

3. 最新进展:vLLM 集成与企业级服务

3.1 vLLM 社区支持(2026-06-28)

2026 年 6 月 28 日,vLLM 社区正式合并了对 Unlimited-OCR 的支持 PR,实现了 vLLM 推理加速。

vLLM 的优势: - PagedAttention:高效管理 KV Cache,显存利用率提升 2-4 倍 - Continuous Batching:动态批处理,吞吐量提升 3-5 倍 - Tensor Parallelism:多 GPU 并行推理

使用 vLLM 部署 Unlimited-OCR:

BASH
# 安装 vLLM
pip install vllm

# 启动 vLLM 服务
python -m vllm.entrypoints.openai.api_server \
  --model baidu/Unlimited-OCR \
  --tensor-parallel-size 1 \
  --max-model-len 32768 \
  --port 8000

# 调用 API(兼容 OpenAI 格式)
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "baidu/Unlimited-OCR",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "image_url", "image_url": {"url": "file:///path/to/document.pdf"}},
          {"type": "text", "text": "请解析这份文档"}
        ]
      }
    ]
  }'

3.2 百度 AI 开放平台企业级服务

百度已上线 Unlimited-OCR 企业级服务,提供: - 托管式 API:无需自建 GPU 服务器 - SLA 保障:99.9% 可用性 - 企业级安全:数据加密、访问控制、审计日志

适用场景: - 无 GPU 硬件的团队 - 需要高可用保障的生产环境 - 快速原型验证

3.3 社区反馈与生态

截至 2026 年 10 月,Unlimited-OCR 社区生态: - GitHub Star:2.6 万+ - Hugging Face 下载量:50 万+ - 社区贡献: - Docker 镜像(官方 + 社区版本) - LangChain 集成 - LlamaIndex 文档加载器 - Gradio Web UI

4. 性能评测:对比商业 OCR 服务

4.1 OmniDocBench 基准测试

模型 OmniDocBench v1.6 备注
Unlimited-OCR 93.92% 百度 2026.06 开源
DeepSeek-OCR 87.70% 前代基线
GPT-4o ~90% 闭源大模型
Google Vision API ~88% 商业 API
Azure AI Vision ~87% 商业 API
PaddleOCR v4 ~85% 传统 OCR
Tesseract 5 ~78% 开源经典

4.2 长文档解析能力对比

特性 Unlimited-OCR Google Vision Azure AI PaddleOCR
长文档连续识别 ✅ 32K 上下文 ❌ 按页计费 ❌ 按页计费 ❌ 逐页独立
跨页表格 ✅ 完整提取 ❌ 截断 ❌ 截断 ❌ 截断
版面理解 ✅ 标题/表格/代码 ⚠️ 基础 ⚠️ 基础 ⚠️ 基础
数据隐私 ✅ 本地部署 ❌ 云端处理 ❌ 云端处理 ✅ 本地部署
成本 ✅ 免费(自有 GPU) ❌ 按页计费 ❌ 按页计费 ✅ 免费

4.3 速度对比

50 页 PDF 处理时间: - Unlimited-OCR(vLLM):~15 秒(1 次推理) - Unlimited-OCR(原生):~45 秒(1 次推理) - Google Vision API:~50 秒(50 次 API 调用) - PaddleOCR:~750 秒(50 次推理) - Tesseract:~1250 秒(50 次推理)

结论:vLLM 加速后的 Unlimited-OCR 在长文档场景下速度最快,且成本最低。

5. 部署指南:三种方式

5.1 方式一:Hugging Face Transformers(最简单)

BASH
# 安装依赖
pip install transformers torch pillow

# Python 代码
from transformers import AutoModelForVision2Seq, AutoProcessor
from PIL import Image
import torch

# 加载模型
model = AutoModelForVision2Seq.from_pretrained(
    "baidu/Unlimited-OCR",
    torch_dtype=torch.float16,
    device_map="auto"
)
processor = AutoProcessor.from_pretrained("baidu/Unlimited-OCR")

# 处理文档
image = Image.open("document.pdf")  # 支持 PDF、图片
inputs = processor(images=image, text="解析这份文档", return_tensors="pt")
inputs = {k: v.to(model.device) for k, v in inputs.items()}

# 推理
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=32768)

result = processor.decode(outputs[0], skip_special_tokens=True)
print(result)

5.2 方式二:vLLM 加速(推荐生产环境)

BASH
# 安装 vLLM
pip install vllm

# 启动服务
python -m vllm.entrypoints.openai.api_server \
  --model baidu/Unlimited-OCR \
  --tensor-parallel-size 1 \
  --max-model-len 32768 \
  --port 8000

# 批量处理脚本
import requests
import base64
import os

def ocr_document(pdf_path):
    with open(pdf_path, "rb") as f:
        pdf_base64 = base64.b64encode(f.read()).decode()

    response = requests.post(
        "http://localhost:8000/v1/chat/completions",
        json={
            "model": "baidu/Unlimited-OCR",
            "messages": [{
                "role": "user",
                "content": [
                    {"type": "image_url", "image_url": {"url": f"data:application/pdf;base64,{pdf_base64}"}},
                    {"type": "text", "text": "解析这份文档为 Markdown 格式"}
                ]
            }]
        }
    )
    return response.json()["choices"][0]["message"]["content"]

# 批量处理
for pdf_file in os.listdir("./documents"):
    if pdf_file.endswith(".pdf"):
        result = ocr_document(f"./documents/{pdf_file}")
        with open(f"./results/{pdf_file}.md", "w") as f:
            f.write(result)
        print(f"Processed: {pdf_file}")

5.3 方式三:Docker 容器化部署

BASH
# 拉取官方镜像
docker pull baidu/unlimited-ocr:latest

# 启动服务
docker run -d \
  --name unlimited-ocr \
  --gpus all \
  -p 8000:8000 \
  -v $(pwd)/models:/models \
  -v $(pwd)/results:/results \
  baidu/unlimited-ocr:latest

# 处理文档
docker exec unlimited-ocr python infer.py \
  --model /models/Unlimited-OCR \
  --input /results/document.pdf \
  --output /results/output.md \
  --mode multi

# Docker Compose 配置
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  unlimited-ocr:
    image: baidu/unlimited-ocr:latest
    ports:
      - "8000:8000"
    volumes:
      - ./models:/models
      - ./results:/results
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    environment:
      - MODEL_PATH=/models/Unlimited-OCR
      - MAX_MODEL_LEN=32768
EOF

docker-compose up -d

6. 实战案例

6.1 案例 1:100 页技术手册解析

场景:将 100 页扫描版技术手册转为可编辑 Markdown。

BASH
# 输入:scanned_manual.pdf (100 页)
# 输出:editable_manual.md

python infer.py \
  --model baidu/Unlimited-OCR \
  --input scanned_manual.pdf \
  --output editable_manual.md \
  --mode multi \
  --format markdown \
  --context-length 32768

# 耗时:约 90 秒(vLLM 加速)
# 输出质量:标题层级、代码块、表格结构均正确识别

6.2 案例 2:财务报表跨页表格提取

场景:财务报表中有跨页的大表格,传统工具会截断。

PYTHON
from unlimited_ocr import UnlimitedOCR

ocr = UnlimitedOCR(model_path="baidu/Unlimited-OCR")

# R-SWA 的连续上下文确保跨页表格完整提取
result = ocr.extract_tables(
    input_path="financial_report.pdf",
    output_format="csv",
    context_length=32768
)

# 输出:完整的跨页表格,无截断
result.to_csv("extracted_tables.csv")

6.3 案例 3:学术论文批量解析

场景:批量解析 100 篇学术论文 PDF,提取摘要、方法、实验结果。

BASH
#!/bin/bash
# batch_parse_papers.sh

INPUT_DIR="./papers"
OUTPUT_DIR="./parsed"
MODEL="baidu/Unlimited-OCR"

mkdir -p "$OUTPUT_DIR"

for pdf in "$INPUT_DIR"/*.pdf; do
    filename=$(basename "$pdf" .pdf)
    echo "Processing: $filename"

    python infer.py \
      --model "$MODEL" \
      --input "$pdf" \
      --output "$OUTPUT_DIR/${filename}.md" \
      --mode multi \
      --extract-structure  # 提取标题、摘要、章节

    echo "Done: $filename"
done

echo "All papers processed."

7. 总结与建议

7.1 Unlimited-OCR 的核心优势

  • ✅ R-SWA 注意力机制:32K 上下文连续解析,解决长文档 OCR 痛点
  • ✅ MoE 架构:3B 总参数,0.5B 激活,消费级 GPU 可运行
  • ✅ SOTA 准确率:OmniDocBench 93.92%
  • ✅ vLLM 加速:生产环境吞吐量提升 3-5 倍
  • ✅ 完全开源:Apache 2.0 协议,无 API 调用费用

7.2 适用场景

推荐使用: - 长文档批量解析(技术手册、财务报表、学术论文) - 跨页表格提取 - 多语言混合文档识别 - 数据隐私要求高的场景(本地部署)

不推荐使用: - 单页简单文本(用 Tesseract 更轻量) - 实时视频流 OCR(延迟较高) - 无 GPU 环境(CPU 推理太慢,建议用百度企业级服务)

7.3 下一步行动

  1. 快速体验:使用 Hugging Face 在线 Demo
  2. 本地部署:参考第 5 节部署指南
  3. 生产环境:使用 vLLM 加速 + Docker 容器化
  4. 企业级服务:访问 百度 AI 开放平台

参考链接: - GitHub 仓库:baidu/Unlimited-OCR - Hugging Face 模型:baidu/Unlimited-OCR - vLLM 文档:vLLM 官方文档 - 百度企业级服务:Unlimited-OCR 企业版