D2: TrOCR ONNX export script (printed + handwritten, int8 quantization) D3: PP-DocLayout ONNX export script (download or Docker-based conversion) B3: Model Management admin page (PyTorch vs ONNX status, benchmarks, config) A4: TrOCR ONNX service with runtime routing (auto/pytorch/onnx via TROCR_BACKEND) A5: PP-DocLayout ONNX detection with OpenCV fallback (via GRAPHIC_DETECT_BACKEND) B4: Structure Detection UI toggle (OpenCV vs PP-DocLayout) with class color coding C3: TrOCR-ONNX.md documentation C4: OCR-Pipeline.md ONNX section added C5: mkdocs.yml nav updated, optimum added to requirements.txt Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.3 KiB
2.3 KiB
TrOCR ONNX Runtime
Uebersicht
TrOCR (Transformer-based OCR) kann sowohl mit PyTorch als auch mit ONNX Runtime betrieben werden. ONNX bietet deutlich reduzierten RAM-Verbrauch und schnellere Inferenz — ideal fuer den Offline-Betrieb auf Hardware Tier 2 (8 GB RAM).
Export-Prozess
Voraussetzungen
- Python 3.10+
optimum>=1.17.0(Apache-2.0)onnxruntime(bereits installiert via RapidOCR)
Export ausfuehren
python scripts/export-trocr-onnx.py --model both
Dies exportiert:
models/onnx/trocr-base-printed/(~85 MB fp32 → ~25 MB int8)models/onnx/trocr-base-handwritten/(~85 MB fp32 → ~25 MB int8)
Quantisierung
Int8-Quantisierung reduziert Modellgroesse um ~70% mit weniger als 2% Genauigkeitsverlust.
Runtime-Konfiguration
Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
TROCR_BACKEND |
auto |
Backend-Auswahl: auto, pytorch, onnx |
TROCR_ONNX_DIR |
(siehe unten) | Pfad zu ONNX-Modellen |
Backend-Modi
- auto (empfohlen): ONNX wenn verfuegbar, sonst PyTorch Fallback
- pytorch: Erzwingt PyTorch (hoeherer RAM, aber bewaehrt)
- onnx: Erzwingt ONNX (Fehler wenn Modell nicht vorhanden)
Modell-Pfade (Suchpfade)
$TROCR_ONNX_DIR/trocr-base-{variant}//root/.cache/huggingface/onnx/trocr-base-{variant}/(Docker)models/onnx/trocr-base-{variant}/(lokale Entwicklung)
Hardware-Anforderungen
| Metrik | PyTorch float32 | ONNX int8 |
|---|---|---|
| Modell-Groesse | ~340 MB | ~50 MB |
| RAM (Printed) | ~1.1 GB | ~300 MB |
| RAM (Handwritten) | ~1.1 GB | ~300 MB |
| Inferenz/Zeile | ~120 ms | ~40 ms |
| Mindest-RAM | 4 GB | 2 GB |
Benchmark
# PyTorch Baseline (Sprint 1)
python scripts/benchmark-trocr.py > benchmark-baseline.json
# ONNX Benchmark
python scripts/benchmark-trocr.py --backend onnx > benchmark-onnx.json
Benchmark-Vergleiche koennen im Admin unter /ai/model-management eingesehen werden.
Verifikation
Der Export-Script verifiziert automatisch, dass ONNX-Output weniger als 2% von PyTorch abweicht. Manuelle Verifikation:
# Im Container
python -c "
from services.trocr_onnx_service import is_onnx_available, get_onnx_model_status
print('Available:', is_onnx_available())
print('Status:', get_onnx_model_status())
"