文字檢測之EAST
轉自:https://zhuanlan.zhihu.com/p/37504120
論文題目:EAST: An Efficient and Accurate Scene Text Detector
傳統的文字檢測方法和一些基於深度學習的文字檢測方法,大多是multi-stage,在訓練時需要對多個stage調優,這勢必會影響最終的模型效果,而且非常耗時.針對上述存在的問題,本文提出了端到端的文字檢測方法,消除中間多個stage(如候選區域聚合,文字分詞,後處理等),直接預測文字行.
下圖給的是幾個不同框架的檢測pipeline:可以發現本文只包含兩個stage
論文關鍵idea
- 提出了基於two-stage的文字檢測方法:全卷積網路(FCN)和非極大值抑制(NMS),消除中間過程冗餘,減少檢測時間.
- 該方法即可以檢測單詞級別,又可以檢測文字行級別.檢測的形狀可以為任意形狀的四邊形:即可以是旋轉矩形(下圖中綠色的框),也可以是普通四邊形(下圖中藍色的框)).
- 採用了Locality-Aware NMS來對生成的幾何進行過濾
- 該方法在精度和速度方面都有一定的提升.
Pipeline
論文的思想非常簡單,結合了DenseBox和Unet網路中的特性,具體流程如下:
- 先用一個通用的網路(論文中採用的是Pvanet,實際在使用的時候可以採用VGG16,Resnet等)作為base net ,用於特徵提取
- 基於上述主幹特徵提取網路,抽取不同level的feature map(它們的尺寸分別是inuput-image的
- 特徵合併層,將抽取的特徵進行merge.這裡合併的規則採用了U-net的方法,合併規則:從特徵提取網路的頂部特徵按照相應的規則向下進行合併,這裡描述可能不太好理解,具體參見下述的網路結構圖
- 網路輸出層,包含文字得分和文字形狀.根據不同文字形狀(可分為RBOX和QUAD),輸出也各不相同,具體參看網路結構圖
實現細節
合併層中feature map的合併規則
具體的合併步驟如下:
- 特徵提取網路層中抽取的最後層feature map被最先送入uppooling層(這裡是將影象放大原先的2倍),
- 然後與前一層的feature map進行concatenate,
- 接著依次送入卷積核大小為ParseError: KaTeX parse error: Expected 'EOF', got ',' at position 11: 1\times{1},̲3\times{3},卷積核的個數隨著層遞減,依次為128,64,32
- 重複1-3的步驟2次
- 將輸出經過一個卷積核大小為3\times{3}3×3,核數為32個
具體的公式如下:
輸出層的輸出
- 對於檢測形狀為RBOX,則輸出包含文字得分和文字形狀(AABB boundingbox 和rotate angle),也就是一起有6個輸出,這裡AABB分別表示相對於top,right,bottom,left的偏移
- 對於檢測形狀為QUAD,則輸出包含文字得分和文字形狀(8個相對於corner vertices的偏移),也就是一起有9個輸出,其中QUAD有8個,分別為
訓練標籤生成
QUAD的分數圖生成
得分圖上QUAD的正面積為原圖的縮小版,縮小的規則如下:
對一個四邊形Q={pi|i屬於1,2,3,4},pi是按順時針順序排列的四邊形的頂點。對於縮小的Q,我們首先計算ri:
D(pi,pj)是兩個頂點pi和pj之間的L2距離。
我們首先收縮兩個長點的邊,再收縮兩個短點的邊。對於每對對邊,我們通過比較平均長度值來確定長邊。對於每個邊<pi,p(imod4)+1> ,我們分別通過沿邊賂內移動兩個端點收縮它,分別為ParseError: KaTeX parse error: Expected 'EOF', got ',' at position 9: 0.3r_{i},̲0.3r_{(i mod 4)…,這裡論文中縮放的係數是0.3,具體可以根據你的實際任務設定.
注:論文中上述公式可能存在問題,這裡僅是個人理解,這裡對應的結果圖如下:其中綠色框為ground truth,紅色框為shrink後的座標
QUAD分數圖如下,這裡其實就是上圖紅色四邊形框的掩膜:
幾何形狀圖生成
很多資料集(如ICDAR2015)是用QUAD的方式標註的,首先生成以最小面積覆蓋區域的旋轉矩形框。每個畫素有一個正的分數值,我們計算它與文字框四邊的距離,把它們放入四通道的RBOX 真值中。對於QUAD真值,8通道幾何形狀圖每個畫素的正分數值是它與四邊形4個頂點的座標偏移。
下圖給出的是生成完的結果,綠色框表示生成的RBOX:
訓練loss
loss由兩部分組成:score map loss 和geometry loss,具體公式如下:
- 分數圖損失(score map loss)
論文中採用的是類平衡交叉熵,用於解決類別不平衡訓練,避免通過 平衡取樣和硬負挖掘 解決目標物體的不不平衡分佈,簡化訓練過程,具體公式如下:
但是在具體實戰中,一般採用dice loss,它的收斂速度會比類平衡交叉熵快
- 幾何形狀損失(geometry loss)
文字在自然場景中的尺寸變化極大。直接使用L1或者L2損失去迴歸文字區域將導致損失偏差朝更大更長.因此論文中採用IoU損失在RBOX迴歸的AABB部分,尺度歸一化的smoothed-L1損失在QUAD迴歸,來保證幾何形狀的迴歸損失是尺度不變的.
針對RBOX loss,其損失函式公式為:
針對QUAD loss,其具體公式如下:
- 區域性感知NMS(locality-aware NMS)
與通用目標檢測相似,閾值化後的結果需要經過非極大值抑制(NMS)來得到最終的結果.由於本文中面臨的是成千上萬個幾何體,如果用普通的NMS,其計算複雜度是O(n^2)O(n2),n是幾何體的個數,這是不可接受的.
針對上述時間複雜度問題,本文提出了基於行合併幾何體的方法,當然這是基於鄰近幾個幾何體是高度相關的假設.注意:這裡合併的四邊形座標是通過兩個給定四邊形的得分進行加權平均的,也就是說這裡是**"平均"而不是"選擇"幾何體**.
- 訓練其它引數
整個訓練採用基於Adam的端到端的訓練.為了加速學習,統一從影象集中取樣512*512構建minibatch大小為24,然後staged learning rate decay,但是在具體實驗過程中可以使用linear learning rate decay.
在ICDAR2015資料集上的評測結果
使用EAST訓練自己資料集
這裡由於時間問題,就詳細介紹了,我的顯示卡型號是Tesla P40,檢測一張需要的時間在60ms左右,這裡給出幾張效果圖:
總結
- 在特徵合併層,利用不同尺度的feature map,並通過相應的規則進行自頂向下的合併方式,可以檢測不同尺度的文字行
- 提供了文字的方向資訊,可以檢測各個方向的文字
- 本文的方法在檢測長文字的時候效果表現比較差,這主要是由網路的感受野決定的(感受也不夠大)
- 在檢測曲線文字時,效果不太理想
本人文筆粗淺,若有理解錯誤的地方,望大家指正.