File size: 2,122 Bytes
a166897
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
069ec5e
a166897
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
---
language:
  - ar
license: cc-by-nc-4.0
tags:
  - handwritten-text-recognition
  - arabic
  - khatt
  - densenet
  - transformer
  - transfer-learning
  - pytorch
  - safetensors
datasets:
  - KHATT
  - DASTNUS
metrics:
  - cer
  - wer
pipeline_tag: image-to-text
---

# Arabic Handwritten Text Recognition: DenseNet121-Transformer (Fine-tuned on KHATT)

## Model Description
A lightweight DenseNet121-Transformer architecture for Arabic handwritten line recognition,
pre-trained on the Kurdish DASTNUS dataset and fine-tuned on the KHATT Arabic handwritten dataset.
Uses a triple unified vocabulary covering Kurdish, Arabic, and Urdu scripts (192 tokens). The KHATT dataset is publicly available at https://www.kaggle.com/datasets/iraqyomar/khatt-arabic-hand-written-lines/code (We only used Unique Handwritten Lines)

## Architecture
- **CNN Backbone:** DenseNet-121 (pretrained on ImageNet)
- **Encoder:** 3 Transformer encoder layers
- **Decoder:** 3 Transformer decoder layers
- **Attention Heads:** 8
- **Hidden Size:** 256
- **Parameters:** ~12.8M
- **Vocabulary:** 192 tokens (Triple unified: Kurdish + Arabic + Urdu)

## Transfer Learning Pipeline
1. Pre-trained on Kurdish DASTNUS dataset (with unified vocabulary)
2. Fine-tuned on KHATT Arabic handwritten line dataset

## Performance on KHATT Test Set
| Metric | Value |
|--------|-------|
| CER | 0.1135 |
| WER | 0.4156 |
| CRR | 88.65% |

## Training Data
- **Pre-training:** DASTNUS Kurdish handwritten dataset
- **Fine-tuning:** KHATT Arabic handwritten dataset (5,166 training, 574 validation)

## Usage
```python
from safetensors.torch import load_file
import json

# Load model weights
state_dict = load_file("model.safetensors")

# Load config
with open("config.json", "r") as f:
    config = json.load(f)

# Load vocabulary
with open("vocab.json", "r", encoding="utf-8") as f:
    vocab = json.load(f)

# Load full unified vocabulary info
with open("unified_vocabulary.json", "r", encoding="utf-8") as f:
    unified_vocab = json.load(f)
```

## Citation
[]

## License
This model is released for non-commercial scientific research purposes only.