过去几个月,PaddleOCR相继发布了PaddleOCR-VL和PaddleOCR-VL-1.5,凭借强大而稳定的文档解析能力,已经被业界广泛用于大模型训练数据和应用数据构建。PaddleOCR-VL-1.5更是创新性地支持了异形框定位,在真实文档场景中表现优异。

最近,PaddleOCR正式推出PaddleOCR-VL-1.6,PaddleOCR-VL-1.6是在PaddleOCR-VL-1.5的基础上,通过对数据和训练策略的极致优化,在OmniDocBench v1.6 突破96.3%,在OmniDocBench v1.5、Real5-OmniDocBench上同样刷新SOTA,文本、公式、表格识别全面领先开源与闭源方案。此外,表格、古籍、生僻字识别大幅提升,印章、spotting、图表识别等多场景均有显著增强。值得一提的是,模型结构与PaddleOCR-VL-1.5完全一致,零成本适配,即换即用。

 

 

 

PaddleOCR-VL-1.6代码和模型权重已全面开源,欢迎下载使用。

  • PaddleOCR官网:http://paddleocr.com
  • Github:http://github.com/PaddlePaddle/PaddleOCR
  • ModelScope:https://modelscope.cn/models/PaddlePaddle/PaddleOCR-VL-1.6

效果预览

1. 表格识别场景

 

 

 

 

2. 图表识别场景

 

 

 

 

3. 公式识别场景

 

 

 

4. 古籍识别场景

 

 

 

 

 

 

5. 生僻字识别场景

 

 

 

6. 印章识别场景

 

 

 

 

7. 真实畸变场景

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

核心指标

1. OmniDocBench v1.6指标

OmniDocBench v1.6是OmniDocBench的最新版本,在原有版本新增了较多困难样本。PaddleOCR-VL-1.6总指标96.33%,领跑全球所有通用大模型和专用OCR模型。

 

 

 

2. Real5-OmniDocBench指标

Real5-OmniDocBench是基于OmniDocBench v1.5构建的多场景文档解析评估集,涵盖了扫描、弯折、屏幕拍照、光线变化、倾斜5大场景,PaddleOCR-VL-1.6总指标93.19%,全面领先,总指标领先Gemini3 Pro近4个百分点。

 

 

核心技术点

1. 整体框架:模型驱动的数据构建与渐进式后训练

PaddleOCR-VL-1.6 并不是一次简单的模型放大或数据堆叠,而是在 PaddleOCR-VL-1.5 已经具备强大基础能力的前提下,进一步追问:模型真正没有学好的地方在哪里?通过对历史模型的分析发现,剩余错误并非均匀分布,而是集中出现在一批欠优化区域中——包括预测不稳定、数据覆盖不足、监督信号不可靠等局部弱区。

因此,PaddleOCR-VL-1.6 采用了 “模型驱动的数据引擎 + 渐进式后训练策略” 的整体优化框架:先从当前模型出发定位弱点,再围绕这些弱点构建高价值数据,最后通过继续预训练、监督微调、强化学习的渐进式后训练流程,将新增数据的价值稳定注入模型。最终,在不改变 0.9B 高效架构的前提下,模型实现了更强的文档解析性能、鲁棒性和泛化能力。

 

从整体优化路线可以看到,PaddleOCR-VL-1.6 的升级路径非常清晰:左侧延续 PaddleOCR-VL-1.5 的高效架构和任务体系,中间通过欠优化区域驱动的数据引擎挖掘并修复模型弱点,右侧再通过继续预训练、监督微调、强化学习三阶段后训练逐步吸收高质量数据。整个流程体现了一个核心思想:不是通过盲目数据扩增来让模型变得更大,而是通过对模型弱点的定向分析,让每一份数据更精准地服务于模型能力提升。

2. 数据引擎:从“盲目扩量”到“面向模型弱点的精准优化”

PaddleOCR-VL-1.6 提出的欠优化区域驱动的数据引擎,是模型提升的核心数据机制。它不是随机扩充样本,而是围绕模型残余弱点进行针对性挖掘与修复。

具体来说,数据引擎从三个视角定位 欠优化区域:决策边界脆弱区域用于挖掘在训练末期不同权重或语义不变扰动下不稳定的样本,定位模型不稳定的决策边界;数据分布稀疏覆盖区域用于发现特征空间中覆盖不足、容易被主流分布淹没的长尾区域;不可靠的监督信号区域用于识别原始训练集中监督信号不可靠的样本。随后,前两类区域被用作种子,从大规模内部数据池中进行定向检索,以扩展模型未充分覆盖的分布;第三类区域则用于修正已有标注噪声。对于新检索和待修复样本,系统进一步结合多专家共识与 ERNIE 5.0 的 判别-修正 流程,构建更可靠高质量的训练数据。

由此,PaddleOCR-VL-1.6 的数据建设从传统的规模驱动,转向了更高效的模型弱点驱动。

 

图中进一步展示了数据引擎的内部工作方式:左侧对应三类 欠优化区域 的挖掘过程,中间通过定向检索、多专家共识和迭代式标注修复完成数据增强,最终沉淀为更高质量的训练数据。

这个流程的关键价值在于,它同时解决了“缺数据”和“数据不可靠”两个问题:既扩展了模型在边界分布上的覆盖,也提升了监督信号的可信度,更确定了数据的难度,从而为后续 继续预训练、监督微调 和 强化学习 提供更稳定的数据基础。

3. 强化学习优化:以高潜力样本筛选稳定小模型强化学习优化

在强化学习阶段,PaddleOCR-VL-1.6 面临一个典型小模型挑战:0.9B 模型,尤其是其中语言模型的部分仅有 0.3B,对强化学习数据质量和奖励信号非常敏感。如果样本过难,模型无法产生有效正向轨迹;如果样本过易,训练几乎没有提升空间;如果采样轨迹之间奖励差异过小,GRPO 也难以形成有效的相对优势信号。

为此,PaddleOCR-VL-1.6 设计了面向GRPO的高潜力样本挖掘策略,用 监督微调后的模型对候选样本进行多次轨迹采样,并从提升潜力、生成不确定性和奖励方差三个维度筛选真正“可学习、有区分度、有收益空间”的样本。同时,针对文档解析任务输出形式复杂、二值奖励过稀疏的问题,PaddleOCR-VL-1.6 进一步精心设计可验证的奖励函数,将输出映射到任务相关的规范表示,并通过合法性、结构修正约束、真实得分三个维度提供稳定、可验证、任务对齐的奖励信号。

最终,强化学习不再是简单的额外训练阶段,而成为对强 监督微调后的模型的高精度收尾优化,进一步提升性能并规范输出风格。

 

模型推理

使用Paddlepaddle框架推理

请确保安装 PaddlePaddle 框架 3.2.1 或更高版本,以及特殊版本的 safetensors。 对于 macOS 用户,请使用 Docker 配置环境。

环境安装:

# The following command installs the PaddlePaddle version for CUDA 12.6. For other CUDA versions and the CPU version, please refer to https://www.paddlepaddle.org.cn/en/install/quick?docurl=/documentation/docs/en/develop/install/pip/linux-pip_en.html
python -m pip install paddlepaddle-gpu==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
python -m pip install -U "paddleocr[doc-parser]>=3.6.0"

命令行使用:

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

python API使用:

from paddleocr import PaddleOCRVL
pipeline = PaddleOCRVL(pipeline_version="v1.6")
output = pipeline.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/paddleocr_vl_demo.png")
for res in output:
    res.print()
    res.save_to_json(save_path="output")
    res.save_to_markdown(save_path="output")

使用transformers推理

PaddleOCR-VL-1.6-0.9B 模型可通过 transformers 库实现无缝推理,支持全面的文本检测以及对公式、表格、图表和印章等复杂元素的识别。

环境安装:

# ensure the transformers v5 is installed
python -m pip install "transformers>=5.0.0"

推理脚本

from PIL import Image
import torch
from modelscope import AutoProcessor, AutoModelForImageTextToText
# ---- Settings ----
model_path = "PaddlePaddle/PaddleOCR-VL-1.6"
image_path = "test.png"
task = "ocr" # Options: 'ocr' | 'table' | 'chart' | 'formula' | 'spotting' | 'seal'
# ------------------
# ---- Image Preprocessing For Spotting ----
image = Image.open(image_path).convert("RGB")
orig_w, orig_h = image.size
spotting_upscale_threshold = 1500
if task == "spotting" and orig_w < spotting_upscale_threshold and orig_h < spotting_upscale_threshold:
    process_w, process_h = orig_w * 2, orig_h * 2
    try:
        resample_filter = Image.Resampling.LANCZOS
    except AttributeError:
        resample_filter = Image.LANCZOS
    image = image.resize((process_w, process_h), resample_filter)
# Set max_pixels: use 1605632 for spotting, otherwise use default ~1M pixels
max_pixels = 2048 * 28 * 28 if task == "spotting" else 1280 * 28 * 28
# ---------------------------
# -------- Inference --------
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
PROMPTS = {
    "ocr": "OCR:",
    "table": "Table Recognition:",
    "formula": "Formula Recognition:",
    "chart": "Chart Recognition:",
    "spotting": "Spotting:",
    "seal": "Seal Recognition:",
}
model = AutoModelForImageTextToText.from_pretrained(model_path, torch_dtype=torch.bfloat16).to(DEVICE).eval()
processor = AutoProcessor.from_pretrained(model_path)
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)
result = processor.decode(outputs[0][inputs["input_ids"].shape[-1]:-1])
print(result)
# ---------------------------

模型微调

ms-swift 支持了 PaddleOCR-VL-1.6 系列模型的微调与RL。ms-swift是魔搭社区官方提供的大模型训练框架,开源地址:https://github.com/modelscope/ms-swift

环境准备:

# pip install git+https://github.com/modelscope/ms-swift.git
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .
pip install "transformers>=5" -U

微调脚本如下:

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model PaddlePaddle/PaddleOCR-VL-1.6 \
    --dataset 'AI-ModelScope/LaTeX_OCR:human_handwrite#2000' \
    --load_from_cache_file true \
    --split_dataset_ratio 0.01 \
    --tuner_type lora \
    --torch_dtype bfloat16 \
    --num_train_epochs 1 \
    --padding_free true \
    --attn_impl flash_attention_2 \
    --per_device_train_batch_size 16 \
    --per_device_eval_batch_size 16 \
    --learning_rate 1e-4 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --target_modules all-linear \
    --freeze_vit true \
    --freeze_aligner true \
    --gradient_accumulation_steps 1 \
    --eval_steps 50 \
    --save_steps 50 \
    --save_total_limit 2 \
    --logging_steps 5 \
    --max_length 4096 \
    --output_dir output \
    --warmup_ratio 0.05 \
    --dataset_num_proc 4 \
    --dataloader_num_workers 4

自定义数据集格式:

{"messages": [{"role": "user", "content": "<image><OCR:"}, {"role": "assistant", "content": "ms-swift是魔搭社区提供的大模型与多模态大模型微调部署框架"}], "images": ["/xxx/x.png"]}
{"messages": [{"role": "user", "content": "<image>Table Recognition:"}, {"role": "assistant", "content": "..."}], "images": ["/xxx/y.png"]}

训练后对验证集推理:

CUDA_VISIBLE_DEVICES=0 \
swift infer \
  --adapters output/vx-xxx/checkpoint-xxx \
  --stream true \
  --load_data_args true

 

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐