文本檢測算法CTPN

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與Faster RCNN對比
如上圖所示,作圖爲RPN,右圖爲CTPN的網絡結構。可以看到,CTPN本身就是RPN,唯一不同的是加入了雙向LSTM獲取時序方向的信息,使得模型可以序列性的預測文本的小片。當然這裏的不同之處主要有以下幾點

原始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且最大時間長度 Tmax=WT_{max} = W 的數據流輸入雙向LSTM,學習每一行的序列特徵。雙向LSTM輸出 [公式] ,再經Reshape恢復形狀:
    Reshape:N9CHW(NH)W9CReshape:N\ast 9C\ast H\ast W\rightarrow (NH)\ast W\ast 9C
    該特徵既包含空間特徵,也包含了LSTM學習到的序列特徵。
  • 然後經過“FC”卷積層,變爲 [公式] 的特徵
  • 最後經過類似Faster R-CNN的RPN網絡,獲得text proposals,如圖2-b。

爲何使用雙向LSTM?

文本線構造算法

在上一個步驟中,已經獲得了圖7所示的一串或多串text proposal,接下來就要採用文本線構造辦法,把這些text proposal連接成一個文本檢測框。
圖一三十三歲三十三歲三十三歲

圖1
爲了說明問題,假設某張圖有圖1所示的2個text proposal,即藍色和紅色2組Anchor,CTPN採用如下算法構造文本線: * 按照水平 [公式] 座標排序Anchor * 按照規則依次計算每個Anchor [公式] 的 [公式] ,組成 [公式] * 通過 [公式] 建立一個Connect graph,最終獲得文本檢測框 * 下面詳細解釋。假設每個Anchor index如綠色數字,同時每個Anchor Softmax score如黑色數字。 文本線構造算法通過如下方式建立每個Anchor [公式] 的 [公式] : 正向尋找: * 沿水平正方向,尋找和 [公式] 水平距離小於50的候選Anchor * 從候選Anchor中,挑出與 [公式] 豎直方向 [公式] 的Anchor * 挑出符合條件2中Softmax score最大的 [公式]

再反向尋找:

  • 沿水平負方向,尋找和 [公式] 水平距離小於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就講解這麼多,具體還需要閱讀論文,閱讀代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章