← Back to list

PaddleOCR-VL-1.5: Achieving SOTA Document Parsing with a 0.9B Vision-Language Model

Mastering “in-the-wild” document parsing: How we optimized a compact 0.9B model to handle distortion, text spotting, and seal recognition…

Alex Zhang · 2026-01-31 08:06 · 0 claps · 5.4 min read
#paddleocr #vlm #document-parsing #ocr #idp
Open on Medium ↗
Wiki topics: LLM · Large Language Models MM · Multimodal & Generative Media

PaddleOCR-VL-1.5: Achieving SOTA Document Parsing with a 0.9B Vision-Language Model

Mastering “in-the-wild” document parsing: How we optimized a compact 0.9B model to handle distortion, text spotting, and seal recognition with 94.5% accuracy.

Performance of PaddleOCR-VL-1.5

Performance of PaddleOCR-VL-1.5

In the era of massive Multi-modal Large Language Models (MLLMs), bigger isn’t always better — especially when latency and deployment costs are at stake. While giants like GPT-4V and Qwen-VL dominate general benchmarks, specialized, lightweight models are becoming essential for edge deployment and high-throughput industrial applications.

Enter **PaddleOCR-VL-1.5**.

We are releasing a significant upgrade to our vision-language model, specifically engineered for document parsing. Despite its compact size of just 0.9B parameters, it achieves a new state-of-the-art (SOTA) accuracy of 94.5% on OmniDocBench v1.5.

But accuracy on clean PDFs is easy. Real-world documents are messy — crumpled, scanned, skewed, and poorly lit. This post breaks down how PaddleOCR-VL-1.5 handles these physical distortions via our new **Real5-OmniDocBench, introduces new capabilities like Text Spotting and Seal Recognition**, and provides a hands-on guide to running inference via vLLM and Transformers.

1. Why Robustness Matters: The “Real5” Benchmark

Standard OCR benchmarks often rely on clean, born-digital documents. However, enterprise workflows deal with physical paper that has been scanned, photographed, or mishandled.

To systematically evaluate robustness, we constructed the **Real5-OmniDocBench**. This dataset challenges models with five specific physical distortions:

  • Scanning Artifacts: Noise and grain typical of office scanners.
  • Geometric Skew: Angled documents that confuse standard bounding boxes.
  • Physical Warping: Crumpled or curved pages (e.g., open books).
  • Screen Capture: Moiré patterns and pixelation from taking photos of screens.
  • Lighting Variations: Shadows and uneven illumination.

Lighting Variations

Lighting Variations

PaddleOCR-VL-1.5 demonstrates significant resilience in these scenarios, outperforming larger open-source and commercial models by learning to parse content regardless of geometric deformation.

Architecture of PaddleOCR-VL-1.5

Architecture of PaddleOCR-VL-1.5

2. Core Capabilities & New Features

Beyond robustness, the 1.5 update introduces specific features requested by the developer community for complex document processing (IDP).

⚡ 0.9B Parameters, High Efficiency

The model is designed for speed. It maintains a super-compact architecture (0.9B), making it feasible for local deployment on consumer-grade GPUs while maintaining high inference speeds.

🎯 Text Spotting & Polygon Detection

We introduced a new paradigm for irregular shape localization. Unlike standard bounding boxes, PaddleOCR-VL-1.5 can perform precise polygon detection, essential for curved text in warped documents. The new Text Spotting task combines line-level localization and recognition into a single pass.

irregular shape localization

irregular shape localization

💮 Seal Recognition & Multilingual Support

For official documents (contracts, invoices), distinct elements like stamps and seals are critical.

  • Seal Recognition: Newly added capability to detect and read text within official stamps.

Seal Recognition

Seal Recognition

  • Expanded Languages: Improved support for historical texts (Ancient Chinese), multilingual tables, and added support for Tibetan and Bengali.
  • Form Elements: Enhanced recognition of underscores and checkboxes.

📄 Handling Long Documents

RAG (Retrieval-Augmented Generation) pipelines often suffer when tables or paragraphs are split across pages. PaddleOCR-VL-1.5 supports automatic cross-page table merging and cross-page paragraph header recognition, solving the context fragmentation problem in long PDF parsing.

3. Hands-on Guide: How to Use It

PaddleOCR-VL-1.5 supports multiple inference backends. Below is the setup for the official PaddlePaddle backend and the Hugging Face Transformers integration.

Installation

First, ensure you have the correct dependencies. Note that we recommend PaddlePaddle 3.2.1+ for optimal performance.

# Install PaddlePaddle (CUDA 12.6 example)
python -m pip install paddlepaddle-gpu==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/

# Install PaddleOCR with doc-parser support
python -m pip install -U "paddleocr[doc-parser]"

Note: macOS users should use Docker to set up the environment due to dependency constraints.

Method 1: Quick Inference (CLI & Python)

For immediate testing, you can use the Command Line Interface:

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

Or via Python for integration into your pipeline:

from paddleocr import PaddleOCRVL

# Initialize pipeline
pipeline = PaddleOCRVL()

# Predict
image_url = "https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/paddleocr_vl_demo.png"
output = pipeline.predict(image_url)

# Process results
for res in output:
    res.print()
    res.save_to_json(save_path="output")
    res.save_to_markdown(save_path="output")

Method 2: High-Performance Inference with vLLM

For production environments requiring high throughput, you can serve the model using vLLM.

Step 1: Start the Server (Docker)

docker run \
    --rm \
    --gpus all \
    --network host \
    ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-genai-vllm-server:latest-nvidia-gpu \
    paddleocr genai_server \
    --model_name PaddleOCR-VL-1.5-0.9B \
    --host 0.0.0.0 \
    --port 8080 \
    --backend vllm

Step 2: Client Request

from paddleocr import PaddleOCRVL

# Initialize with vLLM backend
pipeline = PaddleOCRVL(
    vl_rec_backend="vllm-server", 
    vl_rec_server_url="http://127.0.0.1:8080/v1"
)

output = pipeline.predict(image_url)

4. Using Hugging Face Transformers

PaddleOCR-VL-1.5–0.9B is also compatible with the transformers library, allowing seamless integration into existing PyTorch workflows.

Tip: While Transformers support is available, the official PaddlePaddle backend currently offers faster inference speeds and native support for page-level document parsing. The Transformers snippet below is ideal for element-level tasks (Spotting, Formula, Table).

# ensure the transformers v5 is installed
python -m pip install "transformers>=5.0.0"
from PIL import Image
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText

# 1. Configuration
model_path = "PaddlePaddle/PaddleOCR-VL-1.5"
task = "ocr"  # Options: 'ocr', 'table', 'chart', 'formula', 'spotting', 'seal'
image_path = "test.png"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

# 2. Load Model
# Use flash_attention_2 for better memory efficiency if hardware allows
model = AutoModelForImageTextToText.from_pretrained(
    model_path, 
    torch_dtype=torch.bfloat16,
    # attn_implementation="flash_attention_2" 
).to(DEVICE).eval()
processor = AutoProcessor.from_pretrained(model_path)

# 3. Preprocessing (Crucial for 'Spotting' task)
image = Image.open(image_path).convert("RGB")
if task == "spotting":
    # Upscale small images for better spotting accuracy
    threshold = 1500
    if image.width < threshold and image.height < threshold:
        image = image.resize((image.width * 2, image.height * 2), Image.LANCZOS)
    max_pixels = 2048 * 28 * 28
else:
    max_pixels = 1280 * 28 * 28

# 4. Generate
PROMPTS = {
    "ocr": "OCR:",
    "spotting": "Spotting:",
    "seal": "Seal Recognition:",
    # ... add other tasks
}

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": image},
            {"type": "text", "text": PROMPTS[task]},
        ]
    }
]

inputs = processor.apply_chat_template(
    messages,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    images_kwargs={"size": {"shortest_edge": processor.image_processor.min_pixels, "longest_edge": max_pixels}},
).to(model.device)

outputs = model.generate(**inputs, max_new_tokens=512)
print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:-1]))

5. Performance Benchmarks

How does it stack up against the competition?

OmniDocBench v1.5 Results PaddleOCR-VL-1.5 achieves 94.5% accuracy, setting a new SOTA. It outperforms its predecessor and competes favorably with much larger models like Qwen2-VL (Instruct) in specialized document tasks.

OmniDocBench v1.5 Results

OmniDocBench v1.5 Results

Inference Speed When processing PDF documents on a single NVIDIA A100 (Batch Size=512), the model maintains high throughput for end-to-end parsing (including rendering and markdown generation). This efficiency is key for users needing to process millions of pages without breaking the bank.

Inference Speed

Inference Speed

Conclusion

PaddleOCR-VL-1.5 represents a shift towards “practical AI” — models that are small enough to run anywhere but smart enough to handle the messy reality of physical documents. Whether you are digitizing archives, automating invoice processing, or building RAG pipelines, this 0.9B model offers a compelling balance of speed and accuracy.

Ready to try it? Check out the full documentation on GitHub/PaddleOCR or PaddleOCR-VL-1.5 on HuggingFace.


메타데이터
post_id
9cb278ec5d5a
slug
paddleocr-vl-1-5-achieving-sota-document-parsing-with-a-0-9b-vision-language-model-9cb278ec5d5a
url
https://medium.com/@alex_paddleocr/paddleocr-vl-1-5-achieving-sota-document-parsing-with-a-0-9b-vision-language-model-9cb278ec5d5a
canonical_url
https://medium.com/@alex_paddleocr/paddleocr-vl-1-5-achieving-sota-document-parsing-with-a-0-9b-vision-language-model-9cb278ec5d5a
author_url
https://medium.com/@alex_paddleocr
status
ok
fetched_at
2026-07-15 05:17:59