Poneglyph · LightOnOCR-3 0.8B · consolidation CER
OCR de pages complètes de manga en français : transcription et bbox normalisées
0–1000, dans le format natif  suivi du texte.
Prompt utilisateur grounding, template natif avec enable_thinking=False.
Les annotations concernent les zones de texte validées, pas les descriptions de cases.
Base : lightonai/LightOnOCR-3-0.8B
à la révision 36d8636925327c671bd8e479c517a004f7566bd9. Architecture native Qwen3.5, poids BF16.
Entraînement et sélection
Départ : meilleur checkpoint de la première phase pleine page ; checkpoint retenu : étape 111 de la consolidation CER, première époque. Cette phase utilise un nouvel AdamW/scheduler : LR décodeur 3e-6, merger 1,5e-6, vision 7,5e-7 ; trois époques maximum, batch physique 1 × accumulation 8. 793 333 056 paramètres entraînés sur 852 985 920 : décodeur, merger et quatre derniers blocs vision. Poids/états Adam FP32, autocast BF16, kernels Blackwell SM120. Images pleine page, bord long maximum 2048 pixels, sans augmentation dans cette phase.
Loss sur la réponse uniquement : texte/séparateurs 1, marqueurs/coordonnées 0,2, EOS 2. Les chiffres contenus dans la transcription gardent le poids 1. La sélection utilise exclusivement le CER minimum par génération sur les 189 pages de validation, avec protection du modèle initial si le gain est insuffisant. Le WER et les bbox sont suivis. Les données restent figées : 882 pages train, 189 validation, 189 test ; aucune page de test ne participe au train ou à la sélection.
Résultats
| Mesure | Départ · validation | Retenu · validation | Test final |
|---|---|---|---|
| CER | 1.166% | 1.040% | 1.066% |
| WER | 2.548% | 2.291% | 2.224% |
| Texte exact par bulle | 89.51% | 90.08% | 90.22% |
| Texte de page exact, dans l'ordre | 38.62% | 40.74% | 40.21% |
| F1 bbox / IoU ≥ 0,5 | 98.80% | 98.93% | 98.75% |
| Pages tronquées | 0 | 0 | 0 |
CER/WER pondérés par les caractères/mots de référence ; NFC et espaces normalisés,
casse et ponctuation conservées. Appariement spatial un à un à IoU ≥ 0,1 :
zones manquées/ajoutées pénalisées par suppressions/insertions.
Le texte exact par bulle porte sur toutes les bulles annotées ; l'exact par page
ignore les coordonnées mais conserve l'ordre de lecture. L'égalité littérale de
la réponse entière, bbox comprises, est une autre mesure (exact_match).
Le test avait déjà été évalué et inspecté lors du premier run. Ces résultats mesurent un progrès sur le même test réutilisé, pas sur un nouveau jeu indépendant. Toutes les sorties, y compris les échecs, sont incluses. Le résumé public décrit les agrégats et le protocole. Les pages et prédictions individuelles restent privées.
Utilisation
import torch
from PIL import Image
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
model_id = "Remidesbois/LightOnOCR-3-Poneglyph-bbox"
processor = AutoProcessor.from_pretrained(model_id)
model = Qwen3_5ForConditionalGeneration.from_pretrained(
model_id, dtype=torch.bfloat16, attn_implementation="sdpa",
).to("cuda").eval()
image = Image.open("page.jpg").convert("RGB")
original_width, original_height = image.size
image.thumbnail((2048, 2048), Image.Resampling.LANCZOS)
messages = [{"role": "user", "content": [
{"type": "image"}, {"type": "text", "text": "grounding"},
]}]
prompt = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=False,
)
inputs = processor(text=[prompt], images=[image], return_tensors="pt").to("cuda")
with torch.inference_mode():
output = model.generate(**inputs, do_sample=False, use_cache=True, max_new_tokens=1280)
text = processor.decode(output[0, inputs.input_ids.shape[1]:], skip_special_tokens=True)
print(text)
Transformers 5.14.1 est la version utilisée pour la validation native. Les kernels
FLA et causal-conv1d compatibles avec le GPU accélèrent l'inférence Qwen3.5.
Le format de chaque zone est  suivi de sa transcription.
Les coordonnées sont des entiers dans [0,1000] ; pour les remettre en pixels,
multiplier x par la largeur originale / 1000 et y par la hauteur originale / 1000.
La transcription des zones de texte ne fournit pas les descriptions de cases.
Intégrité et limites
Poids BF16 : 1 706 030 528 octets, 473 tenseurs. SHA-256 :
3e7f25dbbdd87a0f1896af27aad5ee07f66364a24da4151d14ef6d125a98d14b.
Les 473 tenseurs correspondent exactement au checkpoint retenu après conversion
FP32 vers BF16. Le modèle a été rechargé et testé dans un nouveau processus.
Les résultats natifs ci-dessus ne sont pas des mesures ONNX ou WebGPU.
Le modèle peut manquer des textes, notamment certaines onomatopées ; les bbox et
transcriptions nécessitent une vérification pour les usages qui l'exigent.
ONNX et WebGPU
Graphes, contrat et validation · Rapport agrégé du navigateur.
| Mesure · 189 pages de test | PyTorch BF16 | Navigateur WebGPU |
|---|---|---|
| CER ↓ | 1.066 % | 1.096 % |
| WER ↓ | 2.224 % | 2.195 % |
| Texte exact par zone ↑ | 90.22 % | 89.67 % |
| Texte de page exact, dans l’ordre ↑ | 40.21 % | 38.62 % |
| F1 bbox / IoU ≥ 0,5 ↑ | 98.75 % | 98.75 % |
| Pages tronquées / blocs invalides | 0 / 0 | 0 / 0 |
Le navigateur totalise 587 erreurs de caractères, contre 571 en BF16 : +0.030 point de CER. Ces sorties ne sont pas identiques bit à bit. Les poids FP16, calculs mixtes FP16/FP32 et le redimensionnement Canvas peuvent modifier les textes et coordonnées.
Sur RTX 5090 32 Go / Blackwell : médiane 3.51 s/page, p95 4.27 s/page, modèle chargé, téléchargement exclu. Les temps dépendent de la taille de l’image, du texte et du matériel.
Le test est le même jeu figé de 189 pages / 1646 zones déjà évalué et inspecté pendant l’entraînement. Il mesure le portage, pas une nouvelle évaluation indépendante. CER/WER : appariement spatial un à un à IoU ≥ 0,1, zones manquées/ajoutées pénalisées ; NFC et espaces normalisés, casse et ponctuation conservées. L’exact par zone porte sur toutes les zones annotées ; l’exact par page ignore les coordonnées et conserve l’ordre.
Intégré à Poneglyph sous Page entière → LightOnOCR 3 · WebGPU. Export sans quantification, poids FP16 et calculs sensibles FP32. Les mesures navigateur ci-dessus proviennent de l’exécution WebGPU réelle, sans fallback CPU.