isaac0x53 commited on
Commit
d7fa0f3
·
verified ·
1 Parent(s): 05b443d

Promote handwriting-heavy hwmix adapter (QLoRA on Qwen3-VL-2B)

Browse files
Files changed (3) hide show
  1. README.md +203 -96
  2. adapter_config.json +4 -4
  3. adapter_model.safetensors +1 -1
README.md CHANGED
@@ -1,103 +1,210 @@
1
  ---
2
- license: apache-2.0
3
- language:
4
- - ar
5
- - fr
6
- - en
7
  tags:
8
- - ocr
9
- - arabic
10
- - vision-language-model
11
- - qwen3-vl
12
  - lora
 
 
 
13
  - unsloth
14
- - text-recognition
15
- - handwriting-recognition
16
- pipeline_tag: image-to-text
17
- base_model: unsloth/qwen3-vl-2b-instruct-unsloth-bnb-4bit
18
- datasets:
19
- - context212/context212-alhazen-ocr
20
- - ahmedheakl/arocrbench_khatt
21
- library_name: peft
22
  ---
23
 
24
- # Alhazen-OCR
25
-
26
- **Alhazen-OCR** is an Arabic-first OCR vision-language model: a QLoRA adapter
27
- on top of **Qwen3-VL-2B-Instruct**, fine-tuned on
28
- [`context212/context212-alhazen-ocr`](https://huggingface.co/datasets/context212/context212-alhazen-ocr)
29
- — a license-clean mix of Arabic synthetic documents, invoices, and handwritten
30
- text (KHATT).
31
-
32
- Named after **Ibn al-Haytham (Alhazen)**, the 11th-century pioneer of optics.
33
-
34
- ## Benchmark
35
-
36
- Evaluated with CER/WER (lower is better) on the held-out eval split of the
37
- training data and on the external
38
- [`ahmedheakl/arocrbench_khatt`](https://huggingface.co/datasets/ahmedheakl/arocrbench_khatt)
39
- benchmark (100 samples each, greedy decoding):
40
-
41
- | Model | Eval CER ↓ | Eval WER ↓ | KHATT-bench CER ↓ | KHATT-bench WER ↓ |
42
- |---|---|---|---|---|
43
- | Qwen3-VL-2B-Instruct (base) | 0.653 | 0.951 | 1.498 | 1.594 |
44
- | **Alhazen-OCR** | **0.368** | **0.567** | 2.761 | 1.707 |
45
-
46
- **Reading the numbers:** fine-tuning cuts character errors nearly in half on
47
- in-distribution documents (0.65 → 0.37 CER) and word errors from 0.95 → 0.57.
48
- On the external KHATT handwriting benchmark the model still struggles — this
49
- is a first smoke run on 20k samples; scaling data and training is expected to
50
- close the gap. Published as a work-in-progress baseline.
51
-
52
- ## Usage
53
-
54
- ```python
55
- import torch
56
- from unsloth import FastVisionModel
57
-
58
- model, tokenizer = FastVisionModel.from_pretrained(
59
- "context212/alhazen-ocr",
60
- load_in_4bit=True,
61
- )
62
- FastVisionModel.for_inference(model)
63
-
64
- messages = [{
65
- "role": "user",
66
- "content": [
67
- {"type": "image", "image": image}, # a PIL.Image
68
- {"type": "text", "text": "Extract all the text from this image, preserving the original reading order."},
69
- ],
70
- }]
71
- inputs = tokenizer.apply_chat_template(
72
- messages, tokenize=True, add_generation_prompt=True,
73
- return_dict=True, return_tensors="pt",
74
- ).to(model.device)
75
-
76
- with torch.inference_mode():
77
- out = model.generate(**inputs, max_new_tokens=512, temperature=0.0, do_sample=False)
78
- print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
79
- ```
80
-
81
- ## Training
82
-
83
- - **Base:** `unsloth/Qwen3-VL-2B-Instruct` (4-bit)
84
- - **Method:** QLoRA via [unsloth](https://github.com/unslothai/unsloth)
85
- r=16, rsLoRA, vision + language layers (17.4M trainable params, 0.81%)
86
- - **Data:** 20,000 samples from `context212/context212-alhazen-ocr`
87
- (60% synthetic documents, 20% invoices, 20% handwriting)
88
- - **Schedule:** 1 epoch, lr 2e-5, cosine, bf16, batch 16, seq 2048 —
89
- single A100 80GB, ~35 min
90
- - **Checkpoint selection:** per-epoch eval on held-out split + external
91
- benchmark; epoch 1 won (later epochs diverge — see the repo for details)
92
-
93
- ## Data sources & licenses
94
-
95
- | Source | License |
96
- |---|---|
97
- | `loay/arabic-ocr-synthetic-scans-faker-300k` | CC-BY-4.0 |
98
- | `KhalfounMehdi/arabic-latin-invoices-synthetic` | CC-BY-4.0 |
99
- | `johnlockejrr/KHATT_v1.0_dataset` | MIT |
100
- | `sherif1313/Historical-Arabic-Handwritten-OCR` | Apache-2.0 |
101
-
102
- Eval benchmark: `ahmedheakl/arocrbench_khatt` (MIT).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
 
 
1
  ---
2
+ base_model: unsloth/qwen3-vl-2b-instruct-unsloth-bnb-4bit
3
+ library_name: peft
4
+ pipeline_tag: text-generation
 
 
5
  tags:
6
+ - base_model:adapter:unsloth/qwen3-vl-2b-instruct-unsloth-bnb-4bit
 
 
 
7
  - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
  - unsloth
 
 
 
 
 
 
 
 
12
  ---
13
 
14
+ # Model Card for Model ID
15
+
16
+ <!-- Provide a quick summary of what the model is/does. -->
17
+
18
+
19
+
20
+ ## Model Details
21
+
22
+ ### Model Description
23
+
24
+ <!-- Provide a longer summary of what this model is. -->
25
+
26
+
27
+
28
+ - **Developed by:** [More Information Needed]
29
+ - **Funded by [optional]:** [More Information Needed]
30
+ - **Shared by [optional]:** [More Information Needed]
31
+ - **Model type:** [More Information Needed]
32
+ - **Language(s) (NLP):** [More Information Needed]
33
+ - **License:** [More Information Needed]
34
+ - **Finetuned from model [optional]:** [More Information Needed]
35
+
36
+ ### Model Sources [optional]
37
+
38
+ <!-- Provide the basic links for the model. -->
39
+
40
+ - **Repository:** [More Information Needed]
41
+ - **Paper [optional]:** [More Information Needed]
42
+ - **Demo [optional]:** [More Information Needed]
43
+
44
+ ## Uses
45
+
46
+ <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
47
+
48
+ ### Direct Use
49
+
50
+ <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
51
+
52
+ [More Information Needed]
53
+
54
+ ### Downstream Use [optional]
55
+
56
+ <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
57
+
58
+ [More Information Needed]
59
+
60
+ ### Out-of-Scope Use
61
+
62
+ <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
63
+
64
+ [More Information Needed]
65
+
66
+ ## Bias, Risks, and Limitations
67
+
68
+ <!-- This section is meant to convey both technical and sociotechnical limitations. -->
69
+
70
+ [More Information Needed]
71
+
72
+ ### Recommendations
73
+
74
+ <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
75
+
76
+ Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
77
+
78
+ ## How to Get Started with the Model
79
+
80
+ Use the code below to get started with the model.
81
+
82
+ [More Information Needed]
83
+
84
+ ## Training Details
85
+
86
+ ### Training Data
87
+
88
+ <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
89
+
90
+ [More Information Needed]
91
+
92
+ ### Training Procedure
93
+
94
+ <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
95
+
96
+ #### Preprocessing [optional]
97
+
98
+ [More Information Needed]
99
+
100
+
101
+ #### Training Hyperparameters
102
+
103
+ - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
104
+
105
+ #### Speeds, Sizes, Times [optional]
106
+
107
+ <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
108
+
109
+ [More Information Needed]
110
+
111
+ ## Evaluation
112
+
113
+ <!-- This section describes the evaluation protocols and provides the results. -->
114
+
115
+ ### Testing Data, Factors & Metrics
116
+
117
+ #### Testing Data
118
+
119
+ <!-- This should link to a Dataset Card if possible. -->
120
+
121
+ [More Information Needed]
122
+
123
+ #### Factors
124
+
125
+ <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
126
+
127
+ [More Information Needed]
128
+
129
+ #### Metrics
130
+
131
+ <!-- These are the evaluation metrics being used, ideally with a description of why. -->
132
+
133
+ [More Information Needed]
134
+
135
+ ### Results
136
+
137
+ [More Information Needed]
138
+
139
+ #### Summary
140
+
141
+
142
+
143
+ ## Model Examination [optional]
144
+
145
+ <!-- Relevant interpretability work for the model goes here -->
146
+
147
+ [More Information Needed]
148
+
149
+ ## Environmental Impact
150
+
151
+ <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
152
+
153
+ Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
154
+
155
+ - **Hardware Type:** [More Information Needed]
156
+ - **Hours used:** [More Information Needed]
157
+ - **Cloud Provider:** [More Information Needed]
158
+ - **Compute Region:** [More Information Needed]
159
+ - **Carbon Emitted:** [More Information Needed]
160
+
161
+ ## Technical Specifications [optional]
162
+
163
+ ### Model Architecture and Objective
164
+
165
+ [More Information Needed]
166
+
167
+ ### Compute Infrastructure
168
+
169
+ [More Information Needed]
170
+
171
+ #### Hardware
172
+
173
+ [More Information Needed]
174
+
175
+ #### Software
176
+
177
+ [More Information Needed]
178
+
179
+ ## Citation [optional]
180
+
181
+ <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
182
+
183
+ **BibTeX:**
184
+
185
+ [More Information Needed]
186
+
187
+ **APA:**
188
+
189
+ [More Information Needed]
190
+
191
+ ## Glossary [optional]
192
+
193
+ <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
194
+
195
+ [More Information Needed]
196
+
197
+ ## More Information [optional]
198
+
199
+ [More Information Needed]
200
+
201
+ ## Model Card Authors [optional]
202
+
203
+ [More Information Needed]
204
+
205
+ ## Model Card Contact
206
+
207
+ [More Information Needed]
208
+ ### Framework versions
209
 
210
+ - PEFT 0.20.0
adapter_config.json CHANGED
@@ -35,13 +35,13 @@
35
  "rank_pattern": {},
36
  "revision": null,
37
  "target_modules": [
38
- "q_proj",
39
  "down_proj",
 
40
  "k_proj",
41
- "v_proj",
42
- "gate_proj",
43
  "o_proj",
44
- "up_proj"
 
 
45
  ],
46
  "target_parameters": null,
47
  "task_type": "CAUSAL_LM",
 
35
  "rank_pattern": {},
36
  "revision": null,
37
  "target_modules": [
 
38
  "down_proj",
39
+ "q_proj",
40
  "k_proj",
 
 
41
  "o_proj",
42
+ "up_proj",
43
+ "v_proj",
44
+ "gate_proj"
45
  ],
46
  "target_parameters": null,
47
  "task_type": "CAUSAL_LM",
adapter_model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:033c8c8b58aa68a7e7ec2cbd0ea88a1ebac2f0dbf2bf6bc5a12482f11f8ba847
3
  size 69788264
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cde83aede9363875edac105a90b5c7c0dc1358244792643b42eecbfc9e32bf10
3
  size 69788264