Weilin Huang——【AAAI2016】Reading Scene Text in Deep Convolutional Sequences
目錄
- 作者和相關鏈接
- 方法概括
- 創新點和貢獻
- 方法細節
- 實驗結果
- 問題討論
- 總結與收獲點
- 參考文獻
作者和相關鏈接
方法概括
- 解決問題:單詞識別
- 主要流程:maxout版的CNN提取特征,RNN(LSTM)進行分類,CTC對結果進行調整。整個流程端到端訓練和測試,和白翔的CRNN(參考文獻1)方法幾乎一樣,以下為流程圖
創新點和貢獻
-
idea的出發點——把單詞識別問題看成是sequence labelling的問題
- 傳統的OCR流程:
- 字符級分割
- 字符分類器
- 后處理(語言模型)
- 傳統的OCR流程:
-
- 傳統OCR方法的問題:
- 字符分割難度大,准確率受限 → 影響識別的整體性能 —— 不用分割(當做序列識別問題)
- 忽略了上下文信息 → 削弱識別的魯棒性和可靠性 —— 用RNN做分類器可以充分利用上下文信息
- 一般用低級(像素級)或中級特征(HOG,strokelet之類)→ 魯棒性差 —— 用CNN學習魯棒的特征(CNN的區域卷積具備平移不變形,對形變具有魯棒性)
- 傳統OCR方法的問題:
-
方法的優點
- 能正確識別有歧義的文字圖像
- 能正確識別形變大的文字圖像
- 不用字典(可以識別新詞,任意沒有語義的字符串)
- 效果好!(IC03-50 = 97, IC03-FULL = 93.8,SVT-50 = 93.5)
方法細節
-
maxout CNN
-
maxout激活函數和ReLU激活函數的對比
- ReLU只是簡單的截斷(小於0),Maxout則是一個分段線性函數(可以擬合任何的凸函數)
- 參數個數:ReLU只有一套參數(1個W和b),maxout有多套參數(k個W和k個b)
-
-
-
maxout的示例
- maxout實際上就是把濾波器分成k=2(本例中取2)組,不同組的神經元輸出互相一一對應,取其中最大的作為最后的輸出
- 如下圖所示,W1j和W2j是兩組濾波器,每組是64個濾波器,上下兩個濾波器互相對應,分別與上一層的feature map對應位置進行卷積,取其中大的為新的輸出。例如藍色和橙色,藍色得到的結果比橙色大,故最后8*8*64的輸出的feature map對應的位置為藍色(藍色濾波器卷積的結果),灰色和紅色中紅色更大。
-
-
-
本文的maxout CNN 網絡結構
- 五個卷積層,前四層提特征,最后一層分類器(實際上沒用?),沒有池化層,沒有全連接層
- 第四層的128維即為CNN特征(要輸入到RNN中的)
- 前3層的maxout分為2組,后面兩層為4組。
-
-
RNN(LSTM)
-
- LSTM為雙向LSTM
- xi就是CNN的128維特征,T表示單詞的滑窗個數(高度歸一化到32,步長為1進行滑窗,每個窗口得到一個長度為128的cnn特征——xi)
- pi是一個長度為37的概率向量(因為不考慮字母的大小寫共36類,加1個背景類,共37類
識別(從CNN特征到最后的單詞輸出)流程
-
- 流程圖
-
- RNN對每個位置的窗口進行識別:X = (x1, x2, ..., xT) → P = (p1, p2, ..., pT)
- CTC得到單詞輸出:P = (p1, p2, ..., pT) → L = (l1,l2,..., lk) ,例如,L = ‘apartments'
- CTC的全稱:connectionist temporal classification (參考文獻2)
- CTC的公式
- 其中,π表示某長度為T的某一個序列,例如,π = ’a__pp__aart_mm_een_t_s__'
- B表示簡單的去掉空格和去重操作,例如B(π) = B(’a__pp__aart_mm_een_t_s__') = apartments
- P(π|p)=π的每個位置上屬於某個字符的概率的乘積:P(π|p) = P(π1|p) × P(π2|p) ×P(π3|p) × .... ×P(πT|p)
-
-
- CTC實際上是用動態規划方法算出所有可能的串的概率(每個位置的概率乘積),然后選擇其中概率最大的串作為最后輸出
-
實驗結果
-
識別結果(表格帶字典,右圖不帶字典,為任意字符串)
-
結果示例
問題討論
- maxout 的CNN中的最后一個softmax層似乎沒用到?直接用RNN做的分類,整個過程也是端到端的訓練
總結與收獲點
- 本文方法和白翔的CRNN的不同點在於:第一,白翔的CNN是普通的CNN,本文CNN用的是maxout的CNN。第二,白翔的CNN最后用了一個Map-to-Sequence把CNN最后一層的feature map上的每個滑動窗口直接拉成一列一列的特征輸出到RNN中,而這篇文章的CNN是原圖中的每個32*32個大小的滑動窗口,直接得到第四層的一個卷積向量作為該窗口的特征(最后一層用的濾波器大小和該窗口對應的feature map大小一樣,故得到1*1的值),雖然實際上大同小異。其他關於RNN和CTC的用法幾乎一致,白翔的文章還提到了用字典和不用字典的兩種識別策略。
- 本篇最大的亮點:把識別問題看成sequence labelling問題,把CNN和RNN放在一個網絡中進行端到端訓練(這一點也和白翔他們一樣)
參考文獻
- Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
-
Graves, A.; Fernandez, S.; Gomez, F.; and Schmidhuber, J. 2006. Connectionist temporal classification: Labelling unsegmented sequence data with recurrent neural networks. IEEE International Conference on Machine Learning (ICML)