PaddleOCR-VL-1.5 — 0.9Bパラメータで文書解析SOTAを更新
2026年1月29日、BaiduのPaddlePaddleチームがPaddleOCR-VL-1.5を公開した。0.9Bパラメータという軽量なVision-Language Modelで、文書解析ベンチマークOmniDocBench v1.5において94.5%の精度を達成し、GPT-4oやQwen2.5-VL-72Bといった大規模モデルを上回った。
PaddleOCR-VLとは
PaddleOCRはBaiduが開発するオープンソースのOCRツールキットで、100以上の言語をサポートしている。PaddleOCR-VLはその発展形で、Vision-Language Model(VLM)アーキテクチャを採用した文書解析モデル。
アーキテクチャは以下の2つのコンポーネントで構成される:
- 視覚エンコーダ: NaViT方式の動的解像度ViT(入力画像サイズに柔軟に対応)
- 言語モデル: ERNIE-4.5-0.3B
合計0.9Bパラメータと非常にコンパクトで、A100 1枚で推論可能。
v1.5の主な改善点
不規則形状の位置特定
業界初となるポリゴン検出ボックスに対応。傾き・折り曲げ・湾曲した文書でも正確に領域を検出する。従来の矩形ボックスでは対応できなかった実環境のスキャン文書に強い。
5つの実環境シナリオでSOTA
以下すべてのシナリオで既存モデルを上回る:
- スキャン文書
- 傾いた文書
- 折れた文書
- スクリーンキャプチャ
- 照明が悪い環境
テキストスポッティング・印鑑認識
テキスト行単位の検出・認識(テキストスポッティング)と印鑑認識を新たにサポート。それぞれの分野でSOTAを記録。
長文書対応
ページを跨ぐ表の自動マージと見出し認識に対応。長いPDFを解析する際のコンテンツ断片化を軽減する。
多言語拡張
v1.0の109言語から111言語に拡張。チベット語・ベンガル語が追加された。希少文字、古文書、多言語の表、下線、チェックボックスの認識精度も改善。
ベンチマーク比較
OmniDocBench v1.5(v1.0モデル時点のデータ)
| モデル | 総合スコア |
|---|---|
| PaddleOCR-VL | 92.56 |
| MinerU2.5-1.2B | 90.67 |
| GPT-4o | 上記以下 |
| Qwen2.5-VL-72B | 上記以下 |
v1.5ではこのスコアが94.5%に向上したとされるが、v1.5時点での他モデルとの詳細比較はまだ公開されていない。
個別指標(v1.0)
| 指標 | スコア |
|---|---|
| テキスト編集距離 | 0.035(最低=最良) |
| 数式CDM | 91.43 |
| 表TEDS | 89.76 |
| 読み順編集距離 | 0.043 |
olmOCR-Bench
ユニットテスト合格率80.0%で最高。特にArXiv文書(85.7%)、ヘッダー・フッター(97.0%)で強い。
推論速度
MinerU2.5と比較して、ページスループットが15.8%高速、トークンスループットが14.2%高速。GPU メモリ使用量はほぼ同等(43.7GB vs 41.9GB、A100)。
使い方
Apache 2.0ライセンスで公開されている。
インストール
pip install paddlepaddle-gpu==3.2.1
pip install -U "paddleocr[doc-parser]"
CLI
paddleocr doc_parser -i document.png
Python API
from paddleocr import PaddleOCRVL
pipeline = PaddleOCRVL()
output = pipeline.predict("document.png")
for res in output:
res.save_to_markdown(save_path="output")
HuggingFace Transformers
from PIL import Image
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
model_path = "PaddlePaddle/PaddleOCR-VL-1.5"
model = AutoModelForImageTextToText.from_pretrained(
model_path,
torch_dtype=torch.bfloat16
).to("cuda").eval()
processor = AutoProcessor.from_pretrained(model_path)
messages = [{"role": "user", "content": [
{"type": "image", "image": Image.open("document.png")},
{"type": "text", "text": "OCR:"}
]}]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True, return_tensors="pt"
)
outputs = model.generate(**inputs, max_new_tokens=512)
result = processor.decode(outputs[0])
vLLMバックエンドにも対応しており、大量文書の処理にはそちらが推奨されている。AMD GPU(ROCm 7.0)でもDay 0サポートあり。
ブラウザ実行は無理
0.9Bと軽量ではあるが、VLMをブラウザ(WebGPU/WASM)で動かすのは現状厳しい。量子化しても500MB前後のモデルダウンロードが必要で、推論時のVRAMも1〜2GB以上。PaddlePaddle独自フレームワーク前提のためONNX/WebGPU変換パスも整備されていない。
Webアプリに組み込むならAPI経由が現実的。PaddleJSでブラウザOCRを試みた際の問題はこちらの記事にまとめている。