Skip to main content

LaTeX-OCR Training Ver.2

Sau kết quả training lần đầu đạt mức khá ổn, tuy nhiên trong dữ liệu có khá nhiều vấn đề cần phải giải quyết.
Created on October 15|Last edited on October 22

Data dùng để training model:

Train set: 76519 images
Validation set: 12.000 images
Test set: 10.000 images
Labels: 98.519 lines

Preprocess data:

- Label bị nhiễu loạn
Sau quá trình EDA dữ liệu, trong bộ dữ liệu có tồn tại những hình ảnh + label vô nghĩa
VD: ảnh 1 khi nhìn vào có thể hiểu là "là một hàm nghịch biến trong khoảng", tuy nhiên nội dung bức ảnh không thể hiện được, cộng với việc label của bức ảnh trong file .txt có dạng:
" là một hàm nghịch biến trên khoảng "
Ảnh 1
Điều này làm cho bộ tokenizer trở nên rất nhiễu loạn, ảnh hưởng nghiêm trọng đến độ chính xác của model.
Vấn đề này được giải quyết bằng việc loại bỏ luôn những hình ảnh + label có dạng tương tự. Tuy nhiên số lượng những ảnh này xuất hiện không nhiều (dưới 20 bức ảnh) nên có thể xử lý bằng tay được.

- Size của bức ảnh:
Với bức ảnh ban đầu sẽ tồn tại những bức ảnh có size quá nhỏ (kích thước chiều rộng hoặc cao nhỏ hơn 32). Những bức ảnh này được giải quyết bằng cách loại bỏ để tiện cho việc padding ảnh.
Sau đó các bức ảnh được kiểm tra cho việc padding bằng cách kiểm tra các thông số chiều rộng, chiều cao thông qua phép chia lấy phần dư.
Padding chiều cao = 16 - (Chiều cao gốc của bức ảnh % 16)
Padding chiều rộng = 16 - (Chiều rộng gốc của bức ảnh % 16)
VD: với ảnh có shape (91, 111, 3)
Chiều cao cần padding thêm vào = 16 - (91 % 16) = 16 - 5 = 9
Chiều rộng cần padding thêm vào = 16 - (111 % 16) = 16 - 15 = 1
Gọi là giá trị cần padding thêm (*)
Sau đó bức ảnh gốc sẽ được padding thêm vùng ảnh trắng vào phía bên phải, bên dưới của bức ảnh
Ảnh gốc có shape (91, 111, 3)

Ảnh 2 sau khi được padding phải/dưới để trở thành bội số của 16 với shape (96, 112, 3)
Tuy nhiên với nhiều bức ảnh sau khi padding đưa về bội số của 16 vẫn có hiện tượng nội dung của ảnh quá sát với viền ảnh, dẫn đến việc performance của model không được tốt.
Sau đó bức ảnh được padding thêm một lần nữa cho đều 4 góc
Ở bức ảnh trước em đã padding vùng ảnh trắng vào phần bên phải, ở dưới của bức ảnh
Ở bước này em tiến hành việc padding ảnh vào 4 phía của bức ảnh, kế thừa từ kỹ thuật padding ảnh về bội số của 16
Top, left: + 32 vào mỗi phía
Right, bottom: lấy giá trị cần padding thêm (*) + 16

VD: Ảnh gốc có shape là (91, 111, 3)
Chiều cao ở phía dưới cần padding thêm vào ở phía dưới = 16 - (91 % 16) + 16 = 5 + 16 = 21
Chiều rộng cần padding thêm vào phía bên phải = 16 - (111 % 16) + 16= 1 + 16 = 17
Padding thêm phần ảnh phía bên trái: +32
Padding thêm phần ảnh phía bên trên: +32
Như vậy kích thước chiều rộng của bức ảnh sẽ là 111 + 17 + 32 = 160
Kích thước chiều cao của bức ảnh sẽ là 91 + 21 + 32 = 144
Ảnh sau cùng được padding 4 phía có shape (144, 160, 3)


- Biểu đồ train/loss trong quá trình train

Thông số quá trình training:
32 epochs, khoảng 20-25p để hoàn thành 1 epoch
Thời gian train liên tục: khoảng 16h
Thời gian train thực tế: gần 2 ngày

Run: im2latex_weai_ver2
1


- Biểu đồ thông số các metrics trên tập validation

Các thông số được kỳ vọng như sau:
BLEU Score, Token Accuracy: càng cao càng tốt
Edit Distance: Càng thấp càng tốt

Run: im2latex_weai_ver2
1


- Biểu đồ thông số các metrics trên tập Test

Thông qua thử nghiệm các model đã được train, ở đây em chọn ra model e29_step7032.pth vì có hiệu năng tốt nhất.
Trục x biểu thị giá trị của các metrics thu được
Trục y biểu thị quá trình evaluate trên tập test (về bản chất là 10k file test, ở đây Wandb nhận giá trị là step trong quá trình training nên cần phải confirm trục y )

BLEU score Edit Distance Token Accuracy
0.7347 0.1121 0.7528

Run: im2latex_weai_ver2
1


- Đánh giá sai số có thể chấp nhận được khi predict trên dữ liệu test





Về cơ bản thì trong quá trình predict, model có xu hướng predict sai ở các notation trong LaTeX code (có thể bị dư, thiếu hoặc sai một vài chỗ).
Tuy nhiên theo cá nhân em đánh giá thì với mức sai số trên đây có thể tạm chấp nhận được.