zhaospei commited on
Commit
ae02011
·
verified ·
1 Parent(s): 6d8a6ce

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -1,35 +1,27 @@
1
  *.7z filter=lfs diff=lfs merge=lfs -text
2
  *.arrow filter=lfs diff=lfs merge=lfs -text
3
  *.bin filter=lfs diff=lfs merge=lfs -text
 
4
  *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
  *.ftz filter=lfs diff=lfs merge=lfs -text
7
  *.gz filter=lfs diff=lfs merge=lfs -text
8
  *.h5 filter=lfs diff=lfs merge=lfs -text
9
  *.joblib filter=lfs diff=lfs merge=lfs -text
10
  *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
  *.model filter=lfs diff=lfs merge=lfs -text
13
  *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
  *.onnx filter=lfs diff=lfs merge=lfs -text
17
  *.ot filter=lfs diff=lfs merge=lfs -text
18
  *.parquet filter=lfs diff=lfs merge=lfs -text
19
  *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
  *.pt filter=lfs diff=lfs merge=lfs -text
23
  *.pth filter=lfs diff=lfs merge=lfs -text
24
  *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
  *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
  *.tflite filter=lfs diff=lfs merge=lfs -text
30
  *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
  *.xz filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
  *.7z filter=lfs diff=lfs merge=lfs -text
2
  *.arrow filter=lfs diff=lfs merge=lfs -text
3
  *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bin.* filter=lfs diff=lfs merge=lfs -text
5
  *.bz2 filter=lfs diff=lfs merge=lfs -text
 
6
  *.ftz filter=lfs diff=lfs merge=lfs -text
7
  *.gz filter=lfs diff=lfs merge=lfs -text
8
  *.h5 filter=lfs diff=lfs merge=lfs -text
9
  *.joblib filter=lfs diff=lfs merge=lfs -text
10
  *.lfs.* filter=lfs diff=lfs merge=lfs -text
 
11
  *.model filter=lfs diff=lfs merge=lfs -text
12
  *.msgpack filter=lfs diff=lfs merge=lfs -text
 
 
13
  *.onnx filter=lfs diff=lfs merge=lfs -text
14
  *.ot filter=lfs diff=lfs merge=lfs -text
15
  *.parquet filter=lfs diff=lfs merge=lfs -text
16
  *.pb filter=lfs diff=lfs merge=lfs -text
 
 
17
  *.pt filter=lfs diff=lfs merge=lfs -text
18
  *.pth filter=lfs diff=lfs merge=lfs -text
19
  *.rar filter=lfs diff=lfs merge=lfs -text
20
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
 
21
  *.tar.* filter=lfs diff=lfs merge=lfs -text
 
22
  *.tflite filter=lfs diff=lfs merge=lfs -text
23
  *.tgz filter=lfs diff=lfs merge=lfs -text
 
24
  *.xz filter=lfs diff=lfs merge=lfs -text
25
  *.zip filter=lfs diff=lfs merge=lfs -text
26
+ *.zstandard filter=lfs diff=lfs merge=lfs -text
27
  *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ✍️ Mô hình nhận dạng chữ viết tay hiệu suất cao
2
+ ## 📝 Giới thiệu
3
+ Mô hình TrOCR Small là một mô hình Vision Transformer encoder + Transformer decoder được Microsoft phát triển, fine‑tuned trên tập dữ liệu IAM chuyên nhận dạng chữ viết tay.
4
+ Encoder được khởi tạo từ DeiT, còn decoder được khởi tạo từ UniLM, dùng để chuyển đổi hình ảnh chứa chữ viết tay thành văn bản.
5
+
6
+ ## 📌 Nhiệm vụ
7
+ Loại bài toán: OCR – Nhận dạng ký tự từ dòng hình ảnh chữ viết tay
8
+
9
+ Mô hình được định hướng cho đầu vào là các dòng chữ, mỗi dòng sinh ra tương ứng một chuỗi ký tự.
10
+
11
+ ## 📥 Đầu vào
12
+ Hình ảnh: RGB hoặc chuyển đổi từ ảnh grayscale
13
+ Xử lý bởi: TrOCRProcessor (sử dụng ViTImageProcessor + RobertaTokenizer)
14
+ Patch size: Hình ảnh được chia thành patch 16×16, mã hóa vị trí rồi đưa vào encoder
15
+
16
+ ## 📤 Đầu ra
17
+ Mô hình sinh chuỗi token tương ứng ký tự dòng viết tay.
18
+ Sử dụng processor.batch_decode(..., skip_special_tokens=True) để chuyển các token này thành văn bản đọc được.
19
+
20
+ ## 🛠 Cài đặt
21
+ ```bash
22
+ pip install torch torchvision transformers pillow
23
+ ```
24
+
25
+ ## 🧪 Ví dụ sử dụng
26
+ ```python
27
+ from transformers import TrOCRProcessor, VisionEncoderDecoderModel
28
+ from PIL import Image
29
+ import requests
30
+ import torch
31
+
32
+ # Tải ảnh ví dụ từ IAM
33
+ url = 'https://fki.tic.heia-fr.ch/static/img/a01-122-02-00.jpg'
34
+ image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
35
+
36
+ # Load processor và mô hình
37
+ processor = TrOCRProcessor.from_pretrained("zhaospei/Model_15")
38
+ model = VisionEncoderDecoderModel.from_pretrained("zhaospei/Model_15")
39
+ model.eval()
40
+
41
+ # Tiền xử lý ảnh
42
+ pixel_values = processor(images=image, return_tensors="pt").pixel_values
43
+
44
+ # Dự đoán văn bản từ ảnh
45
+ with torch.no_grad():
46
+ generated_ids = model.generate(pixel_values)
47
+
48
+ # Giải mã các token thành câu
49
+ generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
50
+ print("Kết quả OCR:", generated_text)
51
+ ```
52
+
53
+ ## 📊 Hiệu năng & ứng dụng
54
+ Mô hình đạt accuracy cao trên bộ dữ liệu IAM (handwritten), vượt trội so với các giải pháp truyền thống dựa trên CNN+RNN.
55
+ Kích thước nhỏ và dễ deploy cho các ứng dụng OCR di động hoặc offline, nơi tài nguyên bị giới hạn.
56
+
57
+ ## ⚠️ Hạn chế
58
+ Được thiết kế dành riêng nhận dạng một dòng chữ tay, không phù hợp với định dạng văn bản phức tạp (đa dòng, layout phức tạp).
59
+ Hiệu suất giảm nếu hình ảnh chất lượng kém (mờ, nhiễu) hoặc đối với font/handwriting style khác so với dữ liệu IAM.
config.json ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "VisionEncoderDecoderModel"
4
+ ],
5
+ "decoder": {
6
+ "_name_or_path": "",
7
+ "activation_dropout": 0.0,
8
+ "activation_function": "relu",
9
+ "add_cross_attention": true,
10
+ "architectures": null,
11
+ "attention_dropout": 0.0,
12
+ "bad_words_ids": null,
13
+ "bos_token_id": 0,
14
+ "chunk_size_feed_forward": 0,
15
+ "classifier_dropout": 0.0,
16
+ "cross_attention_hidden_size": 384,
17
+ "d_model": 256,
18
+ "decoder_attention_heads": 8,
19
+ "decoder_ffn_dim": 1024,
20
+ "decoder_layerdrop": 0.0,
21
+ "decoder_layers": 6,
22
+ "decoder_start_token_id": 2,
23
+ "diversity_penalty": 0.0,
24
+ "do_sample": false,
25
+ "dropout": 0.1,
26
+ "early_stopping": false,
27
+ "encoder_no_repeat_ngram_size": 0,
28
+ "eos_token_id": 2,
29
+ "finetuning_task": null,
30
+ "forced_bos_token_id": null,
31
+ "forced_eos_token_id": null,
32
+ "id2label": {
33
+ "0": "LABEL_0",
34
+ "1": "LABEL_1"
35
+ },
36
+ "init_std": 0.02,
37
+ "is_decoder": true,
38
+ "is_encoder_decoder": false,
39
+ "label2id": {
40
+ "LABEL_0": 0,
41
+ "LABEL_1": 1
42
+ },
43
+ "layernorm_embedding": true,
44
+ "length_penalty": 1.0,
45
+ "max_length": 20,
46
+ "max_position_embeddings": 512,
47
+ "min_length": 0,
48
+ "model_type": "trocr",
49
+ "no_repeat_ngram_size": 0,
50
+ "num_beam_groups": 1,
51
+ "num_beams": 1,
52
+ "num_return_sequences": 1,
53
+ "output_attentions": false,
54
+ "output_hidden_states": false,
55
+ "output_scores": false,
56
+ "pad_token_id": 1,
57
+ "prefix": null,
58
+ "problem_type": null,
59
+ "pruned_heads": {},
60
+ "remove_invalid_values": false,
61
+ "repetition_penalty": 1.0,
62
+ "return_dict": true,
63
+ "return_dict_in_generate": false,
64
+ "scale_embedding": true,
65
+ "sep_token_id": null,
66
+ "task_specific_params": null,
67
+ "temperature": 1.0,
68
+ "tie_encoder_decoder": false,
69
+ "tie_word_embeddings": false,
70
+ "tokenizer_class": null,
71
+ "top_k": 50,
72
+ "top_p": 1.0,
73
+ "torch_dtype": null,
74
+ "torchscript": false,
75
+ "transformers_version": "4.14.1",
76
+ "use_bfloat16": false,
77
+ "use_cache": false,
78
+ "use_learned_position_embeddings": true,
79
+ "vocab_size": 64044
80
+ },
81
+ "encoder": {
82
+ "_name_or_path": "",
83
+ "add_cross_attention": false,
84
+ "architectures": null,
85
+ "attention_probs_dropout_prob": 0.0,
86
+ "bad_words_ids": null,
87
+ "bos_token_id": null,
88
+ "chunk_size_feed_forward": 0,
89
+ "cross_attention_hidden_size": null,
90
+ "decoder_start_token_id": null,
91
+ "diversity_penalty": 0.0,
92
+ "do_sample": false,
93
+ "early_stopping": false,
94
+ "encoder_no_repeat_ngram_size": 0,
95
+ "eos_token_id": null,
96
+ "finetuning_task": null,
97
+ "forced_bos_token_id": null,
98
+ "forced_eos_token_id": null,
99
+ "hidden_act": "gelu",
100
+ "hidden_dropout_prob": 0.0,
101
+ "hidden_size": 384,
102
+ "id2label": {
103
+ "0": "LABEL_0",
104
+ "1": "LABEL_1"
105
+ },
106
+ "image_size": 384,
107
+ "initializer_range": 0.02,
108
+ "intermediate_size": 1536,
109
+ "is_decoder": false,
110
+ "is_encoder_decoder": false,
111
+ "label2id": {
112
+ "LABEL_0": 0,
113
+ "LABEL_1": 1
114
+ },
115
+ "layer_norm_eps": 1e-12,
116
+ "length_penalty": 1.0,
117
+ "max_length": 20,
118
+ "min_length": 0,
119
+ "model_type": "deit",
120
+ "no_repeat_ngram_size": 0,
121
+ "num_attention_heads": 6,
122
+ "num_beam_groups": 1,
123
+ "num_beams": 1,
124
+ "num_channels": 3,
125
+ "num_hidden_layers": 12,
126
+ "num_return_sequences": 1,
127
+ "output_attentions": false,
128
+ "output_hidden_states": false,
129
+ "output_scores": false,
130
+ "pad_token_id": null,
131
+ "patch_size": 16,
132
+ "prefix": null,
133
+ "problem_type": null,
134
+ "pruned_heads": {},
135
+ "qkv_bias": true,
136
+ "remove_invalid_values": false,
137
+ "repetition_penalty": 1.0,
138
+ "return_dict": true,
139
+ "return_dict_in_generate": false,
140
+ "sep_token_id": null,
141
+ "task_specific_params": null,
142
+ "temperature": 1.0,
143
+ "tie_encoder_decoder": false,
144
+ "tie_word_embeddings": true,
145
+ "tokenizer_class": null,
146
+ "top_k": 50,
147
+ "top_p": 1.0,
148
+ "torch_dtype": null,
149
+ "torchscript": false,
150
+ "transformers_version": "4.14.1",
151
+ "use_bfloat16": false
152
+ },
153
+ "eos_token_id": 2,
154
+ "is_encoder_decoder": true,
155
+ "model_type": "vision-encoder-decoder",
156
+ "tie_word_embeddings": false,
157
+ "torch_dtype": "float32",
158
+ "transformers_version": null
159
+ }
generation_config.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "bos_token_id": 0,
4
+ "decoder_start_token_id": 2,
5
+ "eos_token_id": 2,
6
+ "pad_token_id": 1,
7
+ "transformers_version": "4.27.0.dev0",
8
+ "use_cache": false
9
+ }
preprocessor_config.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "crop_size": 224,
3
+ "do_center_crop": false,
4
+ "do_normalize": true,
5
+ "do_resize": true,
6
+ "image_processor_type": "DeiTImageProcessor",
7
+ "image_mean": [
8
+ 0.5,
9
+ 0.5,
10
+ 0.5
11
+ ],
12
+ "image_std": [
13
+ 0.5,
14
+ 0.5,
15
+ 0.5
16
+ ],
17
+ "resample": 3,
18
+ "size": 384
19
+ }
pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1b83102cbc1520dee1c3937ac334da83da18cf4683d46ebd1bd4e93ebe584dd7
3
+ size 245933041
sentencepiece.bpe.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6f5e2fefcf793761a76a6bfb8ad35489f9c203b25557673284b6d032f41043f4
3
+ size 1356293
special_tokens_map.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"bos_token": "<s>", "eos_token": "</s>", "unk_token": "<unk>", "sep_token": "</s>", "pad_token": "<pad>", "cls_token": "<s>", "mask_token": {"content": "<mask>", "single_word": false, "lstrip": true, "rstrip": false, "normalized": true}}
tokenizer_config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"bos_token": "<s>", "eos_token": "</s>", "unk_token": "<unk>", "sep_token": "</s>", "cls_token": "<s>", "pad_token": "<pad>", "mask_token": {"content": "<mask>", "single_word": false, "lstrip": true, "rstrip": false, "normalized": true, "__type": "AddedToken"}, "sp_model_kwargs": {}, "tokenizer_class": "XLMRobertaTokenizer"}