【創新實訓 第五週】 初識 TextSnake 2019.4.21

本週工作進展

閱讀新文本檢測模型 TextSnake: A Flexible Representation forDetecting Text of Arbitrary Shapes 論文及源代碼。這篇博客結合論文和源碼,記錄我對模型的理解。

論文地址 TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes

代碼參考地址 PyTorch implement of ECCV2018 Paper: TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes


詳細工作內容

1. 概述

現有的文本檢測模型大多將文本形狀默認爲線形,多采用四邊形框標記文本,但實際應用場景中,曲線文本也是相當多見的。於是論文提出了一種圓盤覆蓋方法——TextSnake,來提高曲線文本的識別進度。

下圖爲 TextSnake 的示意圖。 文本區域(黃色,TR)由一系列有序盤(藍色)組合而成,每個盤位於中心線(綠色,TCL)上,並與半徑 r 和方向 θ 相關聯。 與傳統的表示形式(如軸對齊的矩形,旋轉的矩形和四邊形)相比,TextSnake 更靈活更通用,因爲它可以精確地描述不同形式的文本,而不管形狀和長度如何。

 

2. 模型結構

如上圖,模型需要預測出7個屬性:文本區域 TR(包括正、負),文本中心線 TCL(包括正、負),半徑 r,cosθ 和 sinθ。最終生成的 TCL 是 TR 和 預測出的 TCL 的疊加,保證文本中心線一定在文本區域中,可以去除一定噪聲。sinθ 和 cosθ 有着平方和爲1的特性。

網絡主幹部分是諸如 VGG-16/19 或 ResNet 的可用於圖像分類的卷積網絡。上圖使用了 VGG16 網絡,可以看見網絡逐層向下卷積,再逐層向上反捲積並與對應的卷積層融合。每一次融合後都需要再進行一次1x1和3x3的卷積再進行上採樣。最後輸出的特徵圖爲長寬和原圖大小相等,channel數爲7,分別對應要預測的7個屬性。

損失函數如上,TR 和 TCL 使用 smooth_l1_loss 損失函數,r sinθ cosθ 使用交叉熵損失函數。還要注意:

  • TR 的 負樣本與正樣本比值調整到最高 3:1;
  • TCL 損失計算需要先用真實的 TR 做遮罩;
  • r sinθ cosθ 損失計算需要先用真實的 TCL 做遮罩;
  • λ 默認都爲1。

3. 後處理

如上圖,將模型預測輸出的特徵圖轉換成可視的文本框,需要經過三個步驟:

  • Act(A):給出一個點,做切線和法線,取法線與 TCL 相交的兩個交點的中點;
  • Act(B):沿着切線方向與反方向找到兩個點,即 (0.5r*sinθ, 0.5r*cosθ) 和 (-0.5r*sinθ, -0.5r*cosθ) 兩個方向的點,再進行 Act(A) 中心化和 Act(B) 分別向兩邊延申,直到兩邊都到達末尾;
  • Act(C):取到的每個中心點,分別以其半徑做圓,得到文本框。

兩個過濾規則:

  • 如果TCL的mask面積不到半徑的0.2倍,剔除(?)
  • 如果最終預測出來的Text面積與TR的交集不到TR的一半,剔除

4. 數據預處理

對於多邊形文本框數據集,需要經過預處理才能成爲可以訓練的數據集格式。步驟如下:

1. 確定頭尾的底邊

如上圖,HA 的臨邊是 GH 和 AB,一條邊的兩條臨邊最接近180° 我們就把它當作一條底邊,如上圖的 HA 和 DE。

2. 分割長邊

找出兩條底邊後,剩下的邊組成兩條長邊,每條長邊都均勻打上相等數量的錨點,並對應連接,每條錨點連線的中點再依次連接,就組成了中心線。

3. 確定中心線

爲了避免圓盤區域過多覆蓋到文本外的區域,中心線兩端分別縮短 r/2;單線條的中心線容易產生噪聲,於是中心線的寬度向外擴充 r/5。

4. 確定每個像素的 r 和 θ

r 是中心線上像素到邊線上對應錨點的距離;θ 由與相鄰的 TCL 點連線的角度計算而來(?)。對於非 TCL 像素,方便起見可以都設爲0。

5. 運行效果


下一步計劃

嘗試跑一下模型,以及項目的APP和後臺開發。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章