TrOCR PL Base — experimental

Eksperymentalny checkpoint microsoft/trocr-base-printed dostrojony metodą LoRA do drukowanego tekstu polskiego. Model przyjmuje obraz pojedynczej linii, a nie całą stronę dokumentu.

Status

Experimental — nie jest jeszcze modelem produkcyjnym. Checkpoint wyraźnie poprawia angielski baseline na polskich liniach, ale pełny pipeline stron jest ograniczony przez segmentację i nie powinien być oceniany wynikiem samego recognizera.

Wyniki

Zbiór Zakres CER WER
syntetyczny validation 200 linii 4,86% 21,41%
real-lines-v1 75 ręcznie wyciętych realnych linii 11,11% 35,84%
real-lines-v1, EN baseline te same 75 linii 81,91% 100,16%
print-pilot-v1 2 pełne strony z OpenCV segmentacją 66,17% 86,08%

Realne cropy pochodzą z dwóch historycznych polskich stron public domain. Referencje przygotował jeden autor bez niezależnej drugiej weryfikacji. Pełny wynik stron obejmuje detekcję, segmentację, kolejność i rozpoznawanie; nie jest wynikiem samego checkpointu.

Benchmark i predykcje: OCR_engine/benchmarks/real-lines-v1 oraz experiments/2026-09-13.

Trening

  • baza: microsoft/trocr-base-printed, rewizja 93450be3f1ed40a930690d951ef3932687cc1892,
  • dane: PiotrSty/ocr-pl-lines, 2000 syntetycznych linii train + 200 validation,
  • 3 epoki, batch 8 na T4 x2,
  • LoRA dekodera attention (q_proj, k_proj, v_proj, out_proj),
  • 3 047 424 trenowanych parametrów (0,9044%),
  • najlepszy checkpoint wybrany po CER: epoka 3,
  • Transformers 4.57.6, PEFT 0.19.1,
  • jawnie wyrównana strata tokenowa, bez podwójnego przesunięcia etykiet.

Pełna proweniencja, hashe próbek i wersje pakietów znajdują się w run.json. Adapter LoRA jest zachowany w adapter/; model główny jest scalony i można go ładować bez PEFT.

Użycie

from PIL import Image
from transformers import TrOCRProcessor, VisionEncoderDecoderModel

model_id = "PiotrSty/trocr-pl-base"
processor = TrOCRProcessor.from_pretrained(model_id)
model = VisionEncoderDecoderModel.from_pretrained(model_id)

image = Image.open("line.png").convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
ids = model.generate(pixel_values, max_new_tokens=128)
print(processor.batch_decode(ids, skip_special_tokens=True)[0])

W silniku OCR model należy włączyć jawnie:

from ocr import OcrConfig, OcrEngine

config = OcrConfig(recognizer_pl="PiotrSty/trocr-pl-base", force_language="pl")
with OcrEngine(config) as engine:
    result = engine.recognize("document.png")

Ograniczenia

  • trenowany głównie na danych syntetycznych;
  • przetestowany tylko na małym pilocie historycznego druku;
  • niezweryfikowany na piśmie ręcznym, tabelach, formularzach i szerokim przekroju współczesnych dokumentów;
  • wymaga poprawnych cropów pojedynczych linii;
  • może degenerować na krótkich, zaszumionych liniach i znakach interpunkcyjnych;
  • confidence jest sygnałem niepewności, a nie skalibrowanym prawdopodobieństwem.
Downloads last month
13
Safetensors
Model size
0.3B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for PiotrSty/trocr-pl-base

Finetuned
(25)
this model

Evaluation results