論文閱讀筆記四:CTPN: Detecting Text in Natural Image with Connectionist Text Proposal Network(ECCV2016)

    前面曾提到過CTPN,這裏就學習一下,首先仍是老套路,從論文學起吧。這裏給出英文原文論文網址供你們閱讀:https://arxiv.org/abs/1609.03605。網絡

    CTPN,之前一直認爲縮寫通常是從題目的開始依次排序選取首字母的,怕是孤陋寡聞了,全稱是「 Detecting Text in Natural Image with Connectionist Text Proposal Network」,翻譯過來是基於鏈接Proposal(直譯太難受!!)網絡的文本檢測。ide

    做者在論文中描述了,根據他們提出的方法能夠對圖片中的文本行進行準確的定位。他的基本作法是直接在卷積得到的feature map上生成的一系列適當尺寸的文本proposals進行文本行的檢測。函數

本文的一個亮點是做者提出了一個垂直anchor的機制,能夠同時預測出固定寬度proposal的位置以及文本/非文本的分數,能夠大幅度提升精度。這裏有個小問題,既然用到proposals,那他們是從哪裏來的呢,學習

做者告訴咱們這些有序的proposals是由RNN(循環神經網絡)獲得的,RNN能夠很好的結合CNN,造成一個end-to-end的可訓練模型。做者也很自覺的提到了,用RNN如此操做的好處是可使CTPN探索豐富的圖像上下文的信息,可以檢測模糊的文本,貌似不賴啊。。。亮出CTPN的優勢吧,據做者說,CTPN是能夠在多尺度和多語言文本中進行檢測的。並且比較方便的是,他並不須要後期的處理。優化

    做者提出的垂直anchor能夠以適當的規模準正確的預測文本的位置。而後,提出的網內循環結構,能夠將較大尺寸的文本proposal有序的鏈接,這樣作的好處是能夠對上下文豐富的文本信息進行編碼。編碼

針對物體檢測能夠大體地認爲。若是檢測到邊界框與groundtruth的重疊大於0.5,則能夠從圖片的主要部分很簡單的認出物體。文本檢測須要覆蓋文本行或單詞的整個區域。做者提到了文本檢測的一個用的比較多的評估標準,就是Wolf標準。做者是經過擴展RPN的結構來準確的對文本行進行定位。 翻譯

     做者表態,他們的工做主要由四個部分:第一部分,做者將文本檢測的問題轉化爲定位一系列合適尺寸的文本proposals的問題。我的感受將問題分散化了(將複雜問題轉爲簡單問題的思想值得借鑑)。所以,爲了實現上述過程,做者提出了一個anchor迴歸機制,經過這個方式,能夠同時預測出每一個文本proposal的垂直方向的位置和文本/非文本的分數值,以便得到更好的定位。相比之下,RPN貌似提供的定位就差強人意了。。設計

    接下來,大佬們又提出了一種in-network 循環機制,能夠直接在CNN的feature map 上創建連續的文本proposals。這波操做看能夠對文本行上下文的信息進行有意義的探索。第三,大佬又強調,上述兩種方法能夠很好的符合文本序列的本質,造成end-to-end的可訓練模型。第四是一些大佬們取得的成績,這裏感興趣的同窗能夠從論文裏查看,這裏就不贅述了。3d

   傳統的文本檢測方法大致能夠分爲兩類,一類爲鏈接組件(CC),另外一類爲滑動窗口。CC是經過使用fast filter 對文本/非文本像素進行區分,而後經過使用(強度,顏色,漸變)等低級屬性將文本像素分爲筆畫或者候選字符。而 滑動窗口是經過在圖像上密集的移動多尺寸的窗口。字符/非字符窗口經過預訓練的分類器,使用手動設計的特徵或CNN靠後層的特徵進行區分。固然,做者指明瞭上述兩種方法的弊端,就是在接下來的組件filter和文本行的構建過程當中,出現的錯誤會進行累積,最終會產生較大的偏差。此外,很好的將非字符組件排除同時較準確的檢測文本行是比較困難的。滑動窗口有一個比較大的問題,就是計算上比較費錢,由於須要在大量的窗口上運行分類器。對象

做者告訴咱們在物體檢測中,一種比較廣泛的方式是經過一些低級特徵產生一些proposals,而後送到卷積網絡裏進行進一步的分類和修改。其中,經過選擇性搜索(SS)能夠產生proposals,目前應用的比較普遍。在faster R-CNN中又有RPN,直接從CNNN的feature map中得到proposals。因爲共享卷積,所以RPN的運算速度是比較快的。可是RPN是不具備區別性的,須要進一步的分類和修復。

 

    

    重點來了,這裏介紹CTPN的結構,這個網絡的三個關鍵是:一是在fine-scale 的proposals中檢測文本,二是循環鏈接的文本proposals,最後是輔助細化操做。接下來咱們就按順序看看做者們是如何實現的吧。

   Detecting Text in Fine-scale Proposals

   做者告訴咱們CTPN與RPN類似的地方是,也是一個完整的卷積網絡,也能夠容許任意大小的圖像的輸入。前面也提到過了,CTPN經過在CNN的feature map 上密集的移動窗口來檢測文本行,輸出的是一系列的適當尺寸(固定寬度16像素,能夠從上圖右側看出,長度仍是能夠調整的)的文本proposal。做者以VGG16進行說明,(爲何要選用VGG16緣由是VGG16是由大規模數據訓練獲得的模型,咱們平常生活中的數據相比訓練VGG16的數據集要差好幾個級別,因此,通常以VGG16進行遷移學習,進行微調)。做者使用大小爲3*3的空間窗口,在最後一層卷積(VGG16的conv5)的feature map上滑動窗口。conv5的 feature map 的大小是由輸入圖像的大小決定的。而總步長和感覺野分別爲16和228個像素。他們都是有網絡結構決定的固定的範圍。這裏有個隱含的問題那就是,前面提到過滑動窗口須要耗費大量的計算,但這裏卻又能夠,爲何呢?緣由是在卷積層中滑動窗口能夠共享卷積,這樣能夠減小計算成本。採用不一樣尺寸的滑動窗口能夠檢測不一樣大小的物體。出色的是,Ren提出了anchor 迴歸機制容許RPN可使用單尺度窗口檢測多尺度的對象。這個想法的核心是經過使用一些靈活的anchors在大尺度和縱橫比的範圍內對物體進行預測。

這裏做者進行了提示,就是文本檢測不一樣於物體檢測。文本檢測沒有一個明顯封閉邊界,同時是一個序列,可能在筆畫,字符,單詞,文本行和文本等多級組件之間沒有明確的區分。所以,文本檢測是定義在文本或文本行上的。

由上圖能夠看到RPN進行的單詞檢測很難準確的進行水平預測,是由於單詞中的每一個字符都是分離的,對文本的頭和尾沒法很好的區分。所以,做者認爲將文本行視爲一系列縮放文本proposals,每一個proposal一般表明文本行的一小部分。做者又以爲,每次僅預測每一個proposal垂直位置會更準確,由於水平的很差預測。。。因爲RPN預測的是對象的四個座標,從而減小了搜索空間。

做者們提出了一種垂直anchor的機制,能夠同時預測每一個proposal的文本/非文本分數和y軸的位置。檢測固定寬度的文本proposal比檢測單個或分離的字符更容易。爲了讓在一系列固定寬度的文本proposal上檢測文本行也能夠應對多個比例和縱橫比的文本。做者們親自 設計文本proposals。首先,detector密集的搜索conv5中的每一個空間位置。文本Proposal具備16個像素的固定寬度是有意義的(密集的through conv5中的feature map)總步長剛好爲16個像素。接下倆,又給每一個proposal設計了k個垂直anchor用來預測每一個點的y座標。這k個anchor 具備固定16個像素的水平位置,但垂直位置在k個不一樣的高度上變化,這裏做者使用的是10個anchors。高度在11-273個像素變化,垂直座標是如何計算的呢,做者告訴咱們是經過 一個proposal 邊界框的高度和y軸的中心計算獲得的。有關預測anchor邊界框的相對的垂直座標的計算是由下式獲得,

參數說明:V={Vc,Vh},V*={Vc*,Vh*}分別爲預測的座標和groundTruth。Cy 和Ha是anchor box的y軸的中心和高度,能夠根據輸入圖像提早計算獲得。所以,每一個預測的文本proposal有一個大小爲h*16的邊界框(如上述右圖),大致上,文本proposal相對於228*228的感覺野來講小不少。

   這裏總結一下檢測的處理過程,給定一張圖片,這裏由一個W*H*C 的conv5的feature map,detector經過一個大小爲3*3的窗口密集的滑動conv5,每一個滑動窗口用一個3*3*C的feature map用於進行預測。對每一個預測來講,水平位置和k個anchors的位置是固定的,這個是由輸入圖像在conv5的feature map上窗口的位置預先計算獲得的。detector 輸出每一個窗口位置處k個anchor的文本/非文本分數和預測的y的座標。生成的文本proposals 是由文本/非文本分數值大於0.7(經過使用NMS)的anchor生成的。經過使用垂直anchor和fine-scale 策略,detector能夠處理各類比例和縱橫比的文本行,進一步節省了計算量和時間。

    第一部分介紹完了,接下來就是 Reccurrent Connectionist Text Proposals

爲了提升精度,做者將文本行分割爲一個fine-scale的序列文本Proposal,並分別對他們中的每個進行預測。爲何文本proposal要爲序列,緣由是將獨立的proposal單獨考慮並不周全,容易將圖片中和文本相似的結構(做者舉了個小栗子:磚塊)預測爲文本,這就形成了錯誤。同時也爲了防止忽略含文本信息較少的狀況。

有序和無序的比較以下圖:

做者 提出這個結構想要達到的目標是直接在卷積層上編碼上下文信息,造成一個緊密的網絡內部鏈接。RNN使用可使用隱藏層對信息進行循環編碼。理所固然的,做者在conv5上設計了一個RNN層,將每一個窗口的卷積特性做爲連續輸入,並在RNN的隱藏層H中循環更新其內部狀態,公式以下:

參數說明:其中Xt表明來自第t個滑動窗口的輸入conv5的特徵,滑動窗口是從左至右滑動,產生每行1....W的順序features。W是conv5的寬度。Ht是由當前輸入Xt與之前的狀態Ht-1一塊兒計算獲得的當前內部狀態。做者用LSTM做爲RNN層。在CTPN中,做者使用雙向LSTM進一步擴展RNN,容許其在兩個方向上對上下文進行編碼,使鏈接感覺野可以覆蓋圖像的整個寬度。對每一個LSTM用128D的隱藏層,雙向的RNN就問256D,在Ht隱藏層的狀態被映射到接下來的全鏈接層,輸出層,用於計算第t個proposal的預測。由上圖能夠看出,做者們的付出仍是獲得回報的。

    大部分已經介紹完了,而後就大致說一下Side-refinement吧。

據做者表示,藉助於鏈接連續的文本proposal的文本/非文本分數大於0.7,文本行的構建很是easy。

文本行的創建過程:首先,介紹一個定義, 第一個條件是當Bj是離Bi水平距離最近的區域,第二個條件是該距離小於50個像素,第三個條件是垂直重疊要大於0.7,這樣知足三個條件才能夠將Bj定義爲Bi的一個相鄰域記做 Bj->Bi。概念問題解決後,做者強調,若是Bi->B j,Bj->Bi,則能夠將兩個proposal劃爲一對,這樣經過順序鏈接相同的propsoals能夠構建文本行。精確的檢測和RNN鏈接能夠準確的預測垂直方向的位置。水平方向上,圖像被分紅一系列像素爲16的等寬的proposal。當兩個水平方向的proposal沒有被ground truth的文本行覆蓋時,會致使預測的位置不許確,

上述問題對物體檢測影響不大,但在文本檢測尤爲是小文本的檢測來講是不容忽視的。所以,side-refinement 就是爲了解決此問題而提出的,這個方法能夠準確估計左右兩側水平方向上每一個anchor/proposal 的偏移量。偏移量的計算以下:

Xside爲離當前anchor距離最近的水平邊(左邊或者右邊)的座標。X*side是水平方向GT座標,由GT邊界框和anchor的位置計算獲得。Cx_a是水平方向anchor的中心。Wa是anchor的寬(固定爲16)。當將一系列檢測到的文本proposals鏈接成一個文本行時。side-proposal被定義爲proposals的開頭和結尾(終於明白side的由來了)。做者只使用side-proposal 的偏移量來從新定義左中的文本行的邊界框。

論文的主要部分差很少了,接下來讓咱們看看這個CTPN的輸出和他的損失函數吧。

CTPN的三個輸出都被一塊兒鏈接到全鏈接層上。這三個輸出同時預測文本/非文本分數,垂直座標和side-refinement的偏移量。採用k個anchor對他們三個分別預測,依次在輸出層產生2k,2k,和k個參數。做者採用多任務學習來聯合優化模型參數,目標函數以下:

每個anchor是一個訓練樣本。i是一個anchor在一個minibatch的序列。Si是anchor i 預測是一個真文本的機率,S*是GT{0,1},j是用於y座標迴歸的有效anchor集合中的anchor的索引,他的定義是

一個有效的anchor被定義爲positivate anchor S*j=1,或者是與GT的文本proposal 大於0.5的重疊。Vj和Vl*是第j個anchor的y軸方向的預測值和GT.k爲side-anchor的標號,side-anchor爲一系列離grount Truth文本行框從左至右在水平距離範圍內(這裏爲32個像素)的anchors。Ok和Ok*是x軸上第K個anchor的預測的和GT的偏移量。Ls爲區分文本/非文本的Softmax損失,Lv和Lo都爲迴歸損失,其中lamda1,lamda2爲損失權重,根據經驗設置爲1.0和2.0。

CTPN能夠用標準的反向傳播和隨機梯度降低進行end-to-end的訓練。與RPN相同的是訓練樣本爲anchors,其位置能夠由輸入的圖片預先計算,因此每一個anchor訓練的標籤能夠根據GTbox計算獲得。

針對文本/非文本的分類,二進制的標籤被分給每個正anchor(文本)和負anchor(非文本),正負anchor是由IOU與GT邊界重疊計算獲得的。正的anchor被定義爲:IOU與GTbox 的重疊大於0.7的或者最高(集是一個很小的文本pattern也會被分爲一個正的anchor)的anchor。負的anchor是IOU小於0.5產生的。CTPN的理論大致討論到這裏,後面還有做者作的實驗結果並進行了討論,能夠參考前面給出的論文地址進行進一步的學習。

相關文章
相關標籤/搜索