1. 程式人生 > >選字驗證碼破解思路:CTPN - 自然場景文字檢測

選字驗證碼破解思路:CTPN - 自然場景文字檢測

前言

    最近準備極驗3代,選字驗證碼的破解。之前用CNN實現端到端的字元型驗證碼破解已滿足不了需求了,我以為破解選字驗證碼關鍵步驟有三:1.圖片文字的識別;2.字元座標的識別;3.字序的識別。設計的技術有,圖片識別技術、特徵位置檢測和NLP處理。本文作為關鍵技術之一,用於收錄轉載,感謝本篇論文的翻譯者!

目錄

  • 作者和相關連結
  • 幾個關鍵的Idea出發點
  • 方法概括
  • 方法細節
  • 實驗結果
  • 總結與收穫點

作者和相關連結

 

幾個關鍵的Idea出發點

  • 文字檢測和一般目標檢測的不同——文字線是一個sequence(字元、字元的一部分、多字元組成的一個sequence),而不是一般目標檢測中只有一個獨立的目標。這既是優勢,也是難點。優勢體現在同一文字線上不同字元可以互相利用上下文,可以用sequence的方法比如RNN來表示。難點體現在要檢測出一個完整的文字線,同一文字線上不同字元可能差異大,距離遠,要作為一個整體檢測出來難度比單個目標更大——因此,作者認為預測文字的豎直位置(文字bounding box的上下邊界)比水平位置(文字bounding box的左右邊界)更容易。

  • Top-down(先檢測文字區域,再找出文字線)的文字檢測方法比傳統的bottom-up的檢測方法(先檢測字元,再串成文字線)更好。自底向上的方法的缺點在於(這點在作者的另一篇文章中說的更清楚),總結起來就是沒有考慮上下文,不夠魯棒,系統需要太多子模組,太複雜且誤差逐步積累,效能受限。

  • RNN和CNN的無縫結合可以提高檢測精度。CNN用來提取深度特徵,RNN用來序列的特徵識別(2類),二者無縫結合,用在檢測上效能更好。

方法概括

  • 基本流程如Fig 1, 整個檢測分六步:

    • 第一,用VGG16的前5個Conv stage(到conv5)得到feature map(W*H*C)
    • 第二,在Conv5的feature map的每個位置上取3*3*C的視窗的特徵,這些特徵將用於預測該位置k個anchor(anchor的定義和Faster RCNN類似)對應的類別資訊,位置資訊。
    • 第三,將每一行的所有視窗對應的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表示的是bounding box的高度和中心的y軸座標(可以決定上下邊界),k個side-refinement表示的bounding box的水平平移量。這邊注意,只用了3個引數表示迴歸的bounding box,因為這裡默認了每個anchor的width是16,且不再變化(VGG16的conv5的stride是16)。迴歸出來的box如Fig.1中那些紅色的細長矩形,它們的寬度是一定的。
    • 第六,用簡單的文字線構造演算法,把分類得到的文字的proposal(圖Fig.1(b)中的細長的矩形)合併成文字線

Fig. 1: (a) Architecture of the Connectionist Text Proposal Network (CTPN). We densely slide a 3×3 spatial window through the last convolutional maps (conv5 ) of the VGG16 model [27]. The sequential windows in each row are recurrently connected by a Bi-directional LSTM (BLSTM) [7], where the convolutional feature (3×3×C) of each window is used as input of the 256D BLSTM (including two 128D LSTMs). The RNN layer is connected to a 512D fully-connected layer, followed by the output layer, which jointly predicts text/non-text scores, y-axis coordinates and side-refinement offsets of k anchors. (b) The CTPN outputs sequential fixed-width fine-scale text proposals. Color of each box indicates the text/non-text score. Only the boxes with positive scores are presented. 

方法細節

  • Detecting Text in Fine-scale proposals

    • k個anchor尺度和長寬比設定:寬度都是16,k = 10,高度從11~273(每次除於0.7)
    • 迴歸的高度和bounding box的中心的y座標如下,帶*的表示是groundTruth,帶a的表示是anchor

    • score閾值設定:0.7 (+NMS)
    • 一般的RPN和採用本文的方法檢測出的效果對比

  • Recurrent Connectionist Text Proposals

    • RNN型別:BLSTM(雙向LSTM),每個LSTM有128個隱含層
    • RNN輸入:每個滑動視窗的3*3*C的特徵(可以拉成一列),同一行的視窗的特徵形成一個序列
    • RNN輸出:每個視窗對應256維特徵
    • 使用RNN和不適用RNN的效果對比,CTPN是本文的方法(Connectionist Text Proposal Network)

  • Side-refinement

    • 文字線構造演算法(多個細長的proposal合併成一條文字線)
      • 主要思想:每兩個相近的proposal組成一個pair,合併不同的pair直到無法再合併為止(沒有公共元素)
      • 判斷兩個proposal,Bi和Bj組成pair的條件:
        1. Bj->Bi, 且Bi->Bj。(Bj->Bi表示Bj是Bi的最好鄰居)
        2. Bj->Bi條件1:Bj是Bi的鄰居中距離Bi最近的,且該距離小於50個畫素
        3. Bj->Bi條件2:Bj和Bi的vertical overlap大於0.7
    • 固定要regression的box的寬度和水平位置會導致predict的box的水平位置不準確,所以作者引入了side-refinement,用於水平位置的regression。where xside is the predicted x-coordinate of the nearest horizontal side (e.g., left or right side) to current anchor. x∗ side is the ground truth (GT) side coordinate in x-axis, which is pre-computed from the GT bounding box and anchor location. cax is the center of anchor in x-axis. wa is the width of anchor, which is fixed, wa = 16 

    • 使用side-refinement的效果對比

實驗結果

  • 時間:0.14s with GPU
  • ICDAR2011,ICDAR2013,ICDAR2015庫上檢測結果

 

總結與收穫點

  • 這篇文章的方法最大亮點在於把RNN引入檢測問題(以前一般做識別)。文字檢測,先用CNN得到深度特徵,然後用固定寬度的anchor來檢測text proposal(文字線的一部分),並把同一行anchor對應的特徵串成序列,輸入到RNN中,最後用全連線層來分類或迴歸,並將正確的text proposal進行合併成文字線。這種把RNN和CNN無縫結合的方法提高了檢測精度。