标签: PDF处理

  • Unlimited OCR:百度开源的「一次前向通读整本 PDF」的 OCR 大模型

    Unlimited OCR:百度开源的「一次前向通读整本 PDF」的 OCR 大模型

    项目简介

    Unlimited OCR 是百度开源的一款端到端 OCR 大模型,主打「One-shot Long-horizon Parsing」——在单次前向传播中,直接解析长达 32K token 的整份 PDF 或连续多页图像,而不是把文档切碎后一页页跑。

    它以 DeepSeek-OCR 的编码器为基础,但把解码器的所有注意力层替换为自研的 Reference Sliding Window Attention(R-SWA),让 KV Cache 在解码过程中保持恒定。换句话说:输出越长,显存和速度越稳定,不会出现传统 LLM 解码器「越写越慢」的窘境。

    核心亮点

    • 恒定 KV Cache:R-SWA 替换标准自注意力,长文档生成时显存占用平稳、解码速度不衰减。
    • 一次前向通读多页:标准 32K 上下文内,可一次完成数十页文档解析,保留跨页上下文。
    • 三种部署形态:提供 Hugging Face transformers、vLLM Docker 镜像、SGLang OpenAI 兼容服务三种开箱方案。
    • 通用解析机制:R-SWA 不局限于 OCR,论文指出同样适用于 ASR、翻译等需要长序列输出的任务。
    • 全链路开放:代码与模型权重均托管在 GitHub 与 Hugging Face,MIT 协议可商用。

    安装与快速上手

    项目环境要求:Python 3.12.3 + CUDA 12.9 通过验证;单张 NVIDIA GPU 即可体验。

    1. Transformers 快速体验

    # 依赖
    pip install torch==2.10.0 torchvision==0.25.0 transformers==4.57.1 Pillow==12.1.1
    pip install matplotlib==3.10.8 einops==0.8.2 addict==2.4.0 easydict==1.13 pymupdf==1.27.2.2 psutil==7.2.2
    
    # 加载模型
    from transformers import AutoModel, AutoTokenizer
    model_name = 'baidu/Unlimited-OCR'
    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
    model = AutoModel.from_pretrained(model_name, trust_remote_code=True,
                                      use_safetensors=True, torch_dtype=torch.bfloat16).eval().cuda()
    
    # 单图解析(gundam 配置:base_size=1024, image_size=640, crop_mode=True)
    model.infer(tokenizer, prompt='<image>document parsing.',
                image_file='your_image.jpg', output_path='./outputs',
                base_size=1024, image_size=640, crop_mode=True,
                max_length=32768, save_results=True)
    
    # 多页 / PDF
    model.infer_multi(tokenizer, prompt='<image>Multi page parsing.',
                      image_files=['page1.png', 'page2.png'], output_path='./outputs',
                      image_size=1024, max_length=32768, save_results=True)
    

    2. vLLM 生产部署

    # CUDA 13.0
    docker pull vllm/vllm-openai:unlimited-ocr
    # Hopper GPU 使用 cu129 镜像
    docker pull vllm/vllm-openai:unlimited-ocr-cu129
    # 官方 recipe: https://recipes.vllm.ai/baidu/Unlimited-OCR
    

    3. SGLang 批处理服务

    uv venv --python 3.12
    source .venv/bin/activate
    uv pip install wheel/sglang-*.whl kernels==0.11.7 pymupdf==1.27.2.2
    
    python -m sglang.launch_server --model baidu/Unlimited-OCR --served-model-name Unlimited-OCR \
      --attention-backend fa3 --page-size 1 --context-length 32768 \
      --enable-custom-logit-processor --disable-overlap-schedule \
      --skip-server-warmup --host 0.0.0.0 --port 10000
    
    # 并发批跑目录或 PDF
    python infer.py --pdf ./examples/document.pdf --output_dir ./outputs --concurrency 8 --image_mode gundam
    

    典型使用场景

    1. 学术论文整本转 Markdown:把 30 页 PDF 直接丢给模型,一次前向输出带标题层级、公式占位、表格结构的 Markdown,省去分块合并。
    2. RAG 知识库文档预处理:批量解析合同、手册、财报,保留原文版面和段落结构,作为高质量向量库原始文本。
    3. 票据与表格版面结构化:针对扫描发票、银行流水、Excel 截图等,输出键值对或 JSON 结构化结果。

    推荐理由

    最近大家注意力都在 Coding Agent 上,OCR 赛道反而被低估。Unlimited-OCR 真正的价值在于把「长序列输出」这件事做扎实了——R-SWA 让 KV Cache 不再线性膨胀,这是端到端文档理解从 demo 走向生产的关键。

    另外百度这次放出了完整的训练、推理、部署、微调(ms-swift)链路,并且兼容 vLLM / SGLang 两大推理框架,对工程落地非常友好。如果你在做 RAG、知识库、文档数字化,它很可能成为你管道里的默认 OCR 组件。

    资源下载

    • GitHub 仓库:https://github.com/baidu/Unlimited-OCR
    • Hugging Face 模型:https://huggingface.co/baidu/Unlimited-OCR
    • 在线 Demo:https://huggingface.co/spaces/baidu/Unlimited-OCR
    • arXiv 论文:https://arxiv.org/abs/2606.23050
    • ModelScope 模型:https://modelscope.cn/models/PaddlePaddle/Unlimited-OCR
    • 百度智能云:https://cloud.baidu.com/doc/OCR/s/fmr1p39gb