Ảnh minh họa 3 phép biến đổi thêm, sửa, xóa

Một phần của tài liệu Đánh giá phương pháp rút trích thông tin hóa đơn tại việt nam (khóa luận tốt nghiệp) (Trang 70)

Ví dụ, khoảng cách Levenshtein giữa chuỗi “sitting” và “kitten” là 3 vì “sitting” cần ít nhất 3 bước biến đổi để trở thành “kitten”:

− Bước 1: “sitting” → “kitting” (thay thế).

− Bước 2: “kitting” → “kitteng” (thay thế).

− Bước 3: “kitteng” → “kitten” (xóa).

4.2.2.2. Độ đo CER

Trong cuộc thi Mobile-Captured Image Document Recognition for Vietnamese Receipts (MC-OCR) – Legacy, độ đo CER (Character Error Rate) được sử dụng để đánh giá kết quả được các thí sinh nộp lên.

1 https://towardsdatascience.com/evaluating-ocr-output-quality-with-character-error-rate-cer-and-word-error- rate-wer-853175297510

71

CER được xây dựng dựa trên khoảng cách Levenshtein với công thức như sau:

𝐶𝐸𝑅 = 𝑖 + 𝑠 + 𝑑 𝑛

Trong đó:

− 𝑖 + 𝑠 + 𝑑 là số bước biến đổi ở mức ký tự ít nhất để chuyển kết quả

dự đoán được thành đáp án thực tế (groundtruth).

− 𝑛 là số ký tự trong đáp án thực tế.

Thông thường, CER được sử dụng để đánh giá các tác vụ cần chính xác từng ký tự ví dụ như nhận dạng số điện thoại, số chứng minh thư, …

4.2.2.3. Độ đo WER

Bên cạnh CER, WER (Word Error Rate) cũng hay được dùng để đánh giá kết quả của các tác vụ nhận dạng ký tự quang học, tuy nhiên WER thường được áp dụng với những tác vụ liên quan tới nhận dạng đoạn văn, hoặc câu văn từ các từ có nghĩa.

𝑊𝐸𝑅 =𝑖𝑤 + 𝑠𝑤 + 𝑑𝑤 𝑛𝑤

Trong đó:

− 𝑖𝑤 + 𝑠𝑤 + 𝑑𝑤 là số bước biến đổi ở mức từ ít nhất để chuyển kết quả dự đoán được thành đáp án thực tế (groundtruth).

− 𝑛𝑤 là số từ trong đáp án thực tế.

4.3. Quy trình thực nghiệm và đánh giá 4.3.1 Thu thập và tiền xử lý dữ liệu 4.3.1 Thu thập và tiền xử lý dữ liệu

− Thu thập ảnh, xử lý, gán nhãn ảnh.

− Tạo 3 folder: train, val, test lần lượt chứa ảnh tập train, tập validation, tập test.

72

4.3.2 Cài đặt môi trường

− Link reference: https://github.com/open-mmlab/mmdetection

− Yêu cầu cài đặt:

− Chuẩn bị:

+ config_faster_rcnn.py: file dùng để thiết lập cấu hình cho phương pháp Faster RCNN.

+ config_yolov3.py: file dùng để thiết lập cấu hình cho phương pháp YOLOv3.

+ config_yolof.py: file dùng để thiết lập cấu hình cho phương pháp YOLOF.

4.3.3 Huấn luyện model 4.3.3.1. Giai đoạn 1 4.3.3.1. Giai đoạn 1

(a) Phương pháp Faster R-CNN:

− Chạy huấn luyện bằng command:

(b) Phương pháp YOLOv3:

− Chạy huấn luyện bằng command:

(c) Phương pháp YOLOF:

− Chạy huấn luyện bằng command:

!python tools/train.py config_faster_rcnn.py Python v3.7.10

PyTorch: 1.7.0 CUDA >= v10.0 MMCV >= 1.3.8

!python tools/train.py config_yolov3.py

73

4.3.3.2. Giai đoạn 2

Chúng tôi tiến hành huấn luyện model TransformerOCR và AttentionOCR dựa trên hướng dẫn từ tác giả của VietOCR. Đầu tiên, chúng tôi chuẩn bị dữ liệu để huấn luyện theo yêu cầu của model.

Hình 4-6: Cấu trúc thư mục dữ liệu được yêu cầu (ảnh cắt từ trang hướng dẫn sử dụng model1).

Hình 4-7: Định dạng file nhãn theo yêu cầu (ảnh cắt từ trang hướng dẫn sử dụng model2).

Dựa trên yêu cầu của model, chúng tôi cắt các bounding box từ các ảnh của bộ train và bộ val thành các ảnh riêng biệt, chỉ chứa một dòng ký tự của hóa đơn, sau đó tiến hành quay ngang dịng ký tự (đối với các bounding box có chiều cao lớn hơn chiều rộng, chúng tôi xoay ảnh 90° theo chiều kim đồng hồ), sau đó, chúng tơi tiến hành tạo file nhãn dựa trên nhãn của bộ dữ liệu mới của chúng tôi.

1 https://pbcquoc.github.io/vietocr/ 2 https://pbcquoc.github.io/vietocr/

74

Dựa trên bộ dữ liệu ban đầu, chúng tôi đã tạo ra dữ liệu nhằm huấn luyện model TransformerOCR và AttentionOCR với 6,115 ảnh train và 2,190 ảnh test. Chúng tôi chạy code được tác giả cung cấp sẵn để huấn luyện cả hai model.

4.3.4 Đánh giá model 4.3.4.1. Giai đoạn 1

(a) Phương pháp Faster R-CNN:

− Tính giá trị mAP của tồn bộ tập test bằng command sau:

− Chạy kiểm thử trên tập test và lưu kết quả vào thư mục result_faster_rcnn:

(b) Phương pháp YOLOv3:

− Tính giá trị mAP của tồn bộ tập test bằng command sau:

− Chạy kiểm thử trên tập test và lưu kết quả vào thư mục result_yolov3: ! python tools/test.py config_faster_rcnn.py ./work_dirs/

config_faster_rcnn/latest.pth --show-dir result_faster_rcnn

!python tools/test.py config_ faster_rcnn.py

./work_dirs/config_faster_rcnn/latest.pth --eval bbox -- options "classwise=True"

!python tools/test.py config_ yolov3.py

./work_dirs/config_yolov3/latest.pth --eval bbox -- options "classwise=True"

! python tools/test.py config_yolov3.py ./work_dirs/ config_yolov3/latest.pth --show-dir result_yolov3

75

(c) Phương pháp YOLOF:

− Tính giá trị mAP của tồn bộ tập test bằng command sau:

− Chạy kiểm thử trên tập test và lưu kết quả vào thư mục result_yolof:

4.3.4.2. Giai đoạn 2

Chúng tôi sử dụng kết quả bounding box được dự đoán trên tập test ở giai đoạn 1 để làm đầu vào cho model TransformerOCR và AttentionOCR đã được huấn luyện. Các bounding box này sẽ được cắt ra khỏi ảnh, và quay 90º theo chiều kim đồng hồ nếu bounding box có chiều cao lớn hơn chiều rộng sau đó mới được đưa vào dự đốn trong model. Sau khi có được kết quả dự đốn từ 2 model, chúng tôi tiến hành so sánh và đánh giá kết bằng độ đo CER và WER.

4.3.5 Kết quả

4.3.5.1. Kết quả thực nghiệm

mAP

AP

SELLER ADDRESS TIMESTAMP TOTAL_COST Faster R-

CNN 57.5 59.1 63.0 53.4 54.8 YOLOv3 50.1 50.2 37.0 53.4 58.8 YOLOF 28.4 31.7 11.5 31.1 39.1

Bảng 4-1: Bảng kết quả thực nghiệm 3 phương pháp Faster R-CNN, YOLOv3 và YOLOF cho giai đoạn đầu của bài toán (Kết quả tốt nhất được in đậm).

!python tools/test.py config_ yolof.py

./work_dirs/config_yolof/latest.pth --eval bbox --options "classwise=True"

! python tools/test.py config_yolof.py ./work_dirs/ config_yolof/latest.pth --show-dir result_yolof

76

Objectection OCR CER (%/ảnh) WER (%/ảnh) Faster R-CNN TransformerOCR 26.11 32.47 AttentionOCR 26.80 33.47 YOLOv3 TransformerOCR 50.95 55.89 AttentionOCR 51.82 57.01 YOLOF TransformerOCR 95.27 95.73 AttentionOCR 95.27 95.75

Bảng 4-2: Bảng kết quả thực nghiệm và thời gian thực nghiệm của các phương pháp AttentionOCR và TransformerOCR cho giai đoạn sau của bài toán (Kết quả tốt nhất

được in đậm).

Dựa trên Bảng 4-2, ta thấy TransformerOCR có kết quả bằng hoặc cao hơn AttentionOCR khoảng từ 0% cho đến 0.87% CER hay từ 0% cho đến 1.12% WER.

4.3.5.2. Hình ảnh minh họa

(a) Phương pháp Faster R-CNN:

77

Hình 4-8. Ảnh minh họa trường hợp dự đốn tốt khi thực nghiệm bằng phương pháp Faster R-CNN.

78

Hình 4-9: Ảnh minh họa trường hợp dự đốn khơng tốt bằng phương pháp Faster R- CNN (1).

Hình 4-10: Ảnh minh họa trường hợp dự đốn khơng tốt bằng phương pháp Faster R-CNN (2).

(b) Phương pháp YOLOv3:

79

Hình 4-11: Ảnh minh họa trường hợp dự đoán tốt bằng phương pháp YOLOv3.

80

Hình 4-12: Ảnh minh họa trường hợp dự đốn khơng tốt bằng phương pháp YOLOv3 (dự đốn thiếu).

(c) Phương pháp YOLOF:

81

Hình 4-13: Ảnh minh họa trường hợp dự đoán tốt bằng phương pháp YOLOF.

− Trường hợp dự đốn khơng tốt

Hình 4-14: Ảnh minh họa trường hợp dự đốn khơng tốt bằng phương pháp YOLOF (dự đoán thiếu).

82

Hình 4-15: Ảnh minh họa trường hợp dự đốn khơng tốt bằng phương pháp YOLOF (Dự đoán nhiều bounding box trên một đối tượng thực tế).

Hình 4-16: Ảnh minh họa trường hợp dự đốn khơng tốt bằng phương pháp YOLOF (Dự đoán sai đối tượng, bounding box chỉ bao một phần của đối tượng).

4.3.5.3. Đánh giá kết quả

Sau khi tiến hành chạy thực nghiệm 3 model Faster R-CNN, YOLOv3, YOLOF thu được kết quả:

83

− Model YOLOv3 cho ra kết quả cao nhất ở lớp TIMESTAMP, lớp TOTAL_COST.

− Model Faster R-CNN cho ra kết quả cao nhất ở lớp SELLER, ADDRESS.

− Model YOLOF cho ra kết quả thấp nhất ở cả 4 lớp so với hai model còn lại là Faster R-CNN và YOLOv3.

− Có nhiều nguyên nhân dẫn đến kết quả thực nghiệm thấp:

+ Sự đa dạng định dạng hóa đơn: bố cục, định dạng font chữ, định dạng thời gian, đa dạng ngơn ngữ, độ đậm nhạt của mực in hóa đơn, …

+ Bộ dữ liệu đa dạng về: độ phân giải, ánh sáng, chiều hướng của ảnh, …

84

Chương 5. ĐỀ XUẤT CẢI TIẾN VÀ ĐÁNH GIÁ KẾT QUẢ

5.1. Đề xuất cải tiến

Do Faster R-CNN có kết quả cao gần như hơn YOLOv3 và YOLOF ở tất cả các cột, và đây cũng là phương pháp two-state detection do đó chúng tơi tập trung cải thiện phương pháp này. Thông qua thực nghiệm, chúng tôi nhận thấy rằng khi thay Roi Pooling của Faster R-CNN thành Precise Roi Pooling[6] thì model sẽ cho ra kết quả tốt hơn.

5.1.1 Roi Pooling

Hình 5.1: Ảnh mơ tả quá trình quantization trong Roi Pooling. Vùng RoI gốc này bên ảnh trái và vùng này sẽ được ánh xạ xuống feature map 16*16 bên ảnh phải1.

Roi Pooling sử dụng max pooling trên các RoI của bức ảnh đầu vào với kích thước không cố định để ánh xạ thành các feature map có kích thước cố định. Khi ánh xạ các RoI xuống thành những feature map hình vng có kích thước nhỏ hơn, tỉ lệ các RoI này so với feature map cũng sẽ thay đổi, bên cạnh đó, do khi làm việc trên

1 https://viblo.asia/p/deep-learning-thuat-toan-faster-rcnn-voi-bai-toan-phat-hien-duong-luoi-bo-faster-rcnn- object-detection-algorithm-for-nine-dash-line-detection-bJzKmREOZ9N

85

feature map ta chỉ có thể xét được tọa độ là các số tự nhiên, vì vậy, trong RoI Pooling ta phải sử dụng một kỹ thuật gọi là Quantization – Lượng tử hóa. Về bản chất, Quantization là một phép tốn làm trịn các tọa độ tính được sau khi chia tỉ lệ tọa độ của các RoI và đưa vào để vừa với feature map.

Tuy nhiên, việc quantization này cũng gây ra một điểm yếu lớn: sự mất mát về dữ liệu. Ví dụ trong hình, ta cần phải đưa vùng RoI về feature map cố định 3 ∗ 3 sử dụng max poolng, tuy nhiên, vì sử dụng quantization mà dịng cuối cùng của RoI này đã khơng được sử dụng.

5.1.2 Roi Align

Để giải quyết sự mất mát dữ liệu, thay vì sử dụng quantization, RoI Align[7] sử dụng nội suy tuyến tính để có thể lấy hết được tồn bộ vùng RoI, không chỉ vậy, nội suy tuyến tính cịn cho phép tọa độ của RoI là các số thực.

Thơng qua việc tính tốn tại điểm có tọa độ trung tâm trên từng pixel với các điểm trung tâm các pixel lân cận, ta có thể nội suy một lần nữa các điểm trong cùng vùng để suy ra được giá trị cuối cùng đưa vào feature map kết quả.

86

5.1.3 Precise Roi Pooling

Hình 5-2: Hình so sánh giữa RoI Pooling, RoI Align và Precise Roi Pooling (Ảnh từ github phương pháp).

Kế thừa từ RoI Align, Precise RoI Pooling cũng sử dụng nội suy tuyến tính để ánh xạ được RoI lên feature map. Tuy nhiên, trong quá trình pooling, thay vì tiếp tục sử dụng nội suy tuyến tính với số lượng điểm lân cận cố định được định nghĩa trước và khơng thích ứng được với nhiều kích thước khác nhau (Hình 5-2), Precise Roi Pooling sử dụng một đạo hàm bậc 2 với biến x và y để tính được giá trị pooling. Cơng thức được miêu tả dưới đây:

𝑃𝑟𝑃𝑜𝑜𝑙(𝑏𝑖𝑛, ℱ) = ∫ ∫ 𝑓(𝑥, 𝑦)𝑑𝑥𝑑𝑦 𝑥2 𝑥1 𝑦2 𝑦1 (𝑥2− 𝑥1) × (𝑦2− 𝑦1)

Việc sử dụng nguyên hàm thay vì các tham số cố định như của Roi Align sẽ giúp cho Precise Roi Pooling có thể thay đổi tốt với những RoI có kích thước khác nhau và trả về được một vector gradient liên tục cho tọa độ bounding box.

5.2. Đánh giá kết quả

Thực nghiệm cho thấy, với Precision Roi-Pooling, Faster R-CNN đã có kết quả cải thiện (Bảng 5-1, Bảng 5-2). Kết quả cải thiện này cùng với bộ dữ liệu UIT_MLReceipts được công bố trong bài báo UIT-MLReceipts: A multilingual benchmark for detecting key information in receipts (PHỤ LỤC A) được chấp nhận

87

đăng tại hội nghị khoa học 2022 IEEE 9th International Conference on Communications and Electronics (ICCE 2022).

mAP AP@50 AP@75

Faster R-CNN 57.5 86.2 72.5

Precise Faster R-CNN 58.8 87.0 74.8

Bảng 5-1: Bảng so sánh kết quả tổng quan tất cả các lớp giữa Faster R-CNN và Precision Faster R-CNN (%) (Kết quả tốt nhất được in đậm).

SELLER ADDRESS TIME STAMP

TOTAL _COST Faster R-CNN 59.1 63.0 53.4 54.8

Precise Faster R-CNN 60.4 65.4 53.5 56.0

Bảng 5-2: Bảng so sánh kết quả trên từng lớp đối tượng giữa Faster R-CNN và Precision Faster R-CNN (%) (Kết quả tốt nhất được in đậm).

CER WER Faster R-CNN 26.11 32.47 Precise Faster R-CNN 26.32 32.67

Bảng 5-3: Bảng so sánh kết quả cuối cùng của bài toàn (kết quả sau giai đoạn OCR bằng phương pháp TransformerOCR) giữa Faster R-CNN và Precision Faster R-

CNN (%) (Kết quả tốt nhất được in đậm).

Với Precision Faster R-CNN, kết quả nhận diện thông tin ở giai đoạn đầu đã được cải thiện, mAP tăng 1.3% và trên tất cả các lớp đối tượng đều nhận được kết quả cao hơn. Tuy nhiên, khi thực nghiệm phương pháp TransformerOCR trên kết quả thu được ở pha nhận diện thông tin lại thu kết quả thấp hơn (Bảng 5-3).

88

5.3. Tổng quan hệ thống ứng dụng Rút trích thơng tin hóa đơn 5.3.1 Giới thiệu 5.3.1 Giới thiệu

Receipts information extract app là ứng dụng cho phép người dùng chụp hoặc tải ảnh các hóa đơn từ điện thoại để rút trích thơng tin từ những hóa đơn này. Thơng tin được rút trích bao gồm: tên cửa hàng (seller), địa chỉ cửa hàng (address), thời gian mua hàng (timestamp) và tổng giá trị (total cost) của hóa đơn.

Cơng nghệ sử dụng:

− Client: Flutter (Dart)

− Server: Flask (Python)

89

5.3.2 Phân tích và thiết kế 5.3.2.1. Thiết kế use-case

90

5.3.2.2. Thiết kế user-flow

Hình 5-4: Sơ đồ tổng quan user-flow của ứng dụng

5.3.2.3. Thiết kế kiến trúc

91 5.3.2.4. Màn hình kết quả (a) (b) (c) (d) (e) (f)

Hình 5-6: Ảnh giao diện của ứng dụng. (a) Màn hình chính chứa thơng tin lịch sử; (b) Màn hình chụp ảnh; (c) Màn hình xác nhận ảnh để rút trích thơng tin; (d) Màn hình phóng lớn ảnh; (e) Màn hình thơng tin sau khi rút trích (có thơng tin thời gian rút trích); (f) Màn hình thơng tin hóa đơn đã rút trích (có thông tin ngày thực hiện).

92

5.3.2.5. Hướng dẫn cài đặt (a) Server

Chạy các lệnh sau ở server:

pip install Flask

pip install Flask-Cors

git clone https://github.com/open-mmlab/mmdetection

git checkout a7a16afbf2a4bdb4d023094da73d325cb864838b

pip install torch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2

cd mmdetection

pip install -r requirements.txt

pip install -v -e .

pip install mmcv-full -f

https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html

cd ..

git clone https://github.com/pbcquoc/vietocr

pip install einops

pip install gdown

gdown --id '1-lsthl2jfpJ04dIkbWttpb6obyJRQTqX'

gdown --id '1-qDt1-lz2Q0pwKQgoOOypZ8bZWGCPO1A'

93 mkdir history

Tải file demo.py (Link:

https://github.com/BaoChauTranLe/kltn_demo/blob/master/demo.py) lên server, sửa các thông tin về đường link của server (và port nếu cần) sau đó chạy bằng lệnh:

python demo.py

(b) Client

Clone project từ https://github.com/BaoChauTranLe/kltn_demo, thay đổi thông số url trong file kltn\lib\server_connection\server_connection.dart thành IP và port của server. Sau đó, run project.

94

Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

6.1. Kết luận

6.1.1 Kết quả đạt được

− Cái nhìn tổng quan về bài tốn phát hiện đối tượng, lịch sử phát triển của nó, cụ thể là phát hiện đối tượng trong ảnh hóa đơn.

− Xây dựng bộ dữ liệu 2,147 ảnh hóa đơn với mục đích nghiên cứu bài toán đang giải quyết.

− Thực nghiệm phương pháp Faster R-CNN, YOLOv3, YOLOF cho bước phát hiện đối tượng.

− Thực nghiệm phương pháp AttentionOCR, TransformerOCR cho bước nhận diện ký tự quang học.

− Đề xuất sử dụng Precise Roi Pooling[6] thay cho Roi Pooling giúp tăng kết quả ở giai đoạn phát hiện thông tin.

− Xây dựng ứng dụng minh họa rút trích thơng tin từ hóa đơn.

− Có 1 bài báo được chấp nhận đăng tại hội nghị 2022 IEEE 9th International Conference on Communications and Electronics (IEEE ICCE 2022).

6.1.2 Hạn chế

− Kết quả rút trích được dù đã có cải thiện nhưng vẫn cịn nhiều sai sót, cần nhiều cải thiện.

− Một số phương pháp chưa thể thực nghiệm được do hạn chế về mặt thiết bị.

6.2. Hướng phát triển

− Tiếp tục mở rộng bộ dữ liệu.

− Tìm hiểu và thực nghiệm các phương pháp mới để cải thiện kết quả rút trích thơng tin hóa đơn.

95

− Tìm hiểu các cách để cải thiện kết quả dựa trên các phương pháp cũ.

Một phần của tài liệu Đánh giá phương pháp rút trích thông tin hóa đơn tại việt nam (khóa luận tốt nghiệp) (Trang 70)