sovitrath commited on
Commit
47436f3
·
verified ·
1 Parent(s): 033f22e

Upload folder using huggingface_hub

Browse files
Files changed (4) hide show
  1. README.md +174 -158
  2. adapter_config.json +2 -2
  3. adapter_model.safetensors +1 -1
  4. training_args.bin +1 -1
README.md CHANGED
@@ -5,73 +5,97 @@ library_name: peft
5
 
6
  # Model Card for Model ID
7
 
8
- <!-- Provide a quick summary of what the model is/does. -->
9
 
 
10
 
 
11
 
12
  ## Model Details
13
 
14
- ### Model Description
15
-
16
- <!-- Provide a longer summary of what this model is. -->
17
-
18
-
19
-
20
- - **Developed by:** [More Information Needed]
21
- - **Funded by [optional]:** [More Information Needed]
22
- - **Shared by [optional]:** [More Information Needed]
23
- - **Model type:** [More Information Needed]
24
- - **Language(s) (NLP):** [More Information Needed]
25
- - **License:** [More Information Needed]
26
- - **Finetuned from model [optional]:** [More Information Needed]
27
-
28
- ### Model Sources [optional]
29
-
30
- <!-- Provide the basic links for the model. -->
31
-
32
- - **Repository:** [More Information Needed]
33
- - **Paper [optional]:** [More Information Needed]
34
- - **Demo [optional]:** [More Information Needed]
35
-
36
- ## Uses
37
-
38
- <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
39
-
40
- ### Direct Use
41
-
42
- <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
43
-
44
- [More Information Needed]
45
-
46
- ### Downstream Use [optional]
47
-
48
- <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
49
-
50
- [More Information Needed]
51
-
52
- ### Out-of-Scope Use
53
-
54
- <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
55
-
56
- [More Information Needed]
57
-
58
- ## Bias, Risks, and Limitations
59
-
60
- <!-- This section is meant to convey both technical and sociotechnical limitations. -->
61
-
62
- [More Information Needed]
63
-
64
- ### Recommendations
65
-
66
- <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
67
-
68
- Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
69
 
70
  ## How to Get Started with the Model
71
 
72
  Use the code below to get started with the model.
73
 
74
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  ## Training Details
77
 
@@ -83,120 +107,112 @@ Use the code below to get started with the model.
83
 
84
  ### Training Procedure
85
 
86
- <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
87
-
88
- #### Preprocessing [optional]
89
-
90
- [More Information Needed]
91
 
92
 
93
  #### Training Hyperparameters
94
 
95
- - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
96
-
97
- #### Speeds, Sizes, Times [optional]
98
-
99
- <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
100
-
101
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
 
103
  ## Evaluation
104
 
105
- <!-- This section describes the evaluation protocols and provides the results. -->
106
-
107
- ### Testing Data, Factors & Metrics
108
-
109
- #### Testing Data
110
-
111
- <!-- This should link to a Dataset Card if possible. -->
112
-
113
- [More Information Needed]
114
-
115
- #### Factors
116
-
117
- <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
118
-
119
- [More Information Needed]
120
-
121
- #### Metrics
122
 
123
- <!-- These are the evaluation metrics being used, ideally with a description of why. -->
124
-
125
- [More Information Needed]
126
-
127
- ### Results
128
-
129
- [More Information Needed]
130
-
131
- #### Summary
132
-
133
-
134
-
135
- ## Model Examination [optional]
136
-
137
- <!-- Relevant interpretability work for the model goes here -->
138
-
139
- [More Information Needed]
140
-
141
- ## Environmental Impact
142
-
143
- <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
144
-
145
- 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).
146
-
147
- - **Hardware Type:** [More Information Needed]
148
- - **Hours used:** [More Information Needed]
149
- - **Cloud Provider:** [More Information Needed]
150
- - **Compute Region:** [More Information Needed]
151
- - **Carbon Emitted:** [More Information Needed]
152
 
153
  ## Technical Specifications [optional]
154
 
155
- ### Model Architecture and Objective
156
-
157
- [More Information Needed]
158
-
159
  ### Compute Infrastructure
160
 
161
- [More Information Needed]
162
-
163
- #### Hardware
164
-
165
- [More Information Needed]
166
-
167
- #### Software
168
 
169
- [More Information Needed]
170
-
171
- ## Citation [optional]
172
-
173
- <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
174
-
175
- **BibTeX:**
176
-
177
- [More Information Needed]
178
-
179
- **APA:**
180
-
181
- [More Information Needed]
182
-
183
- ## Glossary [optional]
184
-
185
- <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
186
-
187
- [More Information Needed]
188
-
189
- ## More Information [optional]
190
-
191
- [More Information Needed]
192
-
193
- ## Model Card Authors [optional]
194
-
195
- [More Information Needed]
196
-
197
- ## Model Card Contact
198
-
199
- [More Information Needed]
200
  ### Framework versions
201
 
202
- - PEFT 0.15.2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
  # Model Card for Model ID
7
 
8
+ This is a fined-tuned Phi 3.5 Vision Instruct model for receipt OCR specifically.
9
 
10
+ It has been fine-tuned on the SROIEv2 datasets and the annotations were generated using Qwen2.5-3B VL.
11
 
12
+ The dataset is **[available on Kaggle](https://www.kaggle.com/datasets/sovitrath/receipt-ocr-input)**.
13
 
14
  ## Model Details
15
 
16
+ - The base model is **[sovitrath/Phi-3.5-vision-instruct](sovitrath/Phi-3.5-vision-instruct)**.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  ## How to Get Started with the Model
19
 
20
  Use the code below to get started with the model.
21
 
22
+ ```python
23
+ import torch
24
+ import matplotlib.pyplot as plt
25
+ import transformers
26
+
27
+ from PIL import Image
28
+ from transformers import AutoModelForCausalLM, AutoProcessor
29
+ from transformers import BitsAndBytesConfig
30
+
31
+ model_id = 'sovitrath/Phi-3.5-Vision-Instruct-OCR'
32
+
33
+ model = AutoModelForCausalLM.from_pretrained(
34
+ model_id,
35
+ device_map='auto',
36
+ torch_dtype=torch.bfloat16,
37
+ trust_remote_code=True,
38
+ # _attn_implementation='flash_attention_2', # Use `flash_attention_2` on Ampere GPUs and above and `eager` on older GPUs.
39
+ _attn_implementation='eager', # Use `flash_attention_2` on Ampere GPUs and above and `eager` on older GPUs.
40
+ )
41
+
42
+ # processor = AutoProcessor.from_pretrained('sovitrath/Phi-3.5-vision-instruct', trust_remote_code=True)
43
+ processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
44
+
45
+ test_image = Image.open('../inference_data/image_1.jpeg').convert('RGB')
46
+
47
+ plt.figure(figsize=(9, 7))
48
+ plt.imshow(test_image)
49
+ plt.show()
50
+
51
+ def test(model, processor, image, max_new_tokens=1024, device='cuda'):
52
+ placeholder = f"<|image_1|>\n"
53
+ messages = [
54
+ {
55
+ 'role': 'user',
56
+ 'content': placeholder + 'OCR this image accurately'
57
+ },
58
+ ]
59
+
60
+ # Prepare the text input by applying the chat template
61
+ text_input = processor.tokenizer.apply_chat_template(
62
+ messages,
63
+ add_generation_prompt=True,
64
+ tokenize=False
65
+ )
66
+
67
+ if image.mode != 'RGB':
68
+ image = image.convert('RGB')
69
+
70
+ # Prepare the inputs for the model
71
+ model_inputs = processor(
72
+ text=text_input,
73
+ images=[image],
74
+ return_tensors='pt',
75
+ ).to(device) # Move inputs to the specified device
76
+
77
+ # Generate text with the model
78
+ generated_ids = model.generate(**model_inputs, max_new_tokens=max_new_tokens)
79
+
80
+ # Trim the generated ids to remove the input ids
81
+ trimmed_generated_ids = [
82
+ out_ids[len(in_ids):] for in_ids, out_ids in zip(model_inputs.input_ids, generated_ids)
83
+ ]
84
+
85
+ # Decode the output text
86
+ output_text = processor.batch_decode(
87
+ trimmed_generated_ids,
88
+ skip_special_tokens=True,
89
+ clean_up_tokenization_spaces=False
90
+ )
91
+
92
+ return output_text[0] # Return the first decoded output text
93
+
94
+ output = test(model, processor, test_image)
95
+ print(output)
96
+ ```
97
+
98
+
99
 
100
  ## Training Details
101
 
 
107
 
108
  ### Training Procedure
109
 
110
+ * It has been fine-tuned for 1200 steps. However, the checkpoints correspond to the model saved at 400 steps which gave the best loss.
111
+ * The text file annotations were generated using Qwen2.5-3B VL.
 
 
 
112
 
113
 
114
  #### Training Hyperparameters
115
 
116
+ * It is a LoRA model.
117
+
118
+ **LoRA configuration:**
119
+
120
+ ```python
121
+ # Configure LoRA
122
+ peft_config = LoraConfig(
123
+ r=8,
124
+ lora_alpha=16,
125
+ lora_dropout=0.0,
126
+ target_modules=['down_proj','o_proj','k_proj','q_proj','gate_proj','up_proj','v_proj'],
127
+ use_dora=True,
128
+ init_lora_weights='gaussian'
129
+ )
130
+
131
+ # Apply PEFT model adaptation
132
+ peft_model = get_peft_model(model, peft_config)
133
+
134
+ # Print trainable parameters
135
+ peft_model.print_trainable_parameters()
136
+ ```
137
+
138
+ **Trainer configuration:**
139
+
140
+ ```python
141
+ # Configure training arguments using SFTConfig
142
+ training_args = transformers.TrainingArguments(
143
+ output_dir=output_dir,
144
+ logging_dir=output_dir,
145
+ # num_train_epochs=1,
146
+ max_steps=1200, # 625,
147
+ per_device_train_batch_size=1, # Batch size MUST be 1 for Phi 3.5 Vision Instruct fine-tuning
148
+ per_device_eval_batch_size=1, # Batch size MUST be 1 for Phi 3.5 Vision Instruct fine-tuning
149
+ gradient_accumulation_steps=4, # 4
150
+ warmup_steps=50,
151
+ learning_rate=1e-4,
152
+ weight_decay=0.01,
153
+ logging_steps=400,
154
+ eval_steps=400,
155
+ save_steps=400,
156
+ logging_strategy='steps',
157
+ eval_strategy='steps',
158
+ save_strategy='steps',
159
+ save_total_limit=2,
160
+ optim='adamw_torch_fused',
161
+ bf16=True,
162
+ report_to='wandb',
163
+ remove_unused_columns=False,
164
+ gradient_checkpointing=True,
165
+ dataloader_num_workers=4,
166
+ # dataset_text_field='',
167
+ # dataset_kwargs={'skip_prepare_dataset': True},
168
+ load_best_model_at_end=True,
169
+ save_safetensors=True,
170
+ )
171
+ ```
172
 
173
  ## Evaluation
174
 
175
+ The current best validation loss is **0.377421**.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
+ The CER on the test set is **0.355**. The Qwen2.5-3B VL test annotations were used as ground truth.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
 
179
  ## Technical Specifications [optional]
180
 
 
 
 
 
181
  ### Compute Infrastructure
182
 
183
+ The model was trained on a system with 10GB RTX 3080 GPU, 10th generation i7 CPU, and 32GB RAM.
 
 
 
 
 
 
184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  ### Framework versions
186
 
187
+ ```
188
+ torch==2.5.1
189
+ torchvision==0.20.1
190
+ torchaudio==2.5.1
191
+ flash-attn==2.7.2.post1
192
+ triton==3.1.0
193
+ transformers==4.51.3
194
+ accelerate==1.2.0
195
+ datasets==4.1.1
196
+ huggingface-hub==0.31.1
197
+ peft==0.15.2
198
+ trl==0.18.0
199
+ safetensors==0.4.5
200
+ sentencepiece==0.2.0
201
+ tiktoken==0.8.0
202
+ einops==0.8.0
203
+ opencv-python==4.10.0.84
204
+ pillow==10.2.0
205
+ numpy==2.2.0
206
+ scipy==1.14.1
207
+ tqdm==4.66.4
208
+ pandas==2.2.2
209
+ pyarrow==21.0.0
210
+ regex==2024.11.6
211
+ requests==2.32.3
212
+ python-dotenv==1.1.1
213
+ wandb==0.22.1
214
+ rich==13.9.4
215
+ jiwer==4.0.0
216
+ bitsandbytes==0.45.0
217
+ ```
218
+
adapter_config.json CHANGED
@@ -18,7 +18,7 @@
18
  "loftq_config": {},
19
  "lora_alpha": 16,
20
  "lora_bias": false,
21
- "lora_dropout": 0.1,
22
  "megatron_config": null,
23
  "megatron_core": "megatron.core",
24
  "modules_to_save": null,
@@ -30,8 +30,8 @@
30
  "v_proj",
31
  "k_proj",
32
  "down_proj",
33
- "gate_proj",
34
  "q_proj",
 
35
  "o_proj",
36
  "up_proj"
37
  ],
 
18
  "loftq_config": {},
19
  "lora_alpha": 16,
20
  "lora_bias": false,
21
+ "lora_dropout": 0.0,
22
  "megatron_config": null,
23
  "megatron_core": "megatron.core",
24
  "modules_to_save": null,
 
30
  "v_proj",
31
  "k_proj",
32
  "down_proj",
 
33
  "q_proj",
34
+ "gate_proj",
35
  "o_proj",
36
  "up_proj"
37
  ],
adapter_model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:c17caf0f7db5ab1a99a01645dce61fe1aaf468e0737b8af86cbd0e49fca8ecb7
3
  size 23692472
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:12d72b2be539aaa15a35d3467108ab4020c951d1a03fc33336725a86ad93ac3e
3
  size 23692472
training_args.bin CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:0c3bdaee66245ab8ad4b054eb08da1033954d9be35bbe74700293192ed7f5a4c
3
  size 5304
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:354760f82ee21230895bce5a4846f7a7b7665f442926237e320afb2996b01373
3
  size 5304