演示 | GitHub | Hugging Face | 技术报告

PaddleOCR-VL 简介

PaddleOCR-VL 是一款面向文档解析的 SOTA 且资源高效的模型。其核心组件为 PaddleOCR-VL-0.9B,这是一种紧凑而强大的视觉语言模型(VLM),它由 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型组成,以实现精准的元素识别。该创新模型高效支持 109 种语言,并在识别复杂元素(如文本、表格、公式和图表)方面表现出色,同时保持极低的资源消耗。通过在广泛使用的公开基准与内部基准上的全面评测,PaddleOCR-VL 在页级文档解析与元素级识别两方面均达到 SOTA 表现。它显著优于现有方案,对比顶级 VLM 亦具强竞争力,并具备快速的推理速度。这些优势使其非常适合在真实场景中落地部署。

PaddleOCR-VL 的性能

核心特性

  1. 紧凑而强大的视觉-语言模型(VLM)架构: 我们提出了一种新颖的视觉-语言模型(VLM)架构,该模型专为资源高效的推理而设计,并在元素识别任务中实现了卓越的性能。通过将 NaViT 风格的动态高分辨率视觉编码器与轻量级 ERNIE-4.5-0.3B 语言模型相集成,我们显著提升了模型的识别能力和解码效率。这种集成在保持高精度的同时,有效降低了计算需求,使其非常适合高效、实用的文档处理应用。

  2. 文档解析领域的 SOTA 性能: PaddleOCR-VL 在页面级文档解析和元素级识别两方面均达到了行业领先(SOTA)的性能。它显著优于现有的基于流水线的解决方案,并在文档解析方面展现出与主流视觉-语言模型(VLMs)相比强劲的竞争力。此外,它在识别复杂的文档元素方面表现出色,例如文本、表格、公式和图表,使其能够应对各种具有挑战性的内容类型,包括手写文本和历史文献。这赋予了模型高度的通用性,使其适用于广泛的文档类型和应用场景。

  3. 多语言支持: PaddleOCR-VL 支持 109 种语言,覆盖了全球主要语种,包括但不限于中文、英文、日文、拉丁语、韩语,以及各种拥有不同书写系统和结构的语言,例如俄语(西里尔字母)、阿拉伯语、印地语(天城体)和泰语。这种广泛的语言覆盖,极大地增强了我们的系统在多语言和全球化文档处理场景中的适用性。

架构

PaddleOCR-VL 将复杂的文档解析任务分解为两个阶段。第一阶段 PP-DocLayoutV2 负责版面分析,定位语义区域并预测其阅读顺序。随后,第二阶段 PaddleOCR-VL-0.9B 基于这些版面预测,对文本、表格、公式和图表等多样化内容进行细粒度识别。最后,轻量级后处理模块聚合两阶段输出,并将最终文档格式化为结构化的 Markdown 和 JSON。

PaddleOCR-VL 的架构

案例展示

以下给出了若干使用 PaddleOCR-VL 的完整文档解析案例。更多示例请参阅我们的技术报告或试用在线演示。

案例1 案例2 案例3 案例4

快速开始

安装依赖

安装 PaddlePaddlePaddleOCR:

python -m pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
python -m pip install -U "paddleocr[doc-parser]"
python -m pip install https://paddle-whl.bj.bcebos.com/nightly/cu126/safetensors/safetensors-0.6.2.dev0-cp38-abi3-linux_x86_64.whl

基本用法

CLI:

paddleocr doc_parser -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_ocr_vl_demo.png

Python API:

from paddleocr import PaddleOCRVL

pipeline = PaddleOCRVL()
output = pipeline.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_ocr_vl_demo.png")
for res in output:
    res.print()
    res.save_to_json(save_path="output")
    res.save_to_markdown(save_path="output")

使用 vLLM 加速 VLM

  1. Start the VLM inference server (the default port is 8080):
docker run \
    --rm \
    --gpus all \
    --network host \
    ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlex-genai-vllm-server
# You can also use ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddlex-genai-vllm-server for the SGLang server
  1. Call the PaddleOCR CLI or Python API:
paddleocr doc_parser \
    -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_ocr_vl_demo.png \
    --vl_rec_backend vllm-server \
    --vl_rec_server_url http://127.0.0.1:8080
from paddleocr import PaddleOCRVL

pipeline = PaddleOCRVL(vl_rec_backend="vllm-server", vl_rec_server_url="http://127.0.0.1:8080")
output = pipeline.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/pp_ocr_vl_demo.png")
for res in output:
    res.print()
    res.save_to_json(save_path="output")
    res.save_to_markdown(save_path="output")

许可协议

PaddleOCR-VL 模型基于 Apache License 2.0 发布。

引用

如果您觉得 PaddleOCR-VL 对您有帮助,或希望在项目中使用它,欢迎引用我们的技术报告:

@misc{paddleocrvl2025technicalreport,
      title={PaddleOCR-VL: Boosting Multilingual Document Parsing via a 0.9B Ultra-Compact Vision-Language Model},
      author={Cui, C. et al.},
      year={2025},
      primaryClass={cs.CL},
      howpublished={\url{https://ernie.baidu.com/blog/publication/PaddleOCR-VL_Technical_Report.pdf}}
}