Paper : https://arxiv.org/abs/1908.08207v1
通過語義分割可以直接從二維空間實作檢測和識别。
Spatial Attention Module(SAM)
- Mask TextSpotter 的識别模型對于處理二維空間中的正常文本和不規則文本更通用,并且同時考慮本地和全局文本資訊會更有效
- 不同于之前的方法隻能處理水準或者旋轉文本,本文方法可以處理任意形狀的文本
- Mask TextSpotter 是第一個完全可端到端訓練以進行文本發現的架構,它具有簡單,平滑的訓練方案,是以其檢測模型和識别模型可充分受益于特征共享和聯合優化。
Architecture
特征金字塔網絡(FPN)作為主幹網絡,區域建議網絡(RPN)生成文本建議框,Faster R-CNN 做邊框回歸,執行文本執行個體分割,字元分割和文本序列識别的mask 分支。
Text Instance and Character Segmentation
給定一個輸入 RoI 特征(大小固定位 16 × 64),通過四個卷積核為 3 × 3 的卷積層和一個卷積核為 2 × 2 的反卷積層,然後分别輸入到兩個子產品。通過卷積層生成 1 通道的文本執行個體圖,精确定位文本區域的位置,不管文本執行個體的形狀。字元分割子產品,字元分割圖直接通過共享特征圖生成。輸出的字元圖為 N s × 32 × 128 N_s × 32 × 128 Ns×32×128 ,其中 N s N_s Ns 表示類别數,設定為37,包含 36 個數組和字母和 1 個背景。
Spatial Attentional Module(SAM)
字元分割圖的缺點:首先,字元分割需要字元級别的标注監督訓練。第二,需要一個後處理算法從分割圖中生成文本序列。第三,字元的順序不能從分割圖中獲得。是以,為了解決這些困難,使用 SAM 以端到端的方式從特征圖中解碼文本序列。
SAM 直接解碼為兩維的特征圖,可以更好的表示任意形狀。
首先,給定一個特征圖,這個特征圖可以是Mask TextSpotter中的 RoI 特征,也可以是獨立識别子產品中主幹網絡的特征圖,把這個特征圖通過雙線性插值調整為固定的形狀。然後,接着一個卷積層,一個最大池化層,一個卷積層。最後,使用有 RNNs 的空間注意力産生文本序列。
Position Embedding(位置嵌入)
位置嵌入特征圖 F p e F_{pe} Fpe 是 ( W p + H p , H p , W p ) (W_p+H_p, H_p, W_p) (Wp+Hp,Hp,Wp) ,其中 H P , W p H_P, W_p HP,Wp 分别是 8 和 32。位置嵌入計算如下:
F p e x ( i , j , : ) = o n e h o t ( i , W p ) F_{pe}^x(i, j, :) = onehot(i, W_p) Fpex(i,j,:)=onehot(i,Wp)
F p e y ( i , j , : ) = o n e h o t ( j , H p ) F_{pe}^y(i, j, :) = onehot(j, H_p) Fpey(i,j,:)=onehot(j,Hp)
F p e = C o n c a t ( F p e x , F p e y ) F_{pe} = Concat(F_{pe}^x, F_{pe}^y) Fpe=Concat(Fpex,Fpey)
其中 o n e h o t ( i , K ) onehot(i, K) onehot(i,K) 表示長度為 K K K 的向量 V V V ,索引為 i i i 的元素的值設定為 1,其他的設定為 0。我們将位置嵌入特征圖與原始輸入特征圖進行級聯。級聯特征圖 F F F 是 ( C + H p + W p , H p , W p ) (C+H_p+W_p, H_p, W_p) (C+Hp+Wp,Hp,Wp),其中 C C C 是原始輸入特征圖的通道數,設定為 256。
Spatial Attention with RNNS
與一般注意力機制不同,此注意力在二維空間上學習注意力權重。假設反複執行 T T T 步,則預測出一個序列字元 y = ( y 1 , … , y T ) y = (y_1, \dots, y_T) y=(y1,…,yT)。在 t t t 步的時候,有三個輸入:輸入特征圖,上一個隐藏狀态 s t − 1 s_{t-1} st−1,上一個預測的字元 y t − 1 y_{t-1} yt−1 .
首先,把 s t − 1 s_{t-1} st−1 從一個向量擴充為一個特征圖 S t − 1 S_{t-1} St−1,大小為 ( V , H p , W p ) (V, H_p, W_p) (V,Hp,Wp),其中 V V V 是 RNN 的隐藏層大小,設定為256.
S t − 1 = e x p a n d _ d i m ( s t − 1 , H p , W p ) S_{t-1} = expand\_dim(s_{t-1}, H_p, W_p) St−1=expand_dim(st−1,Hp,Wp)
然後,計算注意力向量 α t \alpha_t αt :
e t = W t × tanh ( W s × S t − 1 + W f × F + b ) e_t = W_t × \tanh(W_s × S_{t-1} + W_f × F + b) et=Wt×tanh(Ws×St−1+Wf×F+b)
α t ( i , j ) = e x p ( e t ( i , j ) ) / ∑ i ′ = 1 H p ∑ j ′ = 1 W p e x p ( e t ( i ′ , j ′ ) ) \alpha_t(i, j) = exp(e_t(i, j)) / \sum_{i' = 1}^{H_p} \sum_{j'=1}^{W_p} exp(e_t(i', j')) αt(i,j)=exp(et(i,j))/i′=1∑Hpj′=1∑Wpexp(et(i′,j′))
其中 e t e_t et 和 α t \alpha_t αt 大小為 ( H p , W p ) (H_p, W_p) (Hp,Wp) 。 W t , W s , W f , b W_t, W_s, W_f, b Wt,Ws,Wf,b 是訓練權重和偏置。
接下來,我們可以通過将注意力權重應用于原始特征圖 F F F 來擷取步驟 t t t 的觀察 g t g_t gt
g t = ∑ i = 1 H p ∑ j = 1 W p α t ( i , j ) × F ( i , j ) g_t = \sum_{i=1}^{H_p}\sum_{j=1}^{W_p} \alpha_t (i,j) × F(i,j) gt=i=1∑Hpj=1∑Wpαt(i,j)×F(i,j)
RNN 的輸入 r t r_t rt 是把 g t g_t gt 和上一個預測字元的字元嵌入 y t − 1 y_{t-1} yt−1 級聯起來的
f ( y t − 1 ) = W y × o n e h o t ( y t − 1 , N c ) + b y f(y_{t-1}) = W_y × onehot (y_{t-1}, N_c) + b_y f(yt−1)=Wy×onehot(yt−1,Nc)+by
r t = c o n c a t ( g t , f ( y t − 1 ) ) r_t = concat(g_t, f(y_{t-1})) rt=concat(gt,f(yt−1))
其中 W y , b y W_y, b_y Wy,by 是訓練的線性轉換的權重和偏置。 N c N_c Nc 是類别數,文中是 37。
把 r t r_t rt 和上一個隐藏狀态 s t − 1 s_{t-1} st−1 輸入到 RNN 中,
( x t , s t ) = r n n ( s t − 1 , r t ) (x_t, s_t) = rnn(s_{t-1}, r_t) (xt,st)=rnn(st−1,rt)
最後,使用線性轉換和 softmax 函數計算在 t t t 步的條件機率
p ( y t ) = s o f t m a x ( W o × x t + b o ) p(y_t) = softmax(W_o × x_t + b_o) p(yt)=softmax(Wo×xt+bo)
y t ∼ p ( y t ) y_t \sim p(y_t) yt∼p(yt)
Standalone Recognition Model(獨立識别子產品)
Label Generation
将多邊形轉換為覆寫此多邊形的最小面積的矩形。給定 proposal r r r ,找到與之最比對的水準矩形,也就可以找到對應的多邊形和字元位置。然後,比對的多邊形和字元框将移動并調整其大小,以使 proposa l與 H×W 的目标圖對齊,如下所示:
B x = ( B x 0 − m i n ( r x ) ) × W / ( m a x ( r x ) − m i n ( r x ) ) B_x = (B_{x_0} - min(r_x)) × W / (max(r_x) - min(r_x)) Bx=(Bx0−min(rx))×W/(max(rx)−min(rx))
B y = ( B y 0 − m i n ( r y ) ) × W / ( m a x ( r y ) − m i n ( r y ) ) B_y = (B_{y_0} - min(r_y)) × W / (max(r_y) - min(r_y)) By=(By0−min(ry))×W/(max(ry)−min(ry))
( B x , B y ) (B_x, B_y) (Bx,By) 和 ( B x 0 , B y 0 ) (B_{x0}, B_{y0}) (Bx0,By0) 分别是更新後的和原始的多邊形的頂點, ( r x , r y ) (r_x, r_y) (rx,ry) 是proposal r r r 的頂點。
目标文本執行個體圖
字元定位圖
Optimization
L = L r p n + α 1 L r c n n + α 2 L m a s k L = L_{rpn} + \alpha_1 L_{rcnn} + \alpha_2 L_{mask} L=Lrpn+α1Lrcnn+α2Lmask
L m a s k L_{mask} Lmask 包含文本執行個體分割損失 L i n s L_{ins} Lins ,字元分割損失 L s e g L_{seg} Lseg 和序列識别損失 L s e q L_{seq} Lseq
L m a s k = L i n s + β 1 L s e g + β 2 L s e q L_{mask} = L_{ins} + \beta_1 L_{seg} + \beta_2 L_{seq} Lmask=Lins+β1Lseg+β2Lseq
L i n s L_{ins} Lins 是一個平均二進交叉熵損失, L s q g L_{sqg} Lsqg 是權重空間 soft-max 損失
L s e g = − 1 N ∑ n = 1 N W n ∑ c = 0 N c − 1 Y n , c l o g ( e X n , c ∑ k = 0 N c − 1 e X n , k ) ) L_{seg} = - \frac{1}{N} \sum_{n=1}^{N}W_n\sum_{c=0}^{N_c-1}Y_{n,c}log(\frac{e^{X_{n,c}}}{\sum_{k=0}^{N_c -1}e^{X_{n,k}}})) Lseg=−N1n=1∑NWnc=0∑Nc−1Yn,clog(∑k=0Nc−1eXn,keXn,c))
N c N_c Nc 是類别數, N N N 是每個圖的像素的數量, Y Y Y 是輸出圖 X X X 對應的真實值。使用權重 W W W 平衡正樣本和背景樣本的的損失值。使背景像素的數量為 N n e g N_{neg} Nneg,背景類索引為 0,權重可以計算:
W i = { 1 if Y i , 0 = 1 , N n e g / ( N − N n e g ) otherwise W_i = \begin{cases} 1 & \text{if $Y_{i,0}$ = 1}, \\ N_{neg} / (N - N_{neg}) & \text{otherwise} \end{cases} Wi={1Nneg/(N−Nneg)if Yi,0 = 1,otherwise
L s e q L_{seq} Lseq 如下計算:
L s e q = − ∑ t = 1 T log ( P ( y t ) ) L_{seq} = - \sum_{t= 1}^{T} \log(P(y_t)) Lseq=−t=1∑Tlog(P(yt))
T T T 是序列的長度
α 1 , α 2 , β 1 \alpha_1, \alpha_2, \beta_1 α1,α2,β1 設定為 $1.0, $ β 2 \beta_2 β2 設定為 0.2 0.2 0.2
Inference
首先,輸入一張測試圖檔,獲得 Faster R-CNN 的輸出,使用 NMS 過濾掉多餘的候選框;然後,将剩下的候選框輸入到 mask 分支生成文本執行個體圖,字元圖,文本序列;最後可以通過計算在文本執行個體圖中的文本區域的輪廓得到預測的多邊形。除此之外,文本序列也可以使用解碼字元分割圖和 SAM 的輸出獲得。
另外,在用詞典進行推理時,提出了一種權重編輯距離算法來尋找最佳比對詞。
Decoding
使用 pixel voting 算法把預測的字元圖解碼為字元序列。首先,以 0.75 的門檻值,二值化背景圖。然後根據二值圖中的連接配接區域獲得全部字元區域,計算所有字元圖中的每個區域的均值,這個值就是這個字元串的置信度。平均值最大的字元類将配置設定給該區域。之後,根據英語的寫作習慣從左到右進行分組。
SAM 兩種解碼方式:貪婪算法和 Beam Search
因為有兩個識别結果,可以選擇置信度高的一個作為最終的識别結果
Weighted Edit Distance