Report: Khảo sát các mô hình OCR cho bài toán text recognition

Report: Khảo sát các mô hình OCR cho bài toán text recognition

Dự Trần Ngọc

August 2022

STR framework

Trong bài toán text recognition các mô hình thông thường có 4 stage sau:

  1. Transformation

  2. Feature extraction

  3. Sequence modeling

  4. Prediction

STR framework

Transformation stage

Do ảnh đầu vào có nhiều hình dạng khác nhau ví dụ như cong vênh vì thế ở giai đoạn trích xuất các đặc trưng bằng mạng CNN sẽ khiến cho mô hình CNN phải học nhiều các biến thể về mặt hình dạng (dùng nhiều phương pháp data augmentation xoay hoặc méo ảnh ở các mức đó khác nhau) . Để giải quyết vấn đề này có 2 phương pháp chủ yếu là dùng mạng STN ( spatial transformation network) hoặc biến thể của nó là TPS (Thin plate spline).

Feature extraction stage

Giai đoạn này dùng để trích xuất các đặc trưng của ảnh đầu vào có được sau khi qua stage 1. Trong bước này chủ yếu sử dụng các mô hình CNN như VGG, Resnet, MobileNet,... Vgg đơn giản chiếm ít bộ nhớ nhưng có nhược điểm là gặp vấn đề triệt tiêu đạo hàm khi tăng số layer. Resnet khắc phục nhược điểm của các mạng thẳng như VGG bằng kết nối tắt nhưng chiếm nhiều bộ nhớ hơn. MobileNet có ưu điểm là chiếm ít bộ nhớ, tốc độ tính toán cao nhưng độ chính xác chưa quá cao. Feature map thu được ở bước này sẽ được reshape thành dạng [B, L, D] trong đó B là batch size, L là time step, D là chiều vector. Mỗi vector đóng vai trò như quản lý một vùng receptive field từ ảnh đầu vào của CNN.

Sequence modeling stage

Từ tập hợp vector thu được ở bước feature extraction ta sẽ coi chúng như những word embedding trong mô hình ngôn ngữ và có thể sử dụng các Sequence model như RNN, LSTM, GRU, BiLSTM,.. Mô hình RNN có sự đơn giản hơn so với các mô hình Sequence khác nhưng gặp khó khăn trong vấn đề phụ thuộc xa do bị mất gradient. LSTM và GRU có độ phức tạp cao hơn RNN nhưng khắc phục được vấn đề phụ thuộc xa mà RNN mắc phải do thiết kế bao gồm các gate để lựa chọn thông tin. LSTM và GRU gặp vấn đề là nó chỉ thể hiện được liên kết giữa các từ (kí tự) trong câu (từ) theo một chiều (thường từ trái qua phải) nhưng thực tế thì mối quan hệ ngược lại giữa các từ (kí tự) đôi khi cũng có ý nghĩa do vậy BiLSTM giải quyết vấn đề đó nhưng đồng nghĩa tính toán cũng lâu hơn so với 1 chiều.
Có một số phương pháp bỏ qua gia đoạn sequence modeling mà sử dụng luôn tập các vector từ giai đoạn trước feature extraction để tính toán prediction bằng cách sử dụng trực tiếp CTCLoss. Cách này có ưu điểm là tốc độ tính toán nhanh hơn nhưng đồng nghĩa là hiệu quả sẽ kém do không làm nổi bất được quan hệ giữa các vector với nhau như các mô hình Sequence.
Một số mô hình sử dụng cơ chế Sequence phổ biến ở bước này là bao gồm:

Attention OCR

Hoạt động của cơ chế attention

Gọi V = v1, v2, ..., vd là tập hợp các hidden state của encoder BiLSTM.
ht − 1 là hidden state ở time step thứ t-1 của decoder.
Trong cơ chế attention thì đầu vào của một decoder ở step t không chỉ là giá trị output y của step t-1 mà nó là sự kết hợp giữa y và vector context ct. Vector ct được tính như sau:

B1: Tính toán hệ số attention etj giữa vector ht − 1 và các vector vj với $j = \overline{1,d}$

etj = FC(concat(ht − 1, vj))

B2: Chuẩn hóa lại các hệ số attention etj ở bước 1 bằng hàm softmax ta sẽ được hệ số αtj

$\alpha_{tj} = \frac{exp(e_{tj})}{\sum_{k=1}^{d} e_tk}$

B3: Tính vector context ct

$c_t = \sum_{j=1}^{d} \alpha_{tj} v_j$

Mô hình Attention OCR

tại state t RNN có đầu vào kích hoạt ht − 1, input là [ct + yt − 1] hoặc Fc(concat(ct, ht − 1))
Hoặc state t RNN có đầu vào kích hoạt là kết hợp giữa htct còn input là yt − 1

VietOCR

Mô hình VietOCR sử dụng cơ chế Encoder - Decoder của mô hình Transformer.

Mô hình VietOCR

CRNN

Phương pháp hoạt động

Mô hình CRNN bao gồm 2 phần là các mạng CNN để trích xuất các đặc trưng từ ảnh và mô hình BiLSTM có độ sâu là 2 để decode ra text. Cụ thể như sau: Từ ảnh đầu và qua mạng CNN ta được feature map có kích thước là (B, c, 1, w), feature map này sẽ được reshape thành (B, w, c) trong đó w đóng vai trờ như L(time step) và c đóng vai trò như h (word embedding dimension) trong mạng RNN. Sau đó tập vector này sẽ được đưa qua mô hình BiLSTM. Vì số lượng vector là không đổi trong khi đó số lượng kí tự có trong ảnh là khác nhau do đó mô hình này sử dụng hàm CTCLoss để huấn luyện.

Architecture of the SVTR-Net

Prediction stage

Ở bước này để tính toán có 2 cách:
Cách 1: Sử dụng trực tiếp hàm CTCLoss trên tập các feature có được sau khi qua bước Sequence modeling. Hàm CTCLoss sẽ tính toán dựa trên một chuỗi có độ dài không đổi mặc dù số lượng kí tự cần dự đoán là nhỏ hơn độ dài cố định của hàm CTCLoss. Điều này có được bằng cách sử dụng các kí tự lặp lại và kí tự "-" để tách biệt 2 kí tự giống nhau đứng gần nhau mà không bị gộp lại. Cụ thể hàm CTCLoss được tính toán như sau:

Tính toán CTCLoss

Giả sử mô hình có 3 timestep và có bảng xác xuất softmax ở mỗi timestep như sau:

Softmax probabilities


Giả sử có nhãn là AB khi đó xác suất để nhận được nhãn là AB là: P(AB) = P(ABB) + P(AAB) + P( − AB) + P(A − B) + P(AB − ) = 0.8 * 0.1 * 0.8 + 0.8 * 0.7 * 0.8 + 0.1 * 0.7 * 0.8 + 0.8 * 0.2 * 0.8 + 0.8 * 0.1 * 0.1
Cuối cùng loss sẽ là  − log(∑P(AB))

Giải mã text

Trong quá trình inference để giải mã text từ ouput sử dụng CTCLoss ta sẽ tìm đường tối ưu nhất từ ma trận softmax probabilities bằng cách chọn các từ có score cao nhất (trong bảng trên là AAB) sau đó kết hợp các từ lặp lại đứng liền nhau và xóa bỏ kí tự “-“ nếu có. Trong trường hợp này sẽ là AB.

Cách 2: Sử dụng phương pháp giải mã như trong mô hình seq2seq gồm một số phương pháp như sau.

  1. Thuật toán Greedy search

  2. Beam search

  3. Random sampling

  4. Top-k sampling

  5. Top-p sampling

Thuật toán này thực hiện đơn giản bằng cách lấy các từ có xác suất cao nhất ở mỗi step làm input cho step tiếp theo. Phương pháp này có nhược điểm là mặc dù mô hình đã được train nhưng đôi khi vẫn có một vài lỗi nhỏ vì vậy việc chọn "cứng" các từ như vậy đôi khi là không phải cách tốt nhất.

Beam search

Thuật toán này được thực hiện bằng cách xác định một thông số k (beam size). Ở bước đầu tiên ta khi nhập mã "sos" mô hình sẽ cho ra xác suất của V từ trong vocab. Từ đó ta chọn k từ có xác suất cao nhất. Bước thứ 2 ứng với k từ được chọn ở bước 1 ta sẽ đưa qua mô hình và được k*V vector xác suất của các từ trong vocab tương ứng với k input và tiếp tục chọn k từ có xác suất cao nhất. Quá trình này được lặp lại cho đến khi gặp kí từ "end" và có k chuỗi. Từ k chuỗi này ta sẽ chọn chuỗi có điểm số cao nhất được tính như sau:

$\frac{1}{L^ \alpha }\sum_{t'=1}^{L} log(P(y_t'|y_1, y_t'-1,..., c))$

Random sampling

Thuật toán này tương đối đơn giản bằng cách lấy mẫu các từ ở step thứ t dựa trên phân phối xác suất của đầu ra ở step t-1. Ví dụ ở step đầu tiên khi ta nhập token "sos" mô hình sẽ output ra một phân phối xác suất (qua hàm softmax). Ta có thể thấy rằng "influence" có xác suất 48%, "great" có xác suất 21%,... như vậy ta có thể chọn từ tiếp theo ở step thứ 2 khả năng cao là từ được chọn là influence. Phương pháp này có tính đơn giản và tạo sự đa dạng của các câu khi có thêm yếu tố ngẫu nhiên nhưng do là chọn ngẫu nhiên các các câu khá rời rạc.

Random sample

Topk sampling

Thuật toán này hoạt động cũng tương tự như thuật toán Random sampling nhưng thay vì lấy mẫu trên toàn phân phối xác suất nó sẽ lấy mẫu dựa trên top k từ có xác suất cao nhất. Như vậy nó hạn chế được những câu rất không liên quan có thể xảy ra ở trong thuật toán random sampling.

Top-p sampling

Trong phương pháp Top-k sampling vì k là được fix cố định do đó vẫn thiếu đi những lựa chọn thú vị do vậy trong phướng pháp top-p sampling các tác giả đã chọn tập V các token có xác suất cao nhất sao tổng của chúng lớn hơn một giá trị p đặt trước sau đó tiến hành lấy mẫu token tiếp theo trong tập V đã chọn được. Như vậy ta có thể thấy rằng tập token được xem xét khi lấy mẫu có thể thay đổi tùy thuộc vào phân phối đầu ra của step phía trước.

Top K sample
Top P sample

Mô hình SVTR-Net một phương pháp tiếp cận hoàn toàn khác

Thông thường trong STN framework thì giai đoạn feature extraction và Sequence modeling là hai stage riêng biệt với nhau nhưng trong mô hình SVTRnet tác giả đã gộp 2 quá trình này lại với nhau thành 1 stage duy nhất bằng cách sử dụng cơ chế self attention mạnh mẽ của mô hình Transformer.

Phương pháp hoạt động

Architecture of the SVTR-Net

Patch embedding

patches embedding

Ảnh đầu vào được đưa qua lớp Patch Embedding thực chất là 2 lớp convolution 3x3 với stride bằng 2 ở giữa là hàm batchnorm. Patch embedding giúp giảm khối lượng tính toán cho các giai đoạn sau của mô hình đặc biệt khi sử dụng cơ chế tính toán self attention có chi phí tính toán lớn. Đầu ra của lớp Patch embedding là 1 tensor có kích thước $\frac{H}{4} X \frac{W}{4} X D_0$. Tensor này sau đó sẽ được cộng với position embedding để lưu trữ các thông tin về vị trí có thể sẽ bị mất đi do quá trình tính toán attention ở các bước sau. Hình 11 mô tả cho quá trình hoạt động của patch embedding.

Mixing Block

Minh họa giữa global mixing và local mixing

Trong một văn bản thì có 2 phụ thuộc quan trọng là giữa các kí tự với nhau hoặc giữa các kí tự với thành phần không chứa kí tự và giữa bản thân các nét trong một kí tự ví dụ như từ chơi thì ngoài liên kết giữa các kí tự c,h,ơ,I thì giữa các kí tự còn có những đặc điểm riêng của nó như ơ có “râu”. Xuất phát từ suy nghĩ đó thì các giả đã sử dụng 2 khối là Global Mixing và Local Mixing.

Global Mixing

Module Global Mixing dùng để đánh giá sự phụ thuộc giữa các kí tự với nhau. Trong văn bản thì 2 thành phần quan trọng là text và non-text vì thế cần phải thiết lập một cơ chế làm nổi bật các phần text và biểu diễn sự phụ thuộc giữa các kí tự và làm giảm sự ảnh hưởng của non-text. Để làm điều này thì tác giả sử dụng cơ chế multi – head self attention như trong mô hình Transformer. Để tránh hiện tượng vanishing gradient một kết nối tắt đã được thực hiện. Tiếp theo sau nó là 2 khối layernorm và MLP kết hợp nối tắt như hình trên.

Local mixing

Như đã nói thì cấu trúc của bản thân 1 kí tự cũng rất quan trọng cho việc nhận dạng vì thế để học được các thông tin cục bộ (local). Để làm điều này các khối Local Mixing xử dụng các sliding window với kích thước cửa sổ là 7x11 và thực hiện tính toán self attention trong các vùng cửa sổ đó (tương tự swin transformer)

Merging và Combining

Tương tự như các kiến trúc gần đây như Swin hay SegFormer để tạo ra các biểu diễn ở nhiều scale khác nhau, sau mỗi khối Mixing block tác giả thực hiện merge các patches ở lân cận lại với nhau bằng cách sử dụng các khối convolution kích thước 3x3 với stride bằng 2 theo chiều cao và 1 theo chiều rộng và có padding theo chiều rộng như vậy là chiều cao sau khi qua mỗi lớp merging sẽ bị giảm một nửa còn chiều rộng thì không.
Combining được sử dụng ở tầng cuối cùng thay cho kiến trúc Merging bằng cách sử dụng lớp pooling để đưa chiều cao bằng 1 sau đó reshape và chiếu nó sang một chiều mới và thêm lớp kích hoạt và dropout.

Prediction

Vì số lượng feature đầu ra là không đổi do vậy đây là một bài toán được coi như time step đã được fix cứng do vậy ta training sử dụng hàm CTCLoss.

Data

Trong các mô hình STN thì việc label data training bằng tay là rất tốn kém vì thế để đạt được một lượng lớn dữ liệu training thì cần sử dụng các phương pháp tổng hợp dữ liệu. Để đánh giá thì người ta sẽ sử dụng dữ liệu thực.
Trong training có 2 phương pháp phổ biến để tổng hợp dữ liệu là:

Dữ liệu training

MJSynth (MJ): Có tổng cộng 8.9M hình ảnh từ được tổng hợp theo phương pháp: 1) font rendering, 2) border and shadow rendering, 3) background coloring, 4) composition of font, border, and background, 5) applying projective distortions, 6) blending with realworld images, and 7) adding noise.
SynthText (ST): Bộ dữ liệu có khoảng 5.5M dữ liệu training được thiết kế cho task scene text detection nhưng cũng có thể sử dụng cho task recognition bằng cách cắt những vùng có text.

Dữ liệu đánh giá

Các bộ dữ liệu trong đánh giá thường được chia ra làm 2 loại là regular datasetsirregular datasets.

Regular datasets

Bộ dữ liệu này thường chứa các text nằm theo hướng ngang và đây được coi là các trường hợp đơn giản. Một số bộ dữ liệu tiêu chuẩn cho dạng này là:

  • IIIT5K-Words Bao gồm 2000 ảnh training và 3000 ảnh cho đánh giá được crawled từ Google.

  • Street View Text (SVT) Bao gồm những ảnh ngoài đường phố gồm có 257 ảnh cho training và 647 ảnh cho đánh giá được thu thập từ Google Street View

  • ICDAR2003 (IC03) Chứa các ảnh từ cuộc thi 2003 Robust Reading gồm 1156 ảnh cho training và 867 ảnh cho đánh giá

  • ICDAR2013 (IC13) Chứa hầu hết các hình ảnh của IC03 và có một số bổ sung 848 ảnh cho training và 1015 ảnh cho đánh giá bằng cách loại bỏ những ảnh có chứa các kí tự non-alphanumeric.

Irregular datasets

Bộ dữ liệu này chứa các text bị xoay, méo hoặc cong vênh. Một số bộ dữ liệu tiêu chuẩn cho dạng này là:

  • ICDAR2015 (IC15) Gồm có 4468 ảnh cho quá trình training và 2077 ảnh cho quá trình đánh giá. Bộ dữ liệu được thu thập bằng Google Glasses trong môi trường di chuyển của người đeo do đó có nhiễu mờ và bị quay và một số ảnh có độ phân giải thấp.

  • SVT Perspective (SP) Được thu thập từ Google Street View chứa 645 ảnh cho đánh giá. Phần lớn các ảnh có góc nhìn trực diện.

  • CUTE80 (CT) Chứa 288 ảnh cho quá trình đánh giá được thu thập từ bối cảnh trong tự nhiên. Có nhiều bức ảnh bị cong.

Các trường hợp nhận diện bị sai

Trong 8539 bức ảnh được đánh giá của các bộ datasets chuẩn thì có tới 644 ảnh là không được nhận diện chính xác bởi bất kì sự kết hợp nào trong 24 sự kết hợp mà tác giả của bài báo này đã thực hiện. Tác giả đã chỉ ra những lỗi này và hy vọng nó là cảm hứng cho các nghiên cứu tương lai.

  1. Chữ thư pháp: Như tên các nhãn hàng như coca, cafe,...

  2. Văn bản dọc: Hầu hết các mô hình STR giả sử nhận diện text ở dạng nằm ngang do đó các ảnh text ở dạng nằm dọc sẽ không nhận diện đúng được. Nguyên nhân một phần chính là quá trình trích xuất đặc trưng bằng CNN ta giảm chiều cao về còn 1 trong khi độ rộng không đổi.

  3. Kí tự đặc biệt: Trường hợp các kí tự không có trong tập dữ liệu training. Cải thiện bằng cách train mô hình với cả các kí tự đặc biệt thì hiệu suất đã tăng từ 87.9 % lên tới 90.3 %

  4. Ảnh có độ phân giải thấp: Trường hợp ảnh có độ phân giải thấp mô hình cũng nhận diện được tốt. Cải thiện bằng cách sử dụng phương pháp super-resolution.

  5. Nhãn có nhiễu: Tác giả tìm thấy trong những ảnh bị lỗi có một số mẫu bị gán nhãn sai.

Dữ liệu cho bài toán LatexOCR

Tác giả sử dụng các kĩ thuật để thu thập các phương trình latex ở trang arXiv, có khoảng 100000 công thức. Vì một số công thức có nhiều cách viết khác nhau trong latex vd như phương trình x2 + 1 có thể được viết dưới dạng 2 dạng do vậy họ đã chuẩn hóa data bằng parser (KaTeX) bằng cách sử dụng một số các quy ước như sau. Sau khi chuẩn hóa sẽ được một file .txt chứa các công thức trên từng dòng.

Nhận xét

Bài đăng phổ biến