KHWR / README.md
Karez's picture
Update README.md
598e2e1 verified
|
Raw
History Blame Contribute Delete
6.03 kB
---
language:
- ckb
license: cc-by-nc-4.0
tags:
- handwritten-text-recognition
- kurdish
- sorani
- crnn
- frequency-adaptive-attention
- ctc
- pytorch
- safetensors
datasets:
- DASTNUS
metrics:
- cer
- wer
pipeline_tag: image-to-text
---
# KHWR: Kurdish Handwritten Word Recognition
This repository hosts the trained models and inference code accompanying the
study on Kurdish handwritten word recognition with the proposed
**Frequency-Adaptive Attention (FAA)** mechanism, evaluated on the **DASTNUS
Unique Words** subset against three competitive attention baselines under a
controlled multi-seed protocol.
The repository includes four base architectures (Baseline, Luong, MHSA, and
the proposed FAA).
## Repository Structure
```
KHWR/
├── FAA-Word-Model/ # Proposed FAA (seed 42)
│ ├── model.safetensors
│ ├── config.json
│ ├── vocab.json
│ ├── idx_to_char.json
│ └── README.md
├── Baseline-Word-Model/ # CRNN without attention (seed 42)
├── Luong-Word-Model/ # Luong multiplicative attention (seed 42)
├── MHSA-Word-Model/ # Multi-Head Self-Attention (seed 42)
├── Scripts/
│ ├── train.py
│ └── inference.py
├── Sample/
│ ├── sample_word.tif
│ └── sample_word.txt
├── requirements.txt
└── README.md
```
## Architecture
All four model families share an identical CNN and BiLSTM backbone and differ
only in the attention block placed between BiLSTM layers 2 and 3, which
isolates the contribution of each attention design.
| Model | Attention Block | Parameters |
|-------|------------------|:----------:|
| Baseline | none | 3,838,065 |
| Luong | multiplicative attention | 3,915,345 |
| MHSA | Multi-Head Self-Attention (4 heads, ff = 320) | 4,044,625 |
| **FAA (proposed)** | **Frequency-Adaptive Attention** | **3,997,859** |
Shared backbone:
- CNN: 6 convolutional blocks, maximum 256 channels
- RNN: 3 BiLSTM layers, hidden size 160 per direction
- Decoder: Connectionist Temporal Classification (CTC)
- Input resolution: 64 × 164 grayscale
- Vocabulary size: 113 (CTC blank + 112 Kurdish characters and symbols)
## Performance
### Multi-Seed Evaluation on DASTNUS Unique Words
Test set of 8,036 word images, five random seeds (42, 7, 123, 456, 789):
| Model | Mean CER ± Std | Mean WER ± Std |
|-------|:-:|:-:|
| Baseline | 0.0374 ± 0.0009 | 0.1525 ± 0.0037 |
| Luong | 0.0381 ± 0.0009 | 0.1612 ± 0.0040 |
| MHSA | 0.0403 ± 0.0023 | 0.1709 ± 0.0079 |
| **FAA (proposed)** | **0.0358 ± 0.0013** | **0.1426 ± 0.0044** |
### Few-Shot Cross-Domain Adaptation
FAA seed-42 checkpoint adapted to three additional DASTNUS subsets:
| Budget | Person Names CER | Place Names CER | Month Names CER |
|:-:|:-:|:-:|:-:|
| 0% (zero-shot) | 0.1448 | 0.2691 | 0.2043 |
| 5% | 0.1264 | 0.1856 | 0.0157 |
| 100% | **0.0380** | **0.0268** | **0.0087** |
## Installation
```bash
git clone https://huggingface.co/Karez/KHWR
cd KHWR
pip install -r requirements.txt
```
## Quick Start
### Inference
The inference script automatically detects the model family from the
`config.json` next to the chosen `model.safetensors`, so a single command
works for any of the seven model folders in this repository.
```bash
# Single image
python Scripts/inference.py \
--image Sample/sample_word.tif \
--model_path FAA-Word-Model/model.safetensors \
--vocab_path FAA-Word-Model/vocab.json
# Directory of images, save predictions to TSV
python Scripts/inference.py \
--image_dir ./test_words \
--model_path FAA-Word-Model/model.safetensors \
--vocab_path FAA-Word-Model/vocab.json \
--output_file predictions.tsv
```
### Training
The training script handles all four model families via the `--model_type`
flag, sharing the identical backbone and hyperparameters used in the paper.
```bash
# Train the proposed FAA model
python Scripts/train.py \
--model_type faa \
--data_dir ./data/DASTNUS/Unique-Words \
--vocab_path FAA-Word-Model/vocab.json \
--output_dir ./output/faa_seed42 \
--seed 42
# Train one of the baselines (replace faa with baseline / luong / mhsa)
python Scripts/train.py \
--model_type mhsa \
--data_dir ./data/DASTNUS/Unique-Words \
--vocab_path FAA-Word-Model/vocab.json \
--output_dir ./output/mhsa_seed42 \
--seed 42
```
### Few-Shot Fine-Tuning
Initialize from the seed-42 FAA checkpoint, then fine-tune on a target subset
with a smaller learning rate and a shorter schedule:
```bash
python Scripts/train.py \
--model_type faa \
--data_dir ./data/DASTNUS/Person-Names \
--vocab_path FAA-Word-Model/vocab.json \
--init_checkpoint FAA-Word-Model/best_model.pth \
--learning_rate 1e-4 \
--num_epochs 30 \
--patience 5 \
--output_dir ./output/faa_person_finetune
```
## Models
| Folder | Architecture | Test CER | Test WER |
|--------|--------------|:-:|:-:|
| `FAA-Word-Model/` | CRNN + Frequency-Adaptive Attention | 0.0373 | 0.1480 |
| `Baseline-Word-Model/` | CRNN (no attention) | 0.0380 | 0.1544 |
| `Luong-Word-Model/` | CRNN + Luong attention | 0.0391 | 0.1663 |
| `MHSA-Word-Model/` | CRNN + Multi-Head Self-Attention | 0.0383 | 0.1655 |
All values reported on the held-out test split of the corresponding subset
under greedy CTC decoding, seed 42.
## Dataset
The models in this repository are trained on the DASTNUS Kurdish handwritten
text dataset. Relevant statistics:
| Subset | Samples | Unique Words | Vocabulary |
|--------|:-:|:-:|:-:|
| Unique Words | 54,191 | 2,750 | 21,796 (full DASTNUS) |
## Citation
```bibtex
```
## License
Released under the CC BY-NC 4.0 license. The models and dataset are intended
for non-commercial scientific research only.