天天看點

CTPN論文簡介 - 自然場景文本檢測CTPN - 自然場景文本檢測

CTPN - 自然場景文本檢測

論文下載下傳連結

摘要

文字目标的特殊性,一個很大的先驗是,文字總是水準排列的。文字的特征總感覺展現在edge上。這也是一個限制,隻能檢測水準方向上的文字。

自然場景文字檢測的難點在于:小目标,遮擋,仿射畸變。文中使用VGG16,隻使用conv5,可能對小文字的檢測效果不好。

文本檢測和一般目标檢測的不同——文本線是一個sequence(字元、字元的一部分、多字元組成的一個sequence),而不是一般目标檢測中隻有一個獨立的目标。這既是優勢,也是難點。優勢展現在同一文本線上不同字元可以互相利用上下文,可以用sequence的方法比如RNN來表示。難點展現在要檢測出一個完整的文本線,同一文本線上不同字元可能差異大,距離遠,要作為一個整體檢測出來難度比單個目标更大。

是以,作者認為預測文本的豎直位置(文本bounding box的上下邊界)比水準位置(文本bounding box的左右邊界)更容易。

Top-down(先檢測文本區域,再找出文本線)的文本檢測方法比傳統的bottom-up的檢測方法(先檢測字元,再串成文本線)更好。自底向上的方法的缺點在于沒有考慮上下文,不夠魯棒,系統需要太多子子產品,太複雜且誤差逐漸積累,性能受限。

文章工作基于faster RCNN , 差別在于

  • 改進了rpn,anchor産生的window的寬度固定為3。
  • rpn後面不是直接接全連接配接+分類/回歸,而是再通過一個LSTM,再接全連接配接層。 坐标僅僅回歸一個y,而不是x1, y1, x2, y2
  • 添加 side-refinement offsets(可能這個就是4個回歸值中的其中2個)

本文亮點

  1. 本文中利用RNN和CNN的無縫結合可以提高檢測精度。CNN用來提取深度特征,RNN用來序列的特征識别(2類),二者無縫結合,用在檢測上性能更好。

具體的說,作者的基本想法就是去預測文本的豎直方向上的位置,水準方向的位置不預測。是以作者提出了一個vertical anchor的方法。與faster rcnn中的anchor類似,但是不同的是,vertical anchor的寬度都是固定好的了,論文中的大小是16個像素。而高度則從11像素到273像素變化,總共10個anchor.

同時,對于水準的文本行,其中的每一個文本段之間都是有聯系的,是以作者采用了CNN+RNN的一種網絡結構,檢測結果更加魯棒。RNN和CNN的無縫結合可以提高檢測精度。CNN用來提取深度特征,RNN用來序列的特征識别(2類),二者無縫結合,用在檢測上性能更好。

  1. 網絡結構為RPN,針對文字檢測的特點做了一些修改,最重要的有兩點
  • 一是改變了判斷正負樣本的方法,不同于物體檢測,文字檢測中proposal如果隻框住了一行文字中的幾個文字其實也算正樣本,而用IOU計算的話會被當成負樣本,是以判斷正負樣本隻需要計算proposal與ground truth高度的overlap就可以了。
  • 第二點是anchor的選取,既然我們判斷正負樣本的時候不考慮寬度,自然選anchor的時候也不用選擇不同寬度的了,隻需要固定寬度然後根據具體任務選擇幾個合适的高度就可以了。其他地方和RPN基本一樣。

檢測過程

整個檢測分六步:

  • 第一,首先,使用VGG16作為base net提取特征,得到conv5_3的特征作為feature map,大小是W×H×C;
  • 第二,然後在這個feature map上做滑窗,視窗大小是3×3。也就是每個視窗都能得到一個長度為3×3×C的特征向量。這個特征向量将用來預測和10個anchor之間的偏移距離,也就是說每一個視窗中心都會預測出10個text propsoal。
  • 第三,将每一行的所有視窗對應的3 * 3 * C的特征(W * 3 * 3 * C)輸入到RNN(BLSTM)中,得到W * 256的輸出;
  • 第四,将RNN的W * 256輸入到512維的fc層;
  • 第五,fc層特征輸入到三個分類或者回歸層中。

    第二個2k scores 表示的是k個anchor的類别資訊(是字元或不是字元)。第一個2k vertical coordinate和第三個k side-refinement是用來回歸k個anchor的位置資訊。2k vertical coordinate因為一個anchor用的是中心位置的高(y坐标)和矩形框的高度兩個值表示的,是以一個用2k個輸出。(注意這裡輸出的是相對anchor的偏移),k個side-refinement這部分主要是用來精修文本行的兩個端點的,表示的是每個proposal的水準平移量。這邊注意,隻用了3個參數表示回歸的bounding box,因為這裡預設了每個anchor的width是16,且不再變化(VGG16的conv5的stride是16)。回歸出來的box如Fig.1中那些紅色的細長矩形,它們的寬度是一定的。這是會得到密集預測的text proposal,是以會使用一個标準的非極大值抑制算法來濾除多餘的box。

  • 第六,用簡單的文本線構造算法,把分類得到的文字的proposal(圖Fig.1(b)中的細長的矩形)合并成文本線。
CTPN論文簡介 - 自然場景文本檢測CTPN - 自然場景文本檢測

方法細節

  1. Detecting Text in Fine-scale proposals
  • k個anchor尺度和長寬比設定:寬度都是16,k = 10,高度從11~273(每次除于0.7)
  • 回歸的高度和bounding box的中心的y坐标如下,帶*的表示是groundTruth,帶a的表示是anchor

    v c = ( c y − c y a ) / h a , v h = log ⁡ ( h / h a ) v_{c}=\left(c_{y}-c_{y}^{a}\right) / h^{a}, \qquad v_{h}=\log \left(h / h^{a}\right) vc​=(cy​−cya​)/ha,vh​=log(h/ha)

    v c ∗ = ( c y ∗ − c y a ) / h a , v h ∗ = log ⁡ ( h ∗ / h a ) v_{c}^{*}=\left(c_{y}^{*}-c_{y}^{a}\right) / h^{a}, \qquad v_{h}^{*}=\log \left(h^{*} / h^{a}\right) vc∗​=(cy∗​−cya​)/ha,vh∗​=log(h∗/ha)

  • score門檻值設定:0.7 (+NMS)
  • 一般的RPN和采用本文的方法檢測出的效果對比
    CTPN論文簡介 - 自然場景文本檢測CTPN - 自然場景文本檢測
  1. Recurrent Connectionist Text Proposals
  • RNN類型:BLSTM(雙向LSTM),每個LSTM有128個隐含層
  • RNN輸入:每個滑動視窗的33C的特征(可以拉成一列),同一行的視窗的特征形成一個序列
  • RNN輸出:每個視窗對應256維特征
  • 使用RNN和不适用RNN的效果對比,CTPN是本文的方法(Connectionist Text Proposal Network)
    CTPN論文簡介 - 自然場景文本檢測CTPN - 自然場景文本檢測
  1. Side-refinement
  • 文本線構造算法(多個細長的proposal合并成一條文本線)
  • 主要思想:每兩個相近的proposal組成一個pair,合并不同的pair直到無法再合并為止(沒有公共元素)
  • 判斷兩個proposal,Bi和Bj組成pair的條件:
    • Bj->Bi, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好鄰居)
    • Bj->Bi條件1:Bj是Bi的鄰居中距離Bi最近的,且該距離小于50個像素
    • Bj->Bi條件2:Bj和Bi的vertical overlap大于0.7
  • 固定要regression的box的寬度和水準位置會導緻predict的box的水準位置不準确,是以作者引入了side-refinement,用于水準位置的regression。

o = ( x s i d e − c x a ) / w a , o ∗ = ( x s i d e ∗ − c x a ) / w a o=\left(x_{s i d e}-c_{x}^{a}\right) / w^{a}, \quad o^{*}=\left(x_{s i d e}^{*}-c_{x}^{a}\right) / w^{a} o=(xside​−cxa​)/wa,o∗=(xside∗​−cxa​)/wa

使用side-refinement的效果對比

CTPN論文簡介 - 自然場景文本檢測CTPN - 自然場景文本檢測

訓練

對于每一張訓練圖檔,總共抽取128個樣本,64正64負,如果正樣本不夠就用負樣本補齊。這個和faster rcnn的做法是一樣的。

訓練圖檔都将短邊放縮到600像素。

總結

這篇文章的方法最大亮點在于把RNN引入檢測問題(以前一般做識别)。文本檢測,先用CNN得到深度特征,然後用固定寬度的anchor來檢測text proposal(文本線的一部分),并把同一行anchor對應的特征串成序列,輸入到RNN中,最後用全連接配接層來分類或回歸,并将正确的text proposal進行合并成文本線。這種把RNN和CNN無縫結合的方法提高了檢測精度。

問題

  • 沒有很好地處理多方向的文本行
  • 訓練的時候由于有regression和LSTM,需要小心控制梯度爆炸。
  • 正如文章所提的,這個網絡預測的是一些固定寬度的text proposal,是以真值也應該按照這樣來标注。但是一般資料庫給的都是整個文本行或者單詞級别的标注。是以需要把這些标注轉換成一系列固定寬度的box。

繼續閱讀