Detecting Text in Natural Image with Connectionist Text Proposal Network
OCR的第一步是文本檢測,首先要定位文字的位置,即文字檢測,CTPN是文本檢測領域經典算法。
論文地址:https://arxiv.org/abs/1609.03605
CTPN是在ECCV 2016提出的一種文字檢測算法。CTPN結合CNN與LSTM深度網絡,能有效的檢測出複雜場景的橫向分佈的文字,效果如圖1,是目前比較好的文字檢測算法。由於CTPN是從Faster RCNN改進而來,本文默認讀者熟悉CNN原理和Faster RCNN網絡結構。
主要創新點
- 文本檢測可以當層目標檢測來做,Faster RCNN有效果,但是長寬比不好設定,文本長寬變化很大,不好檢測,所以將將大的文本框切分爲一系列寬度固定的小文本框進行檢測,這樣在檢測過程中只需要對文本的高度進行先驗性的設置anchor。
- 作者認爲文本具有時序性,即和閱讀習慣一直,從左到右。因此作者加入RNN獲取這種語義性。
- 後處理算法:文本連接算法
標籤構造
如上圖所示,給定一個文本的標註框,這裏爲(x, y, w, h)。作者沿着水平方向進行切分,偏移爲16個像素。這樣就得到了一系列的文本小片。這裏左右標記爲紅色的小片,作者將他們(落在左右兩端50像素以內的小片)作爲side refinement時候的標籤,用來約束網絡對文本起始和終止點的矯正。至於這裏取偏移爲16的原因,是因爲conv5的stride爲16,相當於feature map中的一個像素對應標籤的16的寬度。當然,這裏關於感受野,conv5中的感受野爲228x228,因此文本行anchor的高度最大不能超過228,如果超出則網絡不能很好的進行預測。
CTPN網絡結構
原始CTPN只檢測橫向排列的文字。CTPN結構與Faster R-CNN基本類似,但是加入了LSTM層。假設輸入爲B張圖片
- 首先VGG提取特徵,獲得大小爲 BxCxHxW的conv5 feature map。
- 之後在conv5上做 [公式] 的滑動窗口,即每個點都結合周圍3x3區域特徵獲得一個長度爲 [公式] 的特徵向量。輸出 Bx9CxHxW的feature map,該特徵顯然只有CNN學習到的空間特徵。 注意這一步不是卷積,沒有計算過程。
- 再將這個feature map進行Reshape
Nx9CxHxW ->(NH)xWx9C - 然後以 Batch=NH且最大時間長度 的數據流輸入雙向LSTM,學習每一行的序列特徵。雙向LSTM輸出 [公式] ,再經Reshape恢復形狀:
該特徵既包含空間特徵,也包含了LSTM學習到的序列特徵。 - 然後經過“FC”卷積層,變爲 [公式] 的特徵
- 最後經過類似Faster R-CNN的RPN網絡,獲得text proposals,如圖2-b。
爲何使用雙向LSTM?
文本線構造算法
在上一個步驟中,已經獲得了圖7所示的一串或多串text proposal,接下來就要採用文本線構造辦法,把這些text proposal連接成一個文本檢測框。
再反向尋找:
- 沿水平負方向,尋找和 [公式] 水平距離小於50的候選Anchor
- 從候選Anchor中,挑出與 [公式] 豎直方向 [公式] 的Anchor
- 挑出符合條件2中Softmax score最大的 [公式]
最後對比 [公式] 和 [公式] :
如果 [公式] ,則這是一個最長連接,那麼設置 [公式]
如果 [公式] ,說明這不是一個最長的連接(即該連接肯定包含在另外一個更長的連接中)。
訓練策略
由於作者沒有給出CTPN原始訓練代碼,所以此處僅能根據論文分析。
明顯可以看出,該Loss分爲3個部分:
- Anchor Softmax loss:該Loss用於監督學習每個Anchor中是否包含文本。 [公式] 表示是否是Groud truth。
- Anchor y coord regression loss:該Loss用於監督學習每個包含爲本的Anchor的Bouding box regression y方向offset,類似於Smooth L1 loss。其中 [公式] 是 [公式] 中判定爲有文本的Anchor,或者與Groud truth vertical IoU>0.5。
- Anchor x coord regression loss:該Loss用於監督學習每個包含文本的Anchor的Bouding box regression x方向offset,與y方向同理。前兩個Loss存在的必要性很明確,
說明一下,在Bounding box regression的訓練過程中,其實只需要注意被判定成正的Anchor,不需要去關心雜亂的負Anchor。這與Faster R-CNN類似。
總結
- 由於加入LSTM,所以CTPN對水平文字檢測效果超級好。
- 因爲Anchor設定的原因,CTPN只能檢測橫向分佈的文字,小幅改進加入水平Anchor即可檢測豎直文字。但是由於框架限定,對不規則傾斜文字檢測效果非常一般。
- CTPN加入了雙向LSTM學習文字的序列特徵,有利於文字檢測。但是引入LSTM後,在訓練時很容易梯度爆炸,需要小心處理。
改進思路
CTPN中的雙向LSTM過於笨重,因此我們需要思考如何替代它。發現有人使用conv1x7替代雙向LSTM,實驗可行。
CTPN的算法雖然是2016的算法,但是其針對水平長行的檢測現在也是工業級的,算法魯棒。而這個算法也是文字檢測領域對RPN的應用之一。CTPN就講解這麼多,具體還需要閱讀論文,閱讀代碼。