天天看點

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

多種文本檢測算法性能對比及算法介紹

(https://blog.csdn.net/qq_39707285/article/details/108754444)

Detecting Text in Natural Image with Connectionist Text Proposal Network

  • 1. 簡單介紹
    • 1.1 關鍵點
    • 1.1 性能表現
  • 2. CTPN
    • 2.1 Detecting Text in Fine-scale Proposals
    • 3.2 文本候選框連接配接RNN
    • 3.3 精修邊界
    • 3.4 損失函數
    • 3.5 訓練細節
  • 4. 實驗結果
    • 4.1 在Faster-RCNN中加入fine-scale
  • 5. 結論

CTPN于2016年發表于ECCV,該論文是文本檢測算法中很經典的一個,是一種基于回歸的算法,提出了固定定寬的anchor機制,使用CNN+RNN,能夠準确的定位水準文本。

1. 簡單介紹

1.1 關鍵點

  1. 把定位不同比例的文本簡化成定位固定寬度的文本,提出垂直anchor機制
  2. 候選框後無縫連接配接RNN,端到端可訓練

1.1 性能表現

  1. 差別于之前的bottom-up的算法,不需要多個後處理過濾層,能夠檢測多尺度、多語言的文本
  2. 在ICDAR-2013和ICDAR-2015上分别取得0.88和0.61的F-measure分數,當時表現最優

2. CTPN

這一部分,詳細的講解CTPN的設計細節,主要包括三個關鍵部分:

  1. 在fine-scale的候選框中檢測文本
  2. 文本候選框加入循環神經網絡
  3. 精修邊界

2.1 Detecting Text in Fine-scale Proposals

先簡單回顧一下目标檢測,較早的目标檢測算法通過使用滑動視窗,一個視窗隻能對應一種尺度的目标,是以就需要使用不同尺度的滑動視窗來檢測不同尺度的目标。在Faster-RCNN中提出了RPN網絡,使用單尺度的視窗去識别不同尺度的目标,關鍵思路是,通過使用anchor機制,一個單一的anchor可以預測範圍很廣的尺度和寬高比的目标。

但是該方法直接用于文本檢測卻會出現很多問題,因為文本與一般目标檢測相比有着本質上的差別,後者通常有一個定義良好的封閉邊界和中心,甚至可以從它的一部分推斷出整個對象,文本是一個沒有明顯封閉邊界的序列,它可以包括筆劃、字元、單詞、文本行和文本區域等多個層次的元件,這些元件之間沒有明顯的差別。

文本檢測是在單詞或文本行級别定義的,是以,通過将其定義為單個對象,很容易進行錯誤的檢測,是以直接預測文本行或者單詞是困難的,也不現實,很難得到一個較好的準确率,就像圖2中例子,簡單實用RPN去檢測文本,效果很差。

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

通過觀察發現了文本的一個獨特屬性,改屬性可以推廣到任意的文本上。RPN很難準确的檢測誰水準單詞,是因為單詞中的每個字元都是孤立的或分開的,很難找到一個詞的開始和結束位置,顯然,文本行是一個序列,它是文本和泛型對象之間的主要差別。将文本行視為一系列精細的文本提案,其中每個提案通常代表文本行的一小部分,例如16像素寬的文本片段,每個提議可以包括一個或多個筆畫、一個字元的一部分、一個或多個字元等,通過确定、水準位置,僅預測每個提案的垂直位置會更準确,這與RPN預測4個目标坐标相比,CTPN隻需要預測一個是否是文本的score和一個y軸方向的定位就可以了。

CTPN使用一個全卷積神經網絡,輸入圖檔尺寸可以任意大小,使用VGG16作為backbone。CTPN檢測文本行通過在提取的特征圖中滑動anchor,輸出一系列固定規模的候選框(例如,固定16像素寬度)的文本候選框,如圖1(b)所示。

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

CTPN中定義固定寬度為16像素(原始圖檔中的16像素)的文本提議框,在conv5上使用3×3卷積核,步長16像素,在conv5上就是1,然後設計k個垂直anchors,用來預測每個提議框的y坐标,這k個anchors,水準坐标相同,寬度都是16,有k個不同的高度。在以下的實驗中,k設定為10,高度從11到273個像素(每次除以0.7),計算垂直坐标的公式如下:

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

v = { v c , v h } v=\{v_c,v_h\} v={vc​,vh​}表示預測的坐标, v ∗ = { v c ∗ , v h ∗ } v^*=\{v^*_c,v^*_h\} v∗={vc∗​,vh∗​}表示GT, c y a c^a_y cya​表示anchor的中心坐标, h a h^a ha表示anchor的高度。每一個預測文本候選框size為 h×16,如圖1(b)中。

整體的檢測處理流程總結如下:

  1. 給定一張圖檔,通過VGG16,得到conv5,特征圖尺寸為 W × H × C W×H×C W×H×C
  2. 使用3×3的視窗在conv5上滑動,每個視窗通過 3 × 3 × C 3×3×C 3×3×C的卷積操作得到預測值。對于每一個預測,水準的位置和k個anchors的位置是固定的,它可以通過将conv5中的空間視窗位置映射到輸入圖像來預先計算。
  3. 輸出的是text/non-text score和k個anchors的y軸坐标(v)
  4. 預測score大于0.7的候選框再通過NMS處理後輸出

3.2 文本候選框連接配接RNN

為了提高定位準确率,把完整的行文本劃分成立一連串固定寬度的小框,這樣對整個網絡預測來說是不魯棒的,而且對于像文本的如 窗戶,磚塊,樹葉等等,很容易導緻假陽,一些檢測例子如圖3(top)所示。

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

文本具有很強的序列特征,其中有序的上下文資訊是做出可靠決策的關鍵,是以利用文本的上下文資訊很重要。為了能夠使用到文本的上下文資訊,并且可以無縫的連接配接CNN,于是RNN提供了一種自然而然的選擇,可以使用其隐藏層對這些資訊進行循環編碼。為此,在conv5上設計一個RNN層,它以每個視窗的演化特征為順序輸入,在隐藏層Ht中循環更新其内部狀态,其公式如下:

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

X t ⊆ R 3 × 3 × C X_t \subseteq R^{3×3×C} Xt​⊆R3×3×C是conv5特征圖上第t個滑動視窗(共3×3個),滑動視窗從左至右以此滑過,每行産生 t = 1 , 2 , . . . , W t=1,2,...,W t=1,2,...,W的序列特征, W W W是conv5層的寬度, H t H_t Ht​是一種循環的内部狀态,它由目前輸入 ( X t ) (X_t) (Xt​)和 H t − 1 H_{t-1} Ht−1​中編碼的先前狀态共同計算得出。使用非線性函數ψ計算遞歸,該函數定義了遞歸模型的精确形式。

LSTM是專門為解決消失梯度問題而提出的,通過引入三個附加的乘法門:輸入門、遺忘門和輸出門。Bi-LSTM能夠在兩個方向上對循環上下文進行編碼,進而接收字段能夠覆寫整個圖像寬度,是以最後使用雙向LSTM。是以,RNN隐藏層的内部狀态通過循環連接配接通路所有先前視窗掃描的順序上下文資訊。

H t H_t Ht​中的内部狀态映射到下面的FC層和輸出層,用于計算第t個建議的預測,這樣就完美的在CNN後無縫加入了RNN,達到了端到端可訓練的效果,而且沒有額外的資源消耗,結果如圖3所示,很明顯,它大大減少了錯誤檢測,同時檢測出了許多包含非常弱文本資訊的缺失文本建議。

3.3 精修邊界

通過以上處理之後,再對輸出的結果進行合并,合并流程如下:

  1. 對于每個候選框 B i B_i Bi​,定義一個鄰居 B j B_j Bj​,寫作 B j − > B i B_j->B_i Bj​−>Bi​,當滿足:

    (1) B j B_j Bj​是 B i B_i Bi​水準方向距離最近的鄰居;

    (2)它們之間的距離小于50個像素;

    (3)它們的垂直相交超過0.7

  2. 兩個候選框組合成一對,即 B j − > B i B_j->B_i Bj​−>Bi​且 B i − > B j B_i->B_j Bi​−>Bj​

    然後通過順序連接配接具有相同候選對來構造文本行。

通過固定寬度的檢測方法連接配接RNN,在垂直方向的定位非常準确,但在水準方向上可能會出現一些問題,例如,當水準兩側的文本建議沒有被GT文本線區域完全覆寫,或者一些側邊候選框被丢棄(例如,具有低文本分數),如圖4所示,這些情況在通用目标檢測中可能不太重要,但在文本檢測中影響很大。

為了解決這個問題,提出了side-refinement的方法,能夠準确的算出每個anchor/proposal在水準兩側的偏移量,類似于預測y方向坐标,定義偏移量如下:

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

x s i d e x_{side} xside​是目前anchor最近水準側的預測x坐标(例如左側或右側), x s i d e ∗ x^*_{side} xside∗​是GT,根據GT bounding box和anchor的位置可以計算出來, c x a c^a_x cxa​是anchor的水準方向中心, w x a w^a_x wxa​是anchor的寬度,是固定的,等于16。當将一系列檢測到的精細文本建議連接配接到一條文本行中時,兩側候選框被定義為開始和結束候選,隻使用兩側的候選框,使用side-refinement後的提升效果如圖4所示,該方法大概提升2%左右的性能。

3.4 損失函數

CTPN共三個輸出:

  1. text/non-text scores
  2. 垂直坐标 v = { v c , v h } v=\{v_c,v_h\} v={vc​,vh​}
  3. side-refinement偏移量 o o o

分别用 L s c l L^{cl}_s Lscl​、 L v r e L^{re}_v Lvre​、 L o r e L^{re}_o Lore​代表各自的loss,合在一起計算方式如下:

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

每個anchor都是一個訓練樣本, i i i是mini-batch中anchor的索引, s i s_i si​是第i個anchor預測為文本的機率, s i ∗ = { 0 , 1 } s^*_i=\{0,1\} si∗​={0,1}代表GT, j j j代表有效的anchor索引,有效anchor指的是為: s j ∗ = 1 s^*_j=1 sj∗​=1或者與GT的IoU>0.5。

v j v_j vj​和 v j ∗ v^*_j vj∗​分别指的是y方向上預測的坐标和GT。

k k k是side-anchor的索引,side-anchor指的是距GT邊界框的左側或右側的水準距離(例如,32像素)内的一組anchors。 o k o_k ok​和 o k ∗ o^*_k ok∗​分别指的是與第k個anchor相關的x軸上的預測和GT偏移量。

L s c l L^{cl}_s Lscl​使用softmax loss去區分text/non-text, L v r e L^{re}_v Lvre​和 L o r e L^{re}_o Lore​回歸loss使用smooth L1去計算。

λ 1 \lambda_1 λ1​和 λ 2 \lambda_2 λ2​用來平衡loss,設定為1.0和2.0。 N s N_s Ns​、 N v N_v Nv​和 N o N_o No​是标準化參數,分别代表 L s c l L^{cl}_s Lscl​、 L v r e L^{re}_v Lvre​和 L o r e L^{re}_o Lore​中使用的anchors總數量。

3.5 訓練細節

pass

4. 實驗結果

4.1 在Faster-RCNN中加入fine-scale

文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論
文本檢測算法:CTPN1. 簡單介紹2. CTPN4. 實驗結果5. 結論

5. 結論

CTPN直接在卷積圖中檢測到一系列精細文本建議中的文本行。設計了垂直anchor機制,聯合預測每個提案的精确位置和文本/非文本分數,這是實作文本精确定位的關鍵。提出了一個網絡RNN層,它完美地連接配接了連續的文本建議,允許它探索有意義的上下文資訊。在這些技術上不太強大的檢測能力,具有很強的檢測能力。CTPN通過在五個基準上實作最先進的性能,每張圖像0.14s的運作時間。

繼續閱讀