TỔNG QUAN
Giới thiệu chung
Trong thời đại số hóa, mọi hoạt động đều cần sự chính xác, nhanh chóng và tiện lợi, không chỉ với các tác vụ phức tạp mà còn với những công việc đơn giản như rút trích thông tin từ hóa đơn.
Bài toán rút trích thông tin hóa đơn nhằm tự động hóa các tác vụ văn phòng bằng cách lưu trữ thông tin quan trọng từ hóa đơn Thách thức lớn nhất là đạt được độ chính xác gần như tuyệt đối, vì một sai sót nhỏ có thể gây ra những hậu quả nghiêm trọng.
Động lực nghiên cứu
The field of information extraction is gaining significant attention among researchers, evidenced by various competitions such as the Robust Reading Challenge on Scanned Receipts OCR and Information Extraction (ICDAR 2019) and the MC-OCR Challenge for Vietnamese Receipts (RIVF 2021) These events have introduced diverse datasets, including the Scanned Receipts OCR and Information Extraction (SROIE), which have led to the development of numerous solutions like PICK, LayoutLM, and AIESI These advancements aim to enhance the accuracy, speed, and convenience of extracting information from invoices.
Rút trích thông tin từ hóa đơn sẽ được áp dụng trong các lĩnh vực kinh tế, tài chính và kế toán, cũng như trong các tác vụ văn phòng khác Việc này giúp tối ưu hóa quy trình làm việc và nâng cao hiệu quả quản lý thông tin.
Hệ thống tự động rút trích thông tin từ hóa đơn giúp giảm thiểu khối lượng công việc cho nhân viên kế toán và tài chính, từ đó nâng cao hiệu quả làm việc Đồng thời, công nghệ này cũng mở ra cơ hội phát triển các giải pháp nhận dạng thông tin có cấu trúc khác.
Phát biểu bài toán
Khóa luận này trình bày phương pháp rút trích thông tin từ hóa đơn, với đầu vào là ảnh chụp của hóa đơn và đầu ra là các thông tin quan trọng như tên cửa hàng, địa chỉ cửa hàng, thời gian bán và tổng tiền.
SASAWA SUSHI|||132/26 Nguyễn Tri Phương TP VT|||Ngày: 24/10/2020|||Tổng tiền: 333,000
Bảng 1-1: Tổng quan về đầu vào – đầu ra của bài toán
Phạm vi bài toán
Trong khóa luận này, chúng tôi nghiên cứu và thực nghiệm các phương pháp đã được công bố như Faster R-CNN, YOLOv3, YOLOF cho phát hiện thông tin, cùng với AttentionOCR và TransformerOCR cho nhận dạng ký tự quang học Mục tiêu là rút trích thông tin hóa đơn từ bộ dữ liệu MC-OCR và thu thập thêm dữ liệu để đa dạng hóa và cải thiện kết quả đạt được.
Thách thức bài toán
Các vấn đề môi trường như chất lượng giấy, máy in, mực in, ánh sáng và chất lượng ảnh có thể dẫn đến việc ảnh hóa đơn không rõ chữ và khó đọc Hóa đơn bị uốn cong, gập lại hoặc chụp từ nhiều góc độ khiến các dòng chữ bị biến dạng, gây khó khăn trong việc nhận dạng Để giải quyết những vấn đề này, cần áp dụng kỹ thuật tiền xử lý ảnh và trích đặc trưng phù hợp Hơn nữa, các bộ dữ liệu hiện tại, đặc biệt là hóa đơn tiếng Việt, vẫn còn hạn chế về kích thước, do đó cần tăng cường dữ liệu để cải thiện kết quả Sự đa dạng về bố cục, cách thể hiện từ ngữ, kiểu chữ và biến dạng ký tự trong tên cửa hàng cũng là những thách thức đáng kể trong quá trình nhận dạng thông tin.
Hình 1-1: Một số ví dụ về những thách thức của bài toán
Hiện nay, nhiều nghiên cứu đã áp dụng các mạng dựa trên kiến trúc CNN, Attention và các mạng tùy chỉnh để cải thiện độ chính xác Tuy nhiên, mức độ chính xác của mỗi mạng là khác nhau, đòi hỏi phải nghiên cứu và điều chỉnh kỹ lưỡng để đạt được kết quả tối ưu Do đó, cần tiến hành nghiên cứu sâu để tìm ra phương pháp hiệu quả nhất.
Đóng góp của khóa luận
− Tìm hiểu tổng quan về phương pháp Faster R-CNN và các kỹ thuật Deep Learning cho bài toán rút trích thông tin hóa đơn tiếng Việt
− Tìm hiểu dữ liệu hiện có để ứng dụng vào bài toán và thực hiện tăng cường dữ liệu
Bộ dữ liệu UIT-MLReceipts được xây dựng với sự đa dạng về kích cỡ và bố cục của các hóa đơn, bao gồm nhiều bối cảnh chụp khác nhau.
− Đề xuất được phương pháp cải tiến cho bài toán rút trích thông tin hóa đơn bằng cách sử dụng Precise Roi Pooling[6]
− Xây dựng được ứng dụng minh họa rút trích thông tin hóa đơn từ tiếng Việt
− Có một 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).
Cấu trúc khóa luận
Khóa luận này được trình bày trong 6 chương, nội dung chính được tóm tắt như dưới đây:
Chương 1 của khóa luận trình bày tổng quan về đề tài nghiên cứu, nêu rõ động lực và lý do thực hiện nghiên cứu Bên cạnh đó, chương này xác định bài toán nghiên cứu và phạm vi áp dụng, từ đó làm nổi bật những đóng góp chính mà khóa luận mang lại cho lĩnh vực nghiên cứu.
Chương 2 trình bày các cơ sở lý thuyết và nghiên cứu liên quan đến bài toán rút trích thông tin, đồng thời nêu rõ những xu hướng nghiên cứu mới trong lĩnh vực này Những nội dung này sẽ giúp làm rõ hơn về các phương pháp và kỹ thuật hiện có, cũng như định hướng cho các nghiên cứu tiếp theo trong khóa luận.
− Chương 3: Xây dựng dữ liệu bổ sung cho bài toán
− Chương 4: Trình bày kết quả thực nghiệm và đánh giá ưu điểm, hạn chế của phương pháp được chọn để khảo sát
− Chương 5: Nêu đề xuất cải tiến và đánh giá kết quả cải tiến
− Chương 6: Nêu kết luận, định hướng nghiên cứu trong tương lai.
CƠ SỞ LÝ THUYẾT VÀ CÁC NGHIÊN CỨU LIÊN QUAN
Một số cơ sở lý thuyết
Mạng nơ-ron (Neural Network) được sử dụng để rút trích đặc trưng từ dữ liệu đầu vào, giúp các nhà nghiên cứu phân tích thông tin và phát triển giải pháp cho nhiều vấn đề khác nhau Kiến trúc của mạng nơ-ron bao gồm ba nhóm chính: lớp đầu vào, các lớp ẩn và lớp đầu ra Mỗi lớp chứa một hoặc nhiều nút (node), nơi diễn ra các tác vụ chính Các nút giữa hai lớp liền kề được kết nối, cho phép dữ liệu đầu ra của lớp này trở thành đầu vào cho lớp tiếp theo, từ đó dữ liệu được xử lý cho đến khi đạt được kết quả mong muốn ở lớp cuối cùng.
Mạng nơ-ron tích chập (CNN) sử dụng nguyên lý phản hồi và lan truyền ngược để tối ưu hóa bộ trọng số và bias trong quá trình huấn luyện mô hình Điểm nổi bật của CNN là việc áp dụng phép tính convolution vào các lớp trong Neural Network, giúp giảm số lượng tham số đầu vào mà vẫn duy trì hiệu quả học tập và độ chính xác cao cho mô hình.
Trong kiến trúc mạng nơ-ron tích chập (CNN), cấu trúc cơ bản bao gồm nhiều lớp khác nhau, mỗi lớp được thiết kế để thực hiện các chức năng riêng biệt, chẳng hạn như Lớp Kết Nối Đầy Đủ (Fully Connected Layer), Lớp Tích Chập (Convolutional Layer), Lớp Gộp (Pooling Layer) và Lớp Gộp Tối Đa (Max Pooling Layer).
Lớp tích chập (Convolutional Layer) là lớp đầu tiên trong mạng nơ-ron tích chập, có nhiệm vụ trích xuất đặc trưng từ hình ảnh đầu vào thông qua phép tính tích chập Lớp này không chỉ thực hiện các phép toán trên dữ liệu mà còn truyền đạt thông tin đến lớp tiếp theo Trước khi bắt đầu quá trình huấn luyện, cần thiết lập ba siêu tham số quan trọng ảnh hưởng đến kích thước đầu ra của lớp tích chập.
− Số lượng của Filter/Kernel: ảnh hưởng đến độ sâu (depth) của đầu ra
− Stride: Biểu thị số bước nhảy mà bộ lọc dịch chuyển, dùng để giảm kích thước đầu ra
Zero-padding là kỹ thuật được sử dụng để giữ cho kích thước dữ liệu tương thích với các bộ lọc trong kiến trúc mạng, thông qua việc thêm giá trị 0 vào viền ảnh của dữ liệu đầu vào Có ba loại padding phổ biến: Valid padding, Same padding và Full padding.
Hình 2-1: Ảnh mô tả hướng di chuyển của kernel (k = 3) trên ảnh màu 1
Pooling Layer được sử dụng giữa các Convolutional Layer để giảm kích thước dữ liệu mà vẫn duy trì các đặc điểm quan trọng Việc giảm kích thước dữ liệu giúp giảm khối lượng tính toán trong mô hình.
Khi dùng Pooling Layer với size = (2 × 2), stride = 2 padding = 0 thì output with và height của dữ liệu sẽ giảm đi một nửa, depth thì được giữ nguyên
1 https://rstudio-conf-2020.github.io/dl-keras-tf/04-computer-vision-cnns.html#23
Hình 2-2 Biến thể Pooling Layer 1
Có nhiều biến thể của Pooling Layer, phổ biến là Max Pooling, Average Pooling (Hình 2-2) …
Fully Connected Layer thường được đặt ở các lớp cuối cùng trong kiến trúc CNN để tổng hợp đầu ra và tạo ra output cho mô hình Nó có thể được sử dụng để phân loại các lớp đối tượng khi kết hợp với các hàm kích hoạt như softmax hoặc sigmoid.
Mạng tích chập đầy đủ (Fully Convolutional Network) là một kiến trúc mạng linh hoạt, cho phép xử lý dữ liệu đầu vào với kích thước tùy ý và tạo ra đầu ra tương ứng Kiến trúc này kế thừa từ các mạng phân lớp nổi bật như VGGNet, AlexNet, GoogleLeNet và ResNet, nhằm giải quyết các vấn đề phức tạp trong lĩnh vực học sâu Mạng tích chập đầy đủ có khả năng điều chỉnh ba thông số quan trọng: chiều cao (h), chiều rộng (w) và chiều sâu (d) của tất cả các lớp mạng.
1 https://poojamahajan5131.medium.com/max-pooling-210fc94c4f11
Mạng nơ-ron hồi quy (RNN) là loại mạng nơ-ron có cấu trúc với vòng lặp bên trong, cho phép xử lý các đầu vào dạng chuỗi có mối liên hệ, như câu văn hay video Cấu trúc này giúp RNN hiểu và phân tích thông tin theo thứ tự, mang lại hiệu quả cao trong việc xử lý dữ liệu tuần tự.
Hình 2-3: Ảnh diễn giải đơn giản cấu trúc vòng lặp của RNN 1
Mạng nơ-ron hồi tiếp (RNN) hoạt động bằng cách nhận đầu vào từ một đối tượng trong chuỗi và đầu ra từ thời điểm trước đó để dự đoán đầu ra hiện tại Đặc điểm nổi bật của RNN là khả năng xử lý thông tin dựa trên các output trước, điều này làm cho nó rất phù hợp cho các tác vụ trong lĩnh vực xử lý ngôn ngữ tự nhiên, nơi mà các chuỗi có sự liên quan về mặt ngữ nghĩa.
1 https://pydeeplearning.weebly.com/blog/basic-architecture-of-rnn-and-lstm
Hình 2-4: Ảnh minh họa luồng hoạt động bên trong 1 nơ-ron của mạng RNN 1
Các công trình nghiên cứu liên quan
Hình 2-5: Mốc thời gian cho sự ra đời các phương phát hiện đối tượng (1990 –
1 http://colah.github.io/posts/2015-08-Understanding-LSTMs/
R-CNN[4] ra đời với ý tưởng khá đơn giản: Dùng thuật toán Selective Search để lấy ra khoảng 2,000 Bounding-box trong đầu vào mà có khả năng chứa đối tượng Sau đó, với mỗi Bounding-box ta xác định xem nó là đối tượng nào
(i) Selective search algorithm Đầu vào là 1 ảnh màu Đầu ra là khoảng 2,000 Bounding-box trong đầu vào mà có khả năng chứa đối tượng
(ii) Phân loại region proposal
After conducting Selective Search, the region proposals are resized to a uniform dimension and undergo transfer learning with a feature extractor The extracted features are then input into an SVM algorithm for image classification.
Hình 2-6: Kiến trúc R-CNN (Ảnh cắt từ bài báo)
Với mỗi ảnh cần phải phân loại class cho khoảng 2,000 region proposal nên mất khá nhiều thời gian
Similar to R-CNN, Fast R-CNN utilizes Selective Search to generate region proposals However, unlike R-CNN, it does not separate the 2,000 region proposals from the image to perform image classification individually Instead, Fast R-CNN processes the entire image at once.
ConvNet (một vài convolutional layer + max pooling layer) để tạo ra convolutional feature map
Due to the varying sizes of region proposals, flattening them results in vectors of different dimensions, making it incompatible with neural networks Additionally, feature maps cannot be resized, which necessitates the development of Region of Interest (RoI) pooling to standardize the dimensions of region proposals within the feature map.
Hình 2-7: Kiến trúc Fast R-CNN (Ảnh cắt từ bài báo)
Thời gian tính region proposal vẫn còn tiêu tốn nhiều thời gian
(c) Faster R-CNN Để khắc phục hạn chế về thời gian tính region proposal của R-CNN và Fast R-CNN, Faster R-CNN[19] ra đời gồm 3 phần:
Fast R-CNN processes images through convolutional layers to generate a feature map, which is then utilized by the Region Proposal Network to identify region proposals Once the region proposals are obtained, the approach follows a similar process to that of Fast R-CNN for further analysis.
Hình 2-8: Kiến trúc Faster R-CNN 12
A sliding window network operates on an 𝑛 × 𝑛 sliding window over a convolutional feature map At each window position, multiple region proposals are generated, which are subsequently filtered based on an "objectness score." The input to this process is the feature map, while the output consists of the region proposals.
Hình 2-9: Kiến trúc Region Proposal Network (RPN) 3
1 https://towardsdatascience.com/faster-rcnn-object-detection-f865e5ed7fc4
2 https://www.researchgate.net/figure/Faster-R-CNN-basic-architecture_fig1_336602731
3 https://www.researchgate.net/figure/Anchor-in-RPN-networks_fig4_342860228
Vì region proposals là hình chữ nhật và có thể ra ngoài bức ảnh nên cần kỹ thuật để biểu diễn region proposal => Anchor ra đời
Tại mỗi vị trí của cửa sổ trượt, chúng ta có thể dự đoán nhiều vùng đề xuất, với số lượng tối đa vùng đề xuất tại mỗi vị trí được ký hiệu là 𝑘 Giá trị 𝑘 được tính dựa trên tỷ lệ kích thước và tỷ lệ khung hình.
Tại thời điểm train, tất cả các anchor vượt quá biên sẽ bị bỏ qua để không bị tính vào loss
Các anchor sẽ được gán là positive hoặc negative dựa vào diện tích overlap với ground truth box theo luật như sau:
Hình 2-10: IoU (Intersection over Union) 1
− Các anchor được phân loại là positive nếu:
+ Là anchor có IoU (Intersection over Union) lớn nhất đối với một ground-truth box
+ Là anchor có tỉ lệ IoU đối với ground-truth bất kỳ lớn hơn 0.7
− Các anchor được phân loại là negative nếu có IoU bé hơn 0.3 đối với ground-truth box
1 https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
− Các anchor không thuộc 2 loại trên sẽ được loại bỏ
Khác với Faster R-CNN, một phương pháp two-stage detector, YOLOv3 là một one-stage detector, trong đó việc xác định vị trí và phân loại đối tượng được thực hiện đồng thời Là phiên bản cải tiến của YOLOv1 và YOLOv2, YOLOv3 nhanh chóng trở nên phổ biến nhờ khả năng dự đoán real-time với độ chính xác cao.
Các phương pháp trong họ YOLO hoạt động bằng cách chia bức ảnh thành các ô lưới, trong đó mỗi ô sẽ dự đoán các bounding box với tâm nằm trong ô đó.
Bên cạnh đó, để khắc phục những khuyết điểm còn tồn tại ở YOLOv2, YOLOv3 có những điểm mới so với YOLOv1 như:
− Sử dụng Darknet53 với số lượng lớp chập nhiều hơn nên tốc độ chậm hơn YOLOv2
− Có thêm các khối Residual: Các khối này giúp làm giảm vấn đề mất thông tin ngữ cảnh do số lượng lớp chập lớn của YOLOv3
− Dự đoán đối tượng ở 3 tầng kích thước của feature map để tận dụng thông tin ngữ cảnh và thông tin đặc trưng
− Do dự đoán đối tượng ở 3 tầng kích thước khác nhau, nên thay vì chọn
5 anchor box cho mỗi ô lưới như YOLOv2, YOLOv3 chọn 3 anchor box cho mỗi ô lưới ở mỗi tầng kích thước, nghĩa là có tổng cộng 9
37 anchor box được chọn bằng phương pháp K-mean tương tự như YOLOv2
− Số lượng class lớn hơn, cho phép 1 đối tượng có nhiều nhãn (ví dụ 1 đối tượng có thể vừa mang nhãn ‘Person’ vừa mang nhãn ‘Woman’)
Hình 2-11: Ảnh minh họa kiến trúc mạng YOLOv3 1
YOLOv3 nhận ảnh đầu vào có kích thước 416 × 416 sử dụng backbone Darknet-53 (bỏ đi 3 lớp cuối) để rút trích đặc trưng vật thể, sau đó ảnh được đưa qua
YOLOv3 sử dụng 53 lớp convolution, bao gồm một số lớp upsampling để tăng kích thước ảnh, giúp dự đoán các đối tượng có kích thước nhỏ hơn Cụ thể, mô hình này thực hiện dự đoán cho các đối tượng ở ba kích thước ảnh khác nhau.
Ở lớp chập thứ 82 (bao gồm các lớp chập backbone), kích thước 13 × 13 được sử dụng để dự đoán các đối tượng lớn Tại lớp này, hình ảnh được chia thành 13 × 13 ô lưới, với mỗi ô lưới dự đoán 3 bounding box.
1 https://towardsdatascience.com/yolo-v3-object-detection-53fb7d3bfe6b
38 số bounding box được dự đoán ở lớp này là 13 × 13 × 3 = 507 bounding box
Tại lớp chập thứ 94, kích thước 26 × 26 được sử dụng để dự đoán các đối tượng có kích thước trung bình Ảnh được chia thành 26 × 26 ô lưới, với mỗi ô lưới dự đoán 3 bounding box, dẫn đến tổng số bounding box được dự đoán là 2,028 (26 × 26 × 3).
Tại lớp chập thứ 106, kích thước 52 × 52 được sử dụng để dự đoán các đối tượng nhỏ Ảnh được chia thành 52 × 52 ô lưới, với mỗi ô lưới dự đoán 3 bounding box Tổng số bounding box được dự đoán ở lớp này là 8,112, tính bằng 52 × 52 × 3.
YOLOv3 đã dự đoán tổng cộng 10,647 bounding box qua 3 lần dự đoán, gấp hơn 10 lần so với YOLOv2 Số lượng bounding box này cho phép YOLOv3 xử lý hiệu quả các hình ảnh có nhiều đối tượng.
Trong các phương pháp dự đoán của YOLO, khi một đối tượng nằm trên nhiều ô lưới, nó có thể bị phát hiện nhiều lần, dẫn đến việc xuất hiện nhiều bounding box chồng chéo Để khắc phục tình trạng này, nhóm tác giả đã áp dụng thuật toán NMS.
XÂY DỰNG DỮ LIỆU
Một số bộ dữ liệu hóa đơn hiện có
3.1.1 Bộ dữ liệu Scanned Receipts OCR and Information Extraction (SROIE)
The SROIE dataset, released in 2019, was designed for the ICDAR 2019 Robust Reading Challenge, focusing on OCR and information extraction from scanned receipts The challenge consists of three distinct tasks aimed at accurately reading and extracting information from scanned images of receipts.
− Task 1: Scanned Receipt Text Localisation: Xác định vị trí chữ trong hóa đơn
− Task 2: Scanned Receipt OCR: Nhận dạng các từ có trong hóa đơn
− Task 3: Key Information: Rút trích 4 thông tin từ hóa đơn bao gồm: Tên công ty, địa chỉ, ngày, tổng tiền hóa đơn
SROIE gồm 1,000 ảnh scan của các hóa đơn trong đó có khoảng 600 ảnh train và 400 ảnh test, các ảnh train và test này đều được gán nhãn đầy đủ
3.1.1.2 Định dạng file annotation Đối với annotation cho Task 1 và Task 2, file txt có nội dung được cấu trúc như sau: x1_1, y1_1, x2_1, y2_1, x3_1, y3_1, x4_1, y4_1, transcript_1 x1_2, y1_2, x2_2, y2_2, x3_2, y3_2, x4_2, y4_2, transcript_2
Mỗi dòng trong file txt đại diện cho chú thích cho một nhóm ký tự hoặc một cụm ký tự trên hóa đơn tương ứng Thông tin này giúp xác định rõ ràng các thành phần trong hóa đơn.
51 annotation trên mỗi dòng bao gồm 𝑥 1 , 𝑦 1 , 𝑥 2 , 𝑦 2 , 𝑥 3 , 𝑦 3 , 𝑥 4 , 𝑦 4 là tọa độ 4 góc của bounding box và 𝑡𝑒𝑥𝑡 là các ký tự bên trong bounding box
Hình 3-1: Ảnh minh họa cấu trúc một file txt trong thư mục
0325updated.task1train(626p) Đối với Task 3, file txt có nội dung được cấu trúc như sau:
Trong đó, mỗi text là thông tin từ ảnh hóa đơn tương ứng với các nhãn
Hình 3-2: Ảnh minh họa cấu trúc một file txt trong thư mục
3.1.2 Bộ dữ liệu Consolidated Receipt Dataset (CORD)
CORD là một bộ dữ liệu ra đời vào năm 2019, được phát triển bởi nhóm tác giả nhằm khắc phục những thiếu sót của SROIE trong các nhiệm vụ OCR và rút trích thông tin Mặc dù SROIE có thể hỗ trợ nghiên cứu, nhưng nó còn hạn chế về khối lượng dữ liệu và thiếu bounding box cho từng từ, điều này gây khó khăn trong việc đào tạo mô hình hiệu suất cao Với mục tiêu tạo ra một bộ dữ liệu lớn hơn và đầy đủ hơn, nhóm tác giả đã công bố CORD trong bài báo "CORD: A Consolidated Receipt Dataset for Post-OCR Parsing".
Bộ dữ liệu này dự kiến sẽ bao gồm 11,000 ảnh hóa đơn tại Indonesia, trong đó nhóm tác giả đã công bố 1,000 ảnh mẫu Các ảnh này đã được làm mờ thông tin nhạy cảm như họ tên và số điện thoại, đồng thời được gán nhãn chi tiết với 5 superclass và 42 subclass Ngoài ra, bộ dữ liệu còn bao gồm các thông tin chung về ảnh như vùng quan tâm (ROI) và kích thước ảnh.
CORD được chia thành 3 phần, gồm train, dev, test, với 1,000 ảnh đã được công bố, nhóm tác giả chia thành 800 ảnh train, 100 ảnh dev và 100 ảnh test
File annotation của bộ dữ liệu CORD được cấu trúc dưới dạng json và được mô tả chi tiết qua bảng sau:
Thuộc tính "valid_line" cung cấp thông tin về một dòng trong hóa đơn, trong khi "word" chứa thông tin về các từ trong hóa đơn "Quad" mô tả 4 tọa độ bounding box của từ, và "is_key" xác định xem từ đó có thể được sử dụng làm từ khóa hay không "Row_id" là ID của dòng trong hóa đơn, "text" là bản sao của từ, "category" là nhãn của dòng, và "group_id" là ID nhóm của dòng.
- - - - meta Thông tin chung của ảnh version Phiên bản của bộ dữ liệu image_id Id của ảnh split ‘train’, ‘dev’ hay ‘test’
54 image_size Thông tin kích thước ảnh - - - - roi Thông tin 4 tọa độ bounding box của hóa đơn
- - - - repeating_symbol Thông tin những ký tự đặc biệt trong hóa đơn quad Thông tin 4 tọa độ bounding box của ký tự text Transcript của ký tự
Bảng 3-1: Bảng mô tả ý nghĩa các thuộc tính trong annotation của bộ dữ liệu CORD
3.1.3 Bộ dữ liệu cuộc thi Mobile-Captured Image Document Recognition for Vietnamese Receipts (RIVF2021 MC-OCR)
Năm công bố: 2021 Đơn vị công bố: VNDAG
Bộ dữ liệu bao gồm 3 phần tương ứng với 3 giai đoạn của cuộc thi:
− Warm-up: 403 ảnh train và 101 ảnh test
− Public test: 1,155 ảnh train và 391 ảnh test
Trong bài viết này, các ảnh train đã được chú thích đầy đủ, trong khi các ảnh test lại không có Mỗi bức ảnh chứa thông tin quan trọng như người bán, địa chỉ cửa hàng, thời gian bán và tổng chi phí, với các thông tin này được xác định tọa độ và phân loại thành các nhóm: SELLER, ADDRESS, TIMESTAMP và TOTAL_COST, kèm theo bản ghi nội dung thông tin.
File annotation của bộ dữ liệu này được lưu dưới dạng file csv, với 6 cột dữ liệu bao gồm:
Anno_polygons cung cấp thông tin chi tiết về các bounding box, với cấu trúc mẫu được điều chỉnh để dễ theo dõi Dữ liệu thực tế được trình bày trên một dòng liên tục, giúp người dùng dễ dàng nắm bắt và sử dụng thông tin.
− anno_texts: Transcript của các bounding box Có dạng: transcript1|||transcript2|||…|||transcriptN (tương ứng với thứ tự bounding box trong anno_polygons)
The anno_labels represent the labels of bounding boxes, formatted as category_name1|||category_name2|||…|||category_nameN This format corresponds to the order of bounding boxes in anno_polygons and is organized according to the sequence of category_id.
− anno_num: Số lượng bounding box
− anno_image_quality: Chất lượng ảnh (được tính bằng phương pháp RMSE).
Thu thập dữ liệu
Hóa đơn sẽ được thu thập từ nhiều nguồn khác nhau như cửa hàng, quán ăn, siêu thị, và được chụp hoặc quét lại bằng điện thoại từ nhiều góc độ và ngữ cảnh khác nhau Bên cạnh đó, còn có một số hình ảnh hóa đơn được lấy từ các trang mạng xã hội.
Dữ liệu thu thập được sẽ được làm sạch bằng cách:
− Loại bỏ các ảnh quá mờ, không thể nhìn rõ chữ
− Loại bỏ các ảnh chứa ít hơn 2 lớp đối tượng cần trích xuất.
Gán nhãn dữ liệu
3.3.1 Quy trình gán nhãn dữ liệu Ở bước gán nhãn dữ liệu, chúng tôi sử dụng model Faster R-CNN đã được train qua bộ dữ liệu của cuộc thi MC-OCR để dự đoán bounding-box của các thông tin cần được trích xuất (tên cửa hàng, địa chỉ cửa hàng, thời gian in hóa đơn, tổng tiền) Sau đó, chúng tôi tiến hành sửa tay các bounding-box này để bộ dữ liệu được
Sau khi điều chỉnh các bounding box, chúng tôi tiến hành gán nhãn transcript cho các bounding box đó Do đó, annotation của bộ dữ liệu được xây dựng theo định dạng COCO và được điều chỉnh một chút để phù hợp với yêu cầu của bài toán.
A new dataset has been developed based on the Mobile-Captured Image Document Recognition competition for Vietnamese receipts, incorporating specific labeling rules.
Mỗi đối tượng trong dữ liệu chỉ bao gồm một dòng duy nhất; nếu thông tin bị xuống hàng, chúng sẽ được phân loại thành một đối tượng khác Ngoài ra, nếu các từ cách nhau quá xa, chúng cũng sẽ được gán thành hai đối tượng riêng biệt.
− ADDRESS: địa chỉ (tên tòa nhà, số nhà, tên đường, …) của cửa hàng, hoặc tên chi nhánh có chứa cấu trúc số nhà + tên đường
− SELLER: tên của cửa hàng, hoặc tên chi nhánh không có số nhà, tên công ty nếu được in đậm hoặc chứa tên cửa hàng
− TIMESTAMP: thời gian in hóa đơn, hoặc thời gian ra nếu không có thời gian in hóa đơn và từ khóa tương ứng
− TOTAL_COST: tổng tiền khách phải trả cho hóa đơn (sau khi giảm giá/ chiết khấu) và từ khóa tương ứng
3.3.2 Định dạng nhãn của bộ dữ liệu
In the COCO format, all annotation information for images is stored in a single json file, structured into five sections: info, licenses, images, annotations, and categories While the info and licenses sections are optional, the images, annotations, and categories sections are mandatory Below, we provide detailed descriptions of each section in our dataset.
3.3.2.1 info info là phần thông tin tổng quan của bộ dữ liệu, chúng tôi sử dụng cấu trúc như sau 1 :
"description": "Exported from roboflow.ai",
"url": "https://app.roboflow.ai/datasets/train_17_02/4",
Thuộc tính Kiểu dữ liệu 2 Ý nghĩa
< description > str Mô tả của bộ dữ liệu
< url > str Đường dẫn của bộ dữ liệu
< version > str Phiên bản của bộ dữ liệu
< year > int Năm công bố bộ dữ liệu
< contributor > str Người đóng góp bộ dữ liệu
< date_created > datetime Ngày công bố bộ dữ liệu
Bảng 3-2: Mô tả ý nghĩa các thuộc tính trong phần “info”
1 https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/cd-coco-overview.html
2 https://cocodataset.org/#format-data
3.3.2.2 licenses licenses là danh sách giấy phép cho các hình ảnh trong bộ dữ liệu, mỗi giấy phép có 1 ID riêng biệt
Thuộc tính Kiểu dữ liệu Ý nghĩa
< url > str Đường dẫn của giấy phép
< id > int ID của giấy phép để dùng trong bộ dữ liệu
< name > str Tên giấy phép
Bảng 3-3: Mô tả ý nghĩa các thuộc tính trong phần “licenses”
3.3.2.3 images images là danh sách các ảnh có trong bộ dữ liệu, mỗi ảnh có 1 ID riêng biệt
Thuộc tính Kiểu dữ liệu Ý nghĩa
< id > int ID của ảnh trong bộ dữ liệu
< width > int Chiều rộng của ảnh
< height > int Chiều cao của ảnh
< file_name > str Tên ảnh
Bảng 3-4: Mô tả ý nghĩa các thuộc tính trong phần “images”
3.3.2.4 annotations annotations là danh sách thông tin của tất cả các đối tượng trên tất cả các ảnh của bộ dữ liệu
"text": "KACHA TEA & Fast food" },
"text": "KACHA TEA & Fast food" }
Thuộc tính Kiểu dữ liệu Ý nghĩa
< id > int (không bắt buộc) ID của đối tượng
< category_id > int (bắt buộc) ID lớp của đối tượng
< iscrowd > 0 hoặc 1 (không bắt buộc)
0: Bounding-box chứa 1 đối tượng
1: Bounding-box chứa nhiều đối tượng
< segmentation > RLE hoặc [polygon] (không bắt buộc)
[polygon]: phân vùng của Bounding-box chứa 1 đối tượng
RLE: phân vùng của Bounding-box chứa nhiều đối tượng
< image_id > int (không bắt buộc) ID ảnh chứa đối tượng
< area > float (không bắt buộc) Diện tích phân vùng của đối tượng
< bbox > [x, y, width, height] (bắt buộc) Thông tin về tọa độ và kích thước của
Bounding-box của đối tượng:
− x, y: tọa độ trên trái của Bounding-box
− width: chiều rộng của Bounding-box
− height: chiều cao của Bounding-box
Điểm mới so với định dạng COCO là thuộc tính này thể hiện thông tin transcript bên trong bounding box, nhằm phù hợp với bài toán của nhóm Bảng 3-5 mô tả ý nghĩa các thuộc tính trong phần “annotations”.
3.3.2.5 categories categories là danh sách các lớp đối tượng trong bộ dữ liệu
Thuộc tính Kiểu dữ liệu Ý nghĩa
< id > int (bắt buộc) ID của lớp đối tượng
< supercategory > str (không bắt buộc) Tên lớp đối tượng cha của lớp đối tượng
< name > str (bắt buộc) Tên của lớp đối tượng
Bảng 3-6: Mô tả ý nghĩa các thuộc tính trong phần “categories”.
Mô tả bộ dữ liệu
Bộ dữ liệu bổ sung bao gồm 2,147 ảnh hóa đơn từ nhiều siêu thị, quán ăn và cửa hàng, được phân chia thành 1,000 ảnh cho mục đích huấn luyện (46.58%), 358 ảnh cho xác thực (16.67%) và 789 ảnh cho kiểm tra (36.75%).
Các ảnh trong bộ dữ liệu đã được gán nhãn bounding-box đầy đủ Các nhãn trong bộ dữ liệu được phân bổ như Bảng 3-7
Bảng 3-7: Bảng phân bổ các nhãn của bộ dữ liệu
Quá trình gán nhãn bounding-box cho bộ dữ liệu gặp khó khăn do số lượng ảnh lớn và nhân lực hạn chế, dẫn đến việc phải rà soát nhiều lần nhưng vẫn không thể tránh khỏi sai sót.
THỰC NGHIỆM VÀ ĐÁNH GIÁ
Mô tả thực nghiệm
Quá trình thực nghiệm dự kiến gồm 2 bước:
− Nhận dạng vị trí và phân loại thông tin cần trích xuất (Faster R-CNN, YOLOv3, YOLOF)
Hình 4-1: Ảnh minh họa bước đầu trong quá trình thực nghiệm
− Ánh xạ các thông tin cần trích xuất trong ảnh thành văn bản (TransformerOCR, AttentionOCR)
Hình 4-2 Ảnh minh họa bước thứ hai trong quá trình thực nghiệm
Phương pháp đánh giá
Ma trận nhầm lẫn là công cụ hữu ích để đánh giá hiệu quả của thuật toán phân loại có giám sát Nó phân chia kết quả thành hai loại: nhãn dự đoán và nhãn thực tế của các điểm dữ liệu, giúp người dùng hiểu rõ hơn về hiệu suất của mô hình.
Hình 4-3: Confusion Matrix 1 Trong đó:
− True Positive (TP): trường hợp dương tính và được dự đoán dương tính
− True Negative (TN): trường hợp âm tính và được dự đoán âm tính
− False Positive (FP): trường hợp âm tính và được dự đoán dương tính
− False Negative (FN): trường hợp dương tính và được dự đoán âm tính
1 https://towardsdatascience.com/the-confusion-matrix-unveiled-2d030136be40
Precision được định nghĩa là tỉ lệ số điểm True Positive trong tổng số những điểm được phân loại là Positive (TP + FP)
TP + FN Recall được định nghĩa là tỉ lệ số điểm True Positive trong số những điểm thật sự là Positive (TP +FN)
Intersection over Union (IoU) là tiêu chuẩn quan trọng trong việc đánh giá hiệu quả của các thuật toán phát hiện đối tượng trong hình ảnh, thông qua việc đo lường mức độ trùng lắp giữa hai bounding boxes Một kết quả IoU được coi là tốt khi đạt giá trị lớn hơn hoặc bằng 0,5.
Giả sử có N ngưỡng để tính toán precision và recall, mỗi ngưỡng tương ứng với một cặp giá trị (𝑃𝑛, 𝑅𝑛) với n = 1, 2, , N Để vẽ đường cong Precision-Recall, ta sẽ đánh dấu từng điểm có tọa độ (𝑃𝑛, 𝑅𝑛) trên trục tọa độ và sau đó nối các điểm này lại với nhau.
Đồ thị mối quan hệ giữa precision và recall, được gọi là đường cong Precision-Recall, thể hiện mối liên hệ giữa hai chỉ số này Average precision (AP) được định nghĩa là diện tích dưới đường biểu diễn mối quan hệ giữa precision và recall, và thường được tính xấp xỉ bằng một công thức cụ thể.
Trong đó: (𝑅 𝑛 − 𝑅 𝑛 − 1 )𝑃 𝑛 là diện tính hình chữ nhật có chiều rộng (𝑅 𝑛 −
Mean Average Precision được tính bằng cách lấy trung bình AP của tất cả các lớp
Levenshtein là khoảng cách khác biệt giữa 2 chuỗi ký tự, khoảng cách này được đặt tên theo Vladimir Levenshtein – người đề ra khái niệm này vào năm 1965
1 https://dothanhblog.wordpress.com/2020/04/24/map-mean-average-precision/
Khoảng cách Levenshtein giữa chuỗi S và chuỗi T là số bước ít nhất biến chuỗi S thành chuỗi T thông qua 3 phép biến đổi:
− Xoá 1 ký tự: “steam” → “team”
− Thêm 1 ký tự: “steam” → “stream”
− Thay ký tự này bằng ký tự khác: “steam” → “steal”
Hình 4-5: Ảnh minh họa 3 phép biến đổi thêm, sửa, xóa 1
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ế)
In the Mobile-Captured Image Document Recognition for Vietnamese Receipts (MC-OCR) competition, the Character Error Rate (CER) is utilized to assess the submissions made by participants.
1 https://towardsdatascience.com/evaluating-ocr-output-quality-with-character-error-rate-cer-and-word-error- rate-wer-853175297510
CER được xây dựng dựa trên khoảng cách Levenshtein với công thức như sau:
− 𝑖 + 𝑠 + 𝑑 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ế
CER thường được áp dụng để đánh giá các tác vụ yêu cầu độ chính xác cao ở từng ký tự, chẳng hạn như trong việc nhận diện số điện thoại và số chứng minh thư.
Ngoài CER, WER (Tỷ lệ lỗi từ) cũng là một chỉ số quan trọng để đánh giá hiệu quả của các tác vụ nhận dạng ký tự quang học Tuy nhiên, WER thường được sử dụng cho những nhiệm vụ liên quan đến nhận dạng đoạn văn hoặc câu văn từ các từ có nghĩa.
− 𝑖 𝑤 + 𝑠 𝑤 + 𝑑 𝑤 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ế.
Quy trình thực nghiệm và đánh giá
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
− Tạo 3 file annotation: train.json, val.json, test.json định dạng COCO
− Link reference: https://github.com/open-mmlab/mmdetection
+ 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
− Chạy huấn luyện bằng command:
− Chạy huấn luyện bằng command:
− Chạy huấn luyện bằng command:
!python tools/train.py config_faster_rcnn.py
!python tools/train.py config_yolov3.py
!python tools/train.py config_yolof.py
Chúng tôi đã thực hiện huấn luyện các mô hình TransformerOCR và AttentionOCR dựa trên hướng dẫn từ tác giả VietOCR Để bắt đầu, chúng tôi chuẩn bị dữ liệu phù hợp với yêu cầu của mô hình để đảm bảo quá trình huấn luyện diễn ra hiệu quả.
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 model 1 )
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 model 2 )
Dựa trên yêu cầu của mô hình, chúng tôi đã cắt các bounding box từ bộ ảnh train và val thành các ảnh riêng lẻ, mỗi ảnh chỉ chứa một dòng ký tự của hóa đơn Sau đó, chúng tôi thực hiện 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, ảnh sẽ được xoay 90° theo chiều kim đồng hồ Cuối cùng, chúng tôi tạo file nhãn dựa trên nhãn của bộ dữ liệu mới.
1 https://pbcquoc.github.io/vietocr/
2 https://pbcquoc.github.io/vietocr/
Dựa trên bộ dữ liệu ban đầu, chúng tôi đã tạo ra 6,115 ảnh để huấn luyện và 2,190 ảnh để kiểm tra cho model TransformerOCR và AttentionOCR Chúng tôi đã sử dụng mã nguồn do tác giả cung cấp để tiến hành huấn luyện cả hai model này.
− Tính giá trị mAP của toà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:
− Tính giá trị mAP của toà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
− Tính giá trị mAP của toà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:
Chúng tôi sử dụng kết quả bounding box được dự đoán trên tập test ở giai đoạn
Để sử dụng làm đầu vào cho mô hình TransformerOCR và AttentionOCR đã được huấn luyện, các bounding box sẽ được cắt ra từ ảnh và xoay 90º theo chiều kim đồng hồ nếu chiều cao lớn hơn chiều rộng Sau khi có kết quả dự đoán từ hai mô hình, chúng tôi sẽ tiến hành so sánh và đánh giá kết quả bằng các chỉ số CER và WER.
4.3.5.1 Kết quả thực nghiệm mAP
AP SELLER ADDRESS TIMESTAMP TOTAL_COST
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
! python tools/test.py config_yolof.py /work_dirs/ config_yolof/latest.pth show-dir result_yolof
Bảng 4-2 trình bày 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 trong giai đoạn sau của bài toán, với 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
− Trường hợp dự đoán tốt
Hình 4-8 Ảnh minh họa trường hợp dự đoán tốt khi thực nghiệm bằng phương pháp Faster R-CNN
− Trường hợp dự đoán không tốt
Hình 4-9: Ảnh minh họa trường hợp dự đoán không tốt bằng phương pháp Faster R-
Hình 4-10: Ảnh minh họa trường hợp dự đoán không tốt bằng phương pháp Faster
− Trường hợp dự đoán tốt
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
− Trường hợp dự đoán không tốt
Hình 4-12: Ảnh minh họa trường hợp dự đoán không tốt bằng phương pháp
− Trường hợp dự đoán tốt
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ự đoán không tốt
Hình 4-14: Ảnh minh họa trường hợp dự đoán không tốt bằng phương pháp
Hình 4-15: Ảnh minh họa trường hợp dự đoá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ự đoá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)
Sau khi tiến hành chạy thực nghiệm 3 model Faster R-CNN, YOLOv3, YOLOF thu được kết quả:
− 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, …
ĐỀ XUẤT CẢI TIẾN VÀ ĐÁNH GIÁ KẾT QUẢ
Đề xuất cải tiến
Faster R-CNN đạt kết quả cao hơn YOLOv3 và YOLOF trong hầu hết các tiêu chí, đồng thời là phương pháp phát hiện hai giai đoạn Do đó, chúng tôi tập trung vào việc cải thiện phương pháp này Qua thực nghiệm, chúng tôi nhận thấy rằng việc thay thế Roi Pooling của Faster R-CNN bằng Precise Roi Pooling sẽ nâng cao hiệu suất của mô hình.
Quá trình quantization trong Roi Pooling được mô tả trong hình 5.1, với vùng RoI gốc ở bên trái và vùng được ánh xạ xuống feature map 16*16 bên phải.
Roi Pooling áp dụng max pooling lên các vùng quan tâm (RoI) trong ảnh đầu vào với kích thước không cố định, nhằm tạo ra các feature map có kích thước đồng nhất Khi các RoI được ánh xạ xuống các feature map hình vuông nhỏ hơn, tỷ lệ giữa các RoI và feature map sẽ thay đổi, ảnh hưởng đến quá trình xử lý.
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
Trong RoI Pooling, để xử lý tọa độ tự nhiên của 85 feature map, chúng ta cần sử dụng kỹ thuật lượng tử hóa (Quantization) Kỹ thuật này thực chất là phép toán làm tròn các tọa độ sau khi chia tỉ lệ của các RoI, nhằm đưa chúng vào phù hợp với feature map.
Việc quantization trong quá trình xử lý dữ liệu mang lại lợi ích nhưng cũng tạo ra một điểm yếu lớn: sự mất mát dữ liệu Chẳng hạn, khi đưa vùng RoI về feature map cố định 3 ∗ 3 thông qua max pooling, quá trình quantization có thể dẫn đến việc không sử dụng hoàn toàn dòng cuối cùng của RoI.
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 toà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
Bằng cách tính toán tại tọa độ trung tâm của mỗi pixel cùng với các điểm trung tâm của các pixel lân cận, chúng ta có thể thực hiện nội suy một lần nữa trong cùng một vùng để suy ra giá trị cuối cùng, từ đó đưa vào feature map kết quả.
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)
Precise RoI Pooling, kế thừa từ RoI Align, cũng áp dụng nội suy tuyến tính để ánh xạ RoI lên feature map Tuy nhiên, trong quá trình pooling, thay vì sử dụng nội suy tuyến tính với số lượng điểm lân cận cố định, Precise RoI Pooling áp dụng đạo hàm bậc 2 với biến x và y để tính toán giá trị pooling một cách linh hoạt hơn, phù hợp với nhiều kích thước khác nhau Công thức chi tiết sẽ được trình bày dưới đây.
Việc áp dụng nguyên hàm trong Precise Roi Pooling, thay vì sử dụng các tham số cố định như Roi Align, cho phép mô hình thích ứng linh hoạt với các RoI có kích thước khác nhau và cung cấp một vector gradient liên tục cho tọa độ bounding box.
Đánh giá kết quả
Experiments demonstrate that Precision ROI-Pooling has improved the performance of Faster R-CNN, as shown in Tables 5-1 and 5-2 This enhancement is corroborated by the UIT_MLReceipts dataset, which is detailed in the paper "UIT-MLReceipts: A Multilingual Benchmark for Detecting Key Information in Receipts" (Appendix A).
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
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)
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)
The comparison of final results from the OCR phase using TransformerOCR highlights the performance of Precision Faster R-CNN, which achieved scores of 26.32 and 32.67, respectively, surpassing the standard Faster R-CNN.
CNN (%) (Kết quả tốt nhất được in đậm)
Với việc áp dụng Precision Faster R-CNN, mAP đã tăng 1.3% và cải thiện đáng kể kết quả nhận diện thông tin ở giai đoạn đầu, với tất cả các lớp đối tượng đều đạt kết quả cao hơn Tuy nhiên, khi thử nghiệm phương pháp TransformerOCR trên kết quả thu được từ pha nhận diện thông tin, kết quả lại thấp hơn như thể hiện trong Bảng 5-3.
Tổng quan hệ thống ứng dụng Rút trích thông tin hóa đơn
Ứng dụng "Receipts information extract app" cho phép người dùng chụp hoặc tải ảnh hóa đơn từ điện thoại để rút trích thông tin quan trọng Các thông tin được rút trích bao gồm tên cửa hàng, địa chỉ cửa hàng, thời gian mua hàng và tổng giá trị của hóa đơn.
− Model: Faster R-CNN (mmdetection), TransformerOCR (vietocr)
5.3.2 Phân tích và thiết kế
Hình 5-3: Sơ đồ tổng quan use-case của ứng dụng
Hình 5-4: Sơ đồ tổng quan user-flow của ứng dụng
Hình 5-5: Thiết kế kiến trúc của hệ thống
Ứng dụng có giao diện thân thiện với người dùng, bao gồm nhiều màn hình chức năng: (a) Màn hình chính hiển thị thông tin lịch sử; (b) Màn hình chụp ảnh giúp người dùng dễ dàng ghi lại hình ảnh; (c) Màn hình xác nhận ảnh để rút trích thông tin chính xác; (d) Màn hình phóng lớn ảnh cho phép xem chi tiết; (e) Màn hình hiển thị thông tin sau khi rút trích, bao gồm thời gian thực hiện; và (f) Màn hình thông tin hóa đơn đã rút trích, cung cấp thông tin về ngày thực hiện giao dịch.
To set up the server, execute the following commands: 1 Install Flask and Flask-Cors using `pip install Flask` and `pip install Flask-Cors`.2 Clone the MMDetection repository from GitHub with `git clone https://github.com/open-mmlab/mmdetection`, then switch to the specified commit using `git checkout a7a16afbf2a4bdb4d023094da73d325cb864838b`.3 Install the required versions of PyTorch, TorchVision, and Torchaudio with `pip install torch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2`.4 Navigate to the mmdetection directory with `cd mmdetection` and install dependencies using `pip install -r requirements.txt`.5 Install MMCV by running `pip install -v -e ` and `pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html`.6 Return to the previous directory with `cd ` and clone the VietOCR repository using `git clone https://github.com/pbcquoc/vietocr`.7 Install additional packages with `pip install einops` and `pip install gdown`.8 Download necessary files using `gdown id '1-lsthl2jfpJ04dIkbWttpb6obyJRQTqX'`, `gdown id '1-qDt1-lz2Q0pwKQgoOOypZ8bZWGCPO1A'`, and `gdown id '1sbhBQ4lMwDOwyTlYzUTsLwvEJrQKWydT'`.
To upload the demo.py file to your server, first download it from [this link](https://github.com/BaoChauTranLe/kltn_demo/blob/master/demo.py) Next, update the server link and port information as necessary Finally, execute the script by running the command: `python demo.py`.
To clone the project from https://github.com/BaoChauTranLe/kltn_demo, modify the URL parameters in the file `kltn/lib/server_connection/server_connection.dart` to reflect the server's IP address and port After making these changes, proceed to run the project.