--- license: apache-2.0 base_model: - unsloth/Qwen3-VL-8B-Instruct-unsloth-bnb-4bit - Qwen/Qwen3.5-9B - lightonai/LightOnOCR-2-1B-base - timm/convnext_large.fb_in22k_ft_in1k pipeline_tag: image-to-text tags: - handwriting-recognition - ocr - htr - safetensors --- # road weights Line readers and word-boundary models for the `road` handwritten-line transcription pipeline. ![Licence: Apache-2.0](https://img.shields.io/badge/licence-Apache--2.0-2563eb) ![8 models × 5 folds](https://img.shields.io/badge/readers-8%20models%20%C3%97%205%20folds-4a6fa5) ![7 word-boundary models](https://img.shields.io/badge/word--boundary%20models-7-0e7490) ![safetensors](https://img.shields.io/badge/format-safetensors-15803d) ![63.5 GB](https://img.shields.io/badge/size-63.5%20GB-64748b) ![What's inside: 8 models × 5 folds, 7 word-boundary models, 63.5 GB](assets/whats-inside.png) ## ⚡ Quick start This repository is public and ungated: downloads need no Hugging Face account or token. With the accompanying `road` code: ```bash bash install.sh # install the pinned environments bash scripts/01_get_weights.sh --release bundle-001 # download and verify inference weights and bases bash run_inference.sh --release bundle-001 # write outputs/submission/final_submission.csv ``` The downloader uses the immutable weight revision `96fa774b66a32e30f48bbe920121bcdff0548a19`. It also downloads the two Qwen base models from the pinned repositories listed below. To acquire the starting models for training, including the Kraken base hosted under `upstream/`: ```bash bash scripts/01_get_weights.sh --release bundle-001 --training --bases-only ``` ## 📦 Contents Release `bundle-001`. Each reader comes in five versions, one per fold (`f0`–`f4`). | Folder | Model | Input | Format | Size | | --- | --- | --- | --- | --: | | `qwen3vl_strip/` | Qwen3-VL 8B | single strip | LoRA adapter | 3.7 GB | | `qwen3vl_nine/` | Qwen3-VL 8B | nine views | LoRA adapter | 3.7 GB | | `qwen35_strip/` | Qwen3.5-9B | single strip | adapter | 2.8 GB | | `qwen35_nine/` | Qwen3.5-9B | nine views | adapter | 2.8 GB | | `lighton_strip/` | LightOnOCR-2 1B | single strip | full checkpoint | 20.2 GB | | `lighton_nine/` | LightOnOCR-2 1B | nine views | full checkpoint | 20.2 GB | | `convnext_large/` | ConvNeXt-large CTC | single strip | full checkpoint | 4.2 GB | | `kraken_medium/` | Kraken medium CTC | single strip | full checkpoint | 0.3 GB | | `segmenter/` | 2 word counters + 5 boundary finders | single strip | full checkpoints | 5.6 GB | | `upstream/` | PP-OCRv6 (medium), byte-identical copy | – | original file | 64 MB | Adapters load on their public base model, downloaded from its own repository at a pinned revision. Full checkpoints need nothing else.
Pinned base models | Base | Revision | Used for | | --- | --- | --- | | [unsloth/Qwen3-VL-8B-Instruct-unsloth-bnb-4bit](https://huggingface.co/unsloth/Qwen3-VL-8B-Instruct-unsloth-bnb-4bit) | `b5b904c3fcdc7541adf2a2bb219b0ed95288c794` | loading `qwen3vl_*` | | [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B) | `c202236235762e1c871ad0ccb60c8ee5ba337b9a` | loading `qwen35_*` | | [lightonai/LightOnOCR-2-1B-base](https://huggingface.co/lightonai/LightOnOCR-2-1B-base) | `c1bc8eb6625be7b34178ff53481b242f7b8ffcb8` | training only | | [timm/convnext_large.fb_in22k_ft_in1k](https://huggingface.co/timm/convnext_large.fb_in22k_ft_in1k) | `dc2e53fad264aa1fb4e5940e0d1c9b79ac6e0854` | training only | | [PP-OCRv6 (medium)](https://doi.org/10.5281/zenodo.21788410), copy in `upstream/` | Zenodo record 21788410 | training only |
## 🔒 Integrity [`manifest.json`](https://huggingface.co/DariusTheGeek/road-weights/blob/main/manifest.json) lists the size and SHA-256 of every file. The downloader checks each file against it and refuses any mismatch. Files never change within a release. ## ⚖️ Licences The reader and word-boundary checkpoints are modified versions of the models below. The Kraken base under `upstream/` is an unchanged copy. | Folders | Built on | Licence | Credit | | --- | --- | --- | --- | | `qwen3vl_*` | Qwen3-VL-8B-Instruct, 4-bit by Unsloth | Apache-2.0 | Qwen team, Alibaba Cloud | | `qwen35_*` | Qwen3.5-9B | Apache-2.0 | Qwen team, Alibaba Cloud (© 2026 Alibaba Cloud) | | `lighton_*` | LightOnOCR-2-1B-base | Apache-2.0 | LightOn | | `convnext_large/`, `segmenter/` | ConvNeXt-large, via timm | Apache-2.0; original weights MIT | Liu et al., "A ConvNet for the 2020s" (2022); © Meta Platforms, Inc. and affiliates | | `kraken_medium/`, `upstream/` | PP-OCRv6 (medium) | Apache-2.0 | Benjamin Kiessling (ALMAnaCH, Inria Paris) | Full texts: [`LICENSE`](https://huggingface.co/DariusTheGeek/road-weights/blob/main/LICENSE) (Apache-2.0) and [`licenses/MIT-ConvNeXt.txt`](https://huggingface.co/DariusTheGeek/road-weights/blob/main/licenses/MIT-ConvNeXt.txt). ## 🙏 Credits Using the Kraken files? Please cite [kraken](https://kraken.re) and credit the dataset providers listed on the [PP-OCRv6 record](https://doi.org/10.5281/zenodo.21788410).
Runs with Each environment has its own hash-locked pins in the `road` code (`install/locks/.lock`). CUDA 12.8 builds. | Environment | Python | Key packages | Loads | | --- | --- | --- | --- | | core | 3.10.12 | huggingface-hub 0.36.2, numpy 2.2.6, rapidfuzz 3.14.5 | download, weighted vote | | seg | 3.11.13 | torch 2.10.0, timm 1.0.28, opencv-python-headless 4.14 | `segmenter/`, `convnext_large/` | | kraken | 3.11.13 | torch 2.10.0, kraken 7.1.1, kenlm 0.3.0 | `kraken_medium/` | | qwen3vl | 3.11.13 | torch 2.11.0, transformers 5.5.0, peft 0.20.0, unsloth 2026.9.2, bitsandbytes 0.50.2 | `qwen3vl_*` | | qwen35 | 3.11.13 | torch 2.10.0, transformers 5.17.0, peft 0.19.1 | `qwen35_*` | | lighton | 3.11.13 | torch 2.10.0, transformers 5.17.0 | `lighton_*` |