Week 10:A Feasible Framework for Arbitrary-Shaped Scene Text Recognition
=
###### tags: `技術研討`
## Agenda
### 1. 簡介:信賢
### 2. Text Detection:昊中、立晟
### 3. Text Recognition:昱睿、沛筠
### 4. 實驗:信賢
-----
## 1. 簡介:信賢
### 1.1 STR 與 OCR 的不同
自然場景文本檢測識別(Scene Text Recognition, STR)是影像辨識中的一個重要領域,像是路牌、商店名稱等。OCR 能夠識別出立體上的白黑字,而自然場景中的文本是更復雜的立體,往往可能有光影遮蔽、有角度等等。

現實生活中存在許多複雜的辨識問題
(1) 文本區域
(2) 水平、垂直、任意彎曲
(3) 多語言
我們想要一個可以處理<font color=red>多語言、任意形狀</font>的模型架構,有以下兩個層面:
- **text detection**: instance segmentation based
- **text recognition**: language model based attention mechanism
其實近年來有許多驚人的STR(Scene Text Recognition)的成果,但大多都是專精於英文方面的檢測。
本篇論文北京航空航天大學與大陸的中科院共同發表適用於中英文的STR模型,並且贏得 ICDAR 2019 Robust Reading Challenge on ArbitraryShaped Text Competition 的冠軍。
我們推薦此模型是因為有以下幾個優點:
(1) 多語言
(2) 任意形狀也準確度高
(3) [原始碼開放](https://github.com/zhang0jhon/AttentionOCR)
(4) 有預訓練模型
(5) 容易框展到其他的應用, e.g. 語意分析或 NLP 之類的問題
## 2. Text Detection:昊中、立晟
- 正負樣本的設計是訓練物件偵測器的核心問題,好的正負樣本定義是通往精準的要點之一
### 2.1. Anchor-Based
- 善於處理不同物件的尺寸與比例
- 透過 IoU 來**定義正負樣本**
#### 2.1.1. One Stage Detectors

- 物件位置偵測和物件辨識一步到位
- 優點:較快
- 缺點:對小物件的偵測較差,precision較低
- e.g. 身分證在影像檔佔的面積很小的時候,抓的效果不好
- 範例:YOLO、Single Shot Detector (SSD)、RetinaNet
#### 2.1.2. Two Stage Detectors

- 先找出 Region Proposal 再辨識物件
- 優點:較準
- 缺點:計算量較大
- 範例:FPN、DCN、SNIP、Cascade R-CNN
### 2.2. Anchor-Free
- Focal Loss
- 透過壓低簡單的樣本的 loss weight,舒緩樣本數不均的問題
- Feature Pyramid Network (FPN)
- 將淺層的特徵用更小的 convolution (1x1) 加到深層的特徵,類似 image pyramid,可以解決不同 scale 圖片偵測
- 在 up-sampling 的過程中,對每張特徵張量都做預測

### 2.4. Anchor 部分的小結
- anchor-based 與 anchor-free 的關鍵差異在於正負樣本的定義,anchor只是一個恰好方便定義正負樣本的依據

### 2.5. R-CNN Family
#### 2.5.1. R-CNN

- Step 2:使用 Selective Search 找出 2000~3000 個 region proposal。
- Step 3:將取出的region proposals壓縮成一樣大小之後再丟入CNN擷取特徵。
- Step 4:利用SVM加以分類,並對bounding box做**線性回歸**。
- 問題:
- 須產生~2000個region proposal,每個區域都要放入CNN提取特徵,有很多部分**重複運算**。
<!-- - 在將候選區域放入CNN前需要先將候選區域重新調整尺寸至227 x 227 -->
<!-- - CNN提取特徵的層數較高,因此候選區域對於小區域較不敏感 -->
<!-- - 需要對bounding box訓練線性回歸模型以便回歸物體精確的位置 -->
#### 2.5.2. Fast R-CNN

- 對R-CNN中CNN提取特徵的運算效能問題進行優化
- 2000個region proposal個別放入CNN運算:
- Fast R-CNN只運算**一次CNN**,再將CNN結果的特徵讓2000個region proposal做運用。
- 利用RoI pooling的將region proposal對應到feature map後,接上fully connected network進行分類及bounding box線性回歸運算。
- 問題:
- 還是一樣需要使用Selective Search選出~2000個region proposal。
#### 2.5.3. Faster R-CNN

- 對R-CNN中region proposals的篩選效能問題進行優化
- 主要精神:**與其預先篩選region proposals,到不如從CNN的feature map上選出region proposals**,所以就不需要 SE 了。
- 利用RPN(Region Proposal Network)與anchor box。
- RPN的input是feature map,output是bounding box以及該bounding box 包含物件的機率,再利用NMS(Non-Maximum Suppression)等方法選出最終的proposals。
#### 2.5.4. Mask R-CNN
- 前述方法都是在找物體外圍的bounding box(都是方形),Mask R-CNN將R-CNN延伸應用到 instance segmentation(實例分割),會是多邊形的結果。

- 主要利用FCN(Fully Convolutional Network實現。
- 以往CNN網絡最後是接一個全連接(fully connected)網絡,FCN最後接的是一個卷積層。
- 一般的CNN只能接受固定大小input,但FCN能接受任何大小的input。

- Mask R-CNN是建構於Faster R-CNN之上,透過RoI align取得region proposals之後,針對每個region proposal通過FCN取得遮罩分割。


#### 2.5.5. Cascade R-CNN
- 主要關注IoU閾值選取的問題
- 訓練上detector經常是用低IoU閾值來訓練,如果提高IoU閾值:
- 訓練中positive samples的數量會指數級減少,導致over-fitting。
- inference時沒有真實標籤,導致與訓練上有不匹配的問題。
- 使用不同的IOU閾值,訓練多個級聯 (Cascade) 的檢測器:
- 可以用於級聯已有的detector,減少False Positives,取得更精確的結果。
- Iterative BBox-還是使用相同IoU閥值,無法對所有proposal取得好的結果。
- Integral Loss-共用相同pooling,分別用不同閥值處理,但是如果訓練樣本的IoU很不平均,還是很容易導致over-fitting以及不匹配。
- Cascade R-CNN-使用cascade回歸並逐步提高IoU閥值,使前一級的proposals能夠適應下一級更高的閥值。

#### <font color="red">2.5.6. Cascade Mask R-CNN</font>
- Segmentation是跟detection互相平行的分支,所以對detector的影響或是相關性並不是非常的大
- 主要需要注意的是因為Cascade R-CNN有多個detection的分支,所以作者提出加入segmentation的三種策略,實驗結果都有所提升。

- 本論文採用Cascade Mask R-CNN with Text-Aware RPN的原因與小變化
- 因Text Recognition多數是長而窄的矩形,採用anchor-based (Faster R-CNN)的方法能夠通過IoU閥值的proposals數量不多且較不容易收斂。
- 利用Mask R-CNN來預測任意形狀的文本區域。
- 利用Cascade R-CNN獲得更準確的偵測結果。
- 利用Inception結構來取得豐富穩健的文本特徵。

- **Loss function**
$L_{total}=L_{rpn}+L_{cascade}+L_{mask}+\lambda L_{reg}$
$L_{cascade}=\sum\limits_{i=1}^N(L_{cls}(\hat{y_i}, y_i)+L_{loc}(\hat{b_i}, b_i))$
|符號|說明|
|-|-|
|$L_{rpn}$|同Mask R-CNN的rpn loss|
|$L_{mask}$|同Mask R-CNN的mask loss|
|$L_{reg}$|L2正規化loss|
|$\lambda$|權重衰減因子|
|$L_{cascade}$|級聯total loss|
|N|級聯級數|
|$L_{cls}$|cross-entropy loss|
|$L_{loc}$|smoothed L1 loss|
|$\hat{y_i}, y_i$|預測標籤、真實標籤|
|$\hat{b_i}, b_i$|預測邊框變化參數、真實邊框變化參數|
<!-- #### [補充] Region Proposal 方法
##### Selective Search (SS)
##### Edge Boxes (EB) -->
## 3. Text Recognition:昱睿、沛筠
### CTC 的優缺點
- 優點
- 不用知道 input 和 output 之間如何對齊,便可以解決不定長度的 seq2seq 問題。
- 詳細可以看 [Week 4:CTC](https://hackmd.io/hvJYCQVTQayybhfd9P94Bg#End-to-end-Models)
- 限制
- 沒辦法處理 multi-oriented text (多方向文字問題),因為 CTC 的每個切片都只有單方向的 feature (**single oriented feature slice**)。

### 3.2. Attention based Cross-Modal Alignment and Sequence Classification
* 文中將這個問題視為 representation learning 以及 alignment problem 的綜合性問題,而不只是一般的 sequence classification,因此,以下將簡介相關的幾種方法論:
* Word embedding and alignment problem
* Attention mechanism
#### 3.2.1 方法論小簡介
##### 3.2.2.1. Word embedding and alignment problem
- **Word embedding**:將文本中的某一個 word 以特定方法映射(embedding)至另一個向量空間,且各向量具有語意資訊。如下圖右方所示,詞彙皆離語意相似的其他詞彙距離較近。
- 左方的 one-hot encoding 則假設該文本中,共有 M 種不同詞彙,因此各 word vector 將為 M 維向量(即每一維度對應一種詞彙);同時,它也假設各詞彙間相互獨立,所以缺乏語意資訊。
- 本文使用 word embedding。

- **Alignment problem**:了解各詞彙間的關聯性。
- 比如,若想將英文句子翻譯成德文形式(seq2seq),模型必得經過學習知道它們具有怎樣的對應關係。
- 以上可以參考這裡的說明:[**link**](https://ithelp.ithome.com.tw/articles/10246714)

##### 3.2.1.1. :pencil: <font color="red">Attention Mechanism 小簡介</font>
- Attention 的精神:一種解決 seq2seq 問題的方式,它會考量 input vectors 間彼此的關聯性,並在各個 vector 萃取出自己的 feature 後,再通過 activation function 得到分數 (attention score),藉以使模型知道應將注意力集中於何處。
- :one: **Sequence-to-sequence 的問題**
- Input:一串 vector。
- Output:考慮所有的 vector (sequence) 後產生,例如 $b^1$ 是考慮 $a^1$、$a^2$、$a^3$ 和 $a^4$ 而得。

- :two: **計算關聯性**

- :1234: **可能的兩種方式**
- Dot product:將 input 的兩個向量分別乘以 $W^q$ 和 $W^k$,得到 q 與 k 向量,而 $\alpha = q · k$(element-wise 的相乘)。
- Additive:將 input 的兩個向量分別乘以 $W^q$ 和 $W^k$,得到 q 與 k 向量。兩者相加後,通過 activation function 和 transform 得到 $\alpha$。

- :three: **計算分數 (attention score)**
- 以 $a^1$ 為例,它將分別與其他 vectors 計算之間的關聯性($\alpha$):
- $q^1$ 與 $k^2$ 進行 inner-product 後,得到 $\alpha_{1,2}$ (attention score),其餘依此類推。
- $\alpha_{1,2}$ 接著通過 activation function(如 soft-max),獲得 $\alpha_{1,2}^′$。
- 為根據 $\alpha_{1,2}^′$ 抽取重要的資訊,將 $v^2$ 乘上 $\alpha_{1,2}^′$,其餘亦同。
- 最終將所有的 $\alpha^′v$ 值相加,即為 $b^1$。
- 如果 $\alpha_1$ 與 $\alpha_2$ 間有很強的關聯,$\alpha_{1,2}^′$ 的值也跟著變高,所以 $b^1$ 的值將可能較接近 $v^2$。

- :four: **更新參數**
- 已知 $a^1$、$a^2$、$a^3$ 和 $a^4$ 皆會產生 q、k 及 v,因此我們將它們分別以 Q、K 與 V 三個矩陣表示,而 I 矩陣為 input (vectors)。
- 需要學習的參數是 $W^q$、$W^k$ 和 $W^v$。


#### 3.2.2. :pencil: 回到論文內容
- 可以知道每個字對應圖像中的位置
- 為了不規則文字的辨識 (irregular text recognition)
- alignment between visual feature and word embedding in image caption
- 文中使用 **Bahdanau Attention Mechanism** 學習 visual feature 和 LSTM hidden state 間的對齊關聯
- 目的: 將前面 CRNN 算出來的 features ,經過 Attention Function 計算出分數,與 word embedding 計算 loss 然後更新參數
- **Bahdanau Attention Mechanism** 可以參考簡單的文字說明:[**link**](https://blog.csdn.net/u010960155/article/details/82853632)
- **Bahdanau Attention Mechanism**: [**paper link**](https://arxiv.org/pdf/1409.0473.pdf)
| 符號 | 說明 |
| - | - |
| $E$ | global word embedding matrix<br>$E=e_0,e_1,...,e_t$ |
| $V$ | CNN feature map |
| $C$ | context features<br>$C=c_1,c_2,...,c_t$ |
| $t$ | 時間點 |
| $\alpha$ | attention weight |
| $T$ | 序列最大長度 |
| $h$ | LSTM hidden state |
- 計算 $E$ 這一個 embedding 在看到 $C$ 這一堆 hidden features 情況下的條件機率 $P(E|C)$
$$
P(E|C)=\prod\limits_{t=1}^TP(e_t|h_{t-1},c_t, \hat{\textbf{e}}_{\textbf{t-1}})
$$
- 上面的東西是怎麼來的呢?
- :one: 圖片過完 CNN 得到 feature map ($V$)
- :two: 利用 feature map ($V$) 放到 LSTM 會得到很多個 hidden state ($h_t$)
- :three: hidden state ($h_t$) 以及 feature map ($V$) 放到 Attention function 去計算分數,以及產出 context feature,公式如下
- Attention Mechanism formulas
$$
\alpha_t=AttentionF unction(V,h_{t-1})
$$
$$
c_t=\sum\alpha_t · V, \ \ \ \ \ \ \ \ \ \ \ \ 1≤t≤T
$$
- 其中 Attention Function 的公式是
$$
e_{ij}^t=W_e · tanh(W_h^\alpha · h_{t-1}+W_v · V)
$$
$$
\alpha_t=\frac{exp(e_{ij}^t)}{\sum_{i=1}^h\sum_{j=1}^wexp(e_{ij}^t)}
$$
- :four: 每個階段將 $h_{t-1}$ 以及 $c_t$ 都會得到該階段的機率值,連續計算就會得到整串的條件機率 ($P(E|C)$)
- :five: 目標函數 optimization function:使用 Masked Cross Entropy (MCE) loss for dynamic sequence length,公式如下
$$
MCE(Y|X;M)=\frac{-\sum_{t=1}^Tm_t · p_tlog(q_t)}{\sum_{t=1}^Tm_t}
$$
- $q_t$ 就是從上一個 embedding ($\widehat{\textbf{e}}_{\textbf{t-1}}$) 所算出來的 logits,關係是
$$
q_t\propto W_h^e · h_t+W_c · c_t+W_e · \hat{\textbf{e}}_{\textbf{t-1}}
$$
- $p_t$:one-hot ground-truth sequence labels
- $m_t$:corresponding sequence mask
$$m_t=\begin{cases}1\ \ \ x_t\text{ is not EOS or the first EOS,}\\0\ \ \ \text{otherwise.}\end{cases}
$$
- 看一下 [流程圖](https://app.diagrams.net/#Hyurei79601%2Fdevelop_flow%2Fmaster%2Fattention_ocr_flow.drawio)



## 4. Experiment:信賢
開頭說明了無法實現 end-to-end STR framework 因為GPU記憶體限制,因此實驗部分分為兩個區塊說明。
### 4.1. Text Segmentation
- Mask R-CNN 和 Cascade R-CNN 的 ResNet101-FPM 為 backbone
- 由於較少 TP anchors,使用 Mask R-CNN 一半的參數
- data augmentation
Augmentation如裁切、旋轉、顏色變化等會進行採用。
- Region Proposal Network batch
- ROIAlign(128、256)
RoIAlign是在Mask R-CNN中提出的,用一種更優雅的方式解決全連接層固定輸入的問題。與RoIPool的最主要區別是
- 1.去掉了所有對RoI邊界的量化操作(上面講到的兩次量化過程)
- 2.使用雙線性插值計算不存在的點的值。
- 3.說明:

- 同樣輸入還是800x800的圖片,骨幹網絡的stride依然是32,最終得到的特徵圖大小為800/32=25,即25x25。
- RPN選出的RoI大小仍然是665x665,RoI在特徵圖上的映射為665/32=20.78,即大小為20.78x20.78,這裡不執行量化操作
- 依然假定RoIPool的輸出是7x7,這樣就要把上面得到的RoI在特徵圖上的映射分為49個小單元,每個小單元的大小是20.78/7 = 2.97。這裡也不執行量化的操作。
- 假定取樣點數為4,即表示,對於每個2.97*2.97的小區域,平分四份,每一份取其中心點位置,而中心點位置的畫素,採用雙線性插值法進行計算,這樣,就會得到四個點的畫素值,如下圖
- 得到四個點的值後,對四個值取最大值或者平均值來代表該小單元,最終得到7x7的特徵圖

上圖中,四個紅色叉叉‘×’的畫素值是通過雙線性插值演算法計算得到的
最後,取四個畫素值中最大值作為這個小區域(即:2.97*2.97大小的區域)的畫素值,如此類推,同樣是49個小區域得到49個畫素值,組成7*7大小的feature map
優點:如果是圖片中有較多小目標物體需要檢測,相較於RoIpool優先選擇RoiAlign
- anchor ratios of 1/9, 1/4, 1/2, 1, 2, 4, 9(用於極不規則的文本檢測)
- SGD
每一個GPU迭代次數36萬次iteration
- learning rate 0.01
- momentum 0.9
- weight 0.0001
- pre-trained model: CDAR2017-MLT 、ICDAR2017RCTW
### 4.2. Sequence Classifation
- 以 InceptionV4 作為 backbone
- 參考
visual feature and sequence embedding Bahdanau Attention based with LSTM
- [Google’s Neural Machine Translation (GNMT)](https://arxiv.org/pdf/1609.08144.pdf)
是Google開發的神經機器翻譯(NMT)系統,於2016年11月推出,它使用人工神經網路來提高Google翻譯的流暢度和準確性。

神經機器翻譯就是通過端對端的神經網絡技術機器能夠自動將一種語言的句子翻譯成另一種語言的句子。它有三個組成部分:encoder、decode和attention。編碼器將源句子轉換為向量列表,每個輸入符號代表一個向量。 句末符號(EOS)。編碼器和解碼器通過注意力模塊連接,該注意模塊允許解碼器在解碼過程中聚焦在句子的不同區域上。
- [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044v3.pdf)


- 對文本進行隨機映射轉換、色違,並裁切大小為 256 pixels
- 隨機轉換和翻轉並填充至以299x299大小為0的文本區域
- LSTM 長度設定26(有EOS為27),大小為26x26並嵌入256x5435(字符數量,包括中文、英文字母、數字和其他符號)。
- LSTM的input不只有前一個神經元狀態,也包含目前的attention feature和之前的embedding
- Adam
每一個GPU迭代次數46萬次iteration
- learning rate 0.0001
- weight 0.00001
- pre-trained model: InceptionV4 (包括 LSVT,使用Art、ReCTS、COCO-Text、ICDAR2017進行訓練多語言不規則文本識別模型)
### 4.3. Results
在場景文本識別任務中以準確率獲得冠軍
調和平均數(英語:Harmonic mean)

- Normalized Edit Distance metric

- D:Levenshtein 距離(萊文斯坦距離)
是一種量化兩字串間差異的演算法,代表從一個字串轉換為另一個字串最少需要多少次編輯操作
"Saturday" 和 "Sundays" 之間的 Levenshtein 距離是 4
(1) Saturday → Sturday // 刪除第一個 a
(2) Sturday → Surday // 刪除第一個 t
(3) Surday → Sunday // 替換 r 為 n
(4) Sunday → Sundays // 結尾添加 s
- $s^i$ 和 $\hat{s}^i$ 表示字符串中的預測文本行和ground truth
## 5. 參考資料
* 網路上介紹各種 attention base: https://www.itread01.com/content/1548179294.html
* 裡面說 atttention 的原始論文: [Show, Attend and Tell: Neural Image Caption Generation with Visual Attention](https://arxiv.org/pdf/1502.03044.pdf)
* code裡面放的ppt: [Attention Mechanism](https://github.com/zhang0jhon/AttentionOCR/blob/master/reference/Attention_Mechanism_in_Deep_Learning.pdf)
* 有人的整理:https://zhuanlan.zhihu.com/p/138589087
* Cascade R-CNN: [Cascade R-CNN: High Quality Object Detection and Instance Segmentation](https://arxiv.org/pdf/1906.09756v1.pdf)
* 李宏毅講解 attention: [youtube link](https://www.youtube.com/watch?v=hYdO9CscNes)
* [Word Embedding](https://medium.com/%E7%A8%8B%E5%BC%8F%E5%B7%A5%E4%BD%9C%E7%B4%A1/word-embedding-3ca60663999d)
* 李宏毅課程內容:[PDF](https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/self_v7.pdf)
## 補充
### Semi-Supervised Attention Mechanism
### Neural Architecture Search (NAS)
- 可以自動找到最佳的網路
## 問題區
|姓名|問題|解答|
|:-:|:-:|:-:|
|||