1. 程式人生 > >[論文閱讀] CTPN---Detecting Text in Natural Image with Connectionist Text Proposal Network

[論文閱讀] CTPN---Detecting Text in Natural Image with Connectionist Text Proposal Network

  • 這篇論文思路和Faster RCNN是差不多的。總體來說,就是先通過RPN(Region Proposal Network)來提取proposal,然後再對提取得到的proposal進行classification。
  • 文章對Faster RCNN有以下幾點改進:
    • Faster RCNN中使用的3種size和3種長寬比組合的9種anchor,但是CTPN中,他固定了anchor為16px(vgg16, 因為有4個pooling 層),而只是設定了10種高的值。這樣是結合了text detection的特點,一般都是細長的結構。
    • 再得到Feature map之後,我們通過一個BD-LSTM結構去提取每個pixel對應的Feature。這樣做是為了利用global information。他將一行的pixel看成一個序列輸入給BD-LSTM去提取Feature。得到BD-LSTM的輸出以後,我們再去得到每個anchor的score以及對應的anchor的座標值。
    • 還有一個contribution是他對水平座標還做了一定的微調。具體的公式如下所示:
      o = (
      x s i d e c
      x a
      ) / w a , o = ( x s i d e c x a ) / w a

      這裡面o代表的predict, o 代表的是GT。 x s i d e 代表的是未修正的預測的anchor的座標, x s i d e 代表的就是ground truth。 c x a 代表anchor的對心所對應的x座標。 w a 代表anchor的寬,這裡是固定值(16)。之所以除以寬相對於做了一定的歸一化吧。

image

  • 演算法的流程:如圖上所示:
    • 首先通過常規的特徵提取模組(例如,VGG16)來得到feature map,假設大小為h*w*c
    • 通過一個卷積層,將其轉化為h*w*256的shape
    • 我們將其轉化為h*(w*256),其中,將w*256看成一個長度為w的輸入序列,將其輸入到BD-LSTM中。
    • 將得到feature 再轉化成h*w*d 其中d代表的是BD-LSTM輸出的維度
    • 然後再分別通過全連線層來對每個anchor預測score以及座標。注意,這裡是對feature map中的每個pixel進行預測的。也就是說我們fc的輸出分別是h*w*(10*2)以及h*w*(10*4)
    • 最後使用上面步驟訓練好的網路,得到類似與上圖B的許多anchor,然後在使用連線演算法,將其連線起來。連線演算法的定義如下:
      • 首先挑選出所有score>0.7的anchor
      • 針對每個anchor, B i 定義他的鄰居anchor B j , 他們要滿足以下條件
        • 這兩個anchor的最近的
        • anchor之間的距離小於50個pixel
      • 如果 B i B j 互為鄰居,那麼就將其合併,知道找不到互為鄰居的anchor為止。
  • 上面講了演算法的流程,接下來我們看一下loss的定義,來了解具體我們怎麼訓練我們的網路

    L ( s i , v j , o k ) = 1 N s i L s c l ( s i , s i ) + λ 1 N v j L v r e ( v j , v j ) + λ 2 N o k L o r e ( o k , o k )