PSENet:Shape Robust Text Detection with Progressive Scale Expansion Network ---- 論文閱讀筆記

論文地址:https://arxiv.org/abs/1903.12473
論文翻譯:https://blog.csdn.net/m0_38007695/article/details/96425198
代碼地址:
PyTorch版本:https://github.com/whai362/PSENet , https://github.com/WenmuZhou/PSENet.pytorch
TensorFlow版本:https://github.com/liuheng92/tensorflow_PSENet

方法簡介

PSENet:主幹網絡ResNet,基本框架FPN。

亮點: 提出了內核(把 S1,S2,...,SnS_1,S_2,...,S_n 中的文本實例的分割區域稱爲內核kernels)和漸進式擴展算法(Progressive Scale Expansion )。

優勢

  1. 是一個基於像素分割的方法,能夠精確地定位任意形狀的文本實例
  2. 提出了漸進式擴展算法,即使兩個文本實例離得很近也可以分開,從而保證文本實例的準確位置。

方法流程

  1. 輸入圖像,從主幹網絡獲得四個256通道特徵圖(即P2,P3,P4,P5P_2, P_3, P_4, P_5​)。
  2. 通過函數 C()\Bbb C(\cdot)​ 用1024個通道融合了四個特徵映射得到feature map FF​(進一步將語義特徵從低級別升級到高級別):

F=C(P2,P3,P4,P5)=P2    Up×2(P3)    Up×4(P4)    Up×8(P5) F = \Bbb C(P_2, P_3, P_4, P_5) = P_2 \;||\; Up_{×2}(P_3) \;||\; Up_{×4}(P_4) \;||\; Up_{×8}(P_5)

​ 其中 “||​” 代表拼接(concatenation),Up×2(),  Up×4(),  Up×8()Up_{×2}(\cdot),\; Up_{×4}(\cdot), \; Up_{×8}(\cdot)​ 分別代表上採樣2,  4,  82, \; 4, \;8​ 倍。

  1. 隨後,將 FF​ 通過到 Conv(3,3)BNReLUConv(3,3)-BN-ReLU​ 層中並減少至256個通道。 接下來,它通過 nn​Conv(1,1)UpSigmoidConv(1, 1)-Up-Sigmoid​ 層併產生 nn​ 個分割結果S1,S2,...,SnS_1,S_2,...,S_n​

    ConvConv​BNBN​ReLUReLU​UpUp​ 指的是卷積,批量歸一化,整流線性單元和上採樣。

    每個SiS_i是一定尺度的所有文本實例的一個分割掩碼,此處的尺度由超參數決定。S1S_1 具有最小尺度(最小內核)的文本實例的分割結果,SnS_n 表示原始分割掩模(最大內核)。

  2. 使用漸進式算法將 S1S_1 中的所有實例的內核逐漸擴展到它們在 SnS_n 中的完整形狀,並獲得最終的檢測結果 RR

對於訓練步驟:

​ 執行1,2,3,得到 nn 個分割結果 S1,S2,...,SnS_1,S_2,...,S_n 之後,對每一個分割結果和其對應的ground truth計算損失,反向傳播,更新參數。

對於推理步驟:

​ 執行1,2,3,4得出最終的檢測結果。

方法細節:

1. 漸進尺度擴展算法

​ 這有一個生動的例子(下圖),解釋了漸進擴展算法的流程,其中心思想來自於廣度優先搜索(BFS)算法。在這個例子裏,我們有三個分割的結果 S={S1,S2,S3}S = \{S_1, S_2, S_3\}​(圖(a)(e)(f))。首先基於最小內核的map S1S_1​(圖(a)),4個不同的連通域 C={c1,c2,c3,c4}C = \{c_1, c_2, c_3,c_4\}​ 可以作爲初始化。在圖(b)中分別使用不同的顏色代表不同的連通域。現在,我們檢測到了全部文本實例的中心部分(最小內核)。然後,我們通過合併 S2S_2​ 中的像素逐步擴展檢測到的內核,然後 S3S_3​。這兩個尺度擴展結果分別在圖©和圖(d)中顯示。最後,我們提取在圖(d)中用不同顏色標記的連通域作爲文本實例的最終預測。

在這裏插入圖片描述

​ 尺度擴展的流程在圖(g)中說明。擴展基於廣度優先搜索算法,該算法從多個核的像素開始並迭代地合併相鄰的文本像素。請注意,在擴展期間可能存在衝突的像素,如圖(g)中的紅色框所示。在我們的實踐中處理衝突的原則是,混淆的像素只能由一個單獨的內核合併 - 先到先得。由於“漸進式”擴展程序,這些邊界衝突不會影響最終檢測和性能。 算法1總結了尺度擴展算法的細節。在僞代碼中,T,PT, P​ 是中間結果,QQ​ 是隊列。Neighbor()\rm Neighbor(\cdot)​ 代表 pp​ 的鄰近像素(4個方向)。GroupByLabel()\rm GroupByLabel(\cdot)​ 是按標籤對中間結果進行分組的函數。“Si[q]=TrueS_i[q] = \rm True​” 表示 SiS_i​ 中像素 qq​ 的預測值屬於文本部分。CC​EE​ 分別表示擴展前後的內核。
在這裏插入圖片描述

2. 標籤生成

[外鏈圖片轉存失敗(img-GbjOcNmf-1563441756505)(./圖5 標籤生成.png)]
​ PSENet生成不同尺度內核的分割結果(例如S1,S2,...,SnS_1, S_2,...,S_n)。因此,在訓練的時候,有相對應的不同內核的Ground Truth。這些Ground Truth通過縮小原始文本實例生成。在上圖(b)中藍色邊框的多邊形代表原始文本實例,它對應於最大的分割標籤掩碼(最右邊圖©)。爲了順序獲得在圖©中的收縮掩模,我們利用 Vatti\rm Vatti 裁剪算法將原始多邊形 pnp_n 縮小 did_i 像素並得到縮小的多邊形 pip_i(見圖(a))。隨後,每個收縮的多邊形 pip_i 被轉換成 0/1 二進制掩碼作爲分割標籤 Ground Truth。 我們將這些Ground Truth分別表示爲 G1,G2,...,GnG_1,G_2,...,G_n。在數學上,如果我們將比例視爲rir_i,則 pnp_npip_i 之間的餘量 did_i 可以計算爲:
di=Area(pn)×(1ri2)Perimeter(pn) d_i = \frac{\rm{Area}(\it{p_n}) × (1 - r_i^2)}{\rm Perimeter (\it p_n)}
其中, Area()\rm Area(\cdot)​ 是計算多邊形面積的函數,Perimeter()\rm Perimeter(\cdot)​ 是計算多邊形周長的函數。我們定義Ground Truth GiG_i​ 的比例 rir_i​ 爲:
ri=1(1m)×(ni)n1 r_i = 1- \frac{(1-m) × (n-i)}{n-1}
其中,mm 是最小的尺度比例(在 (0,1](0,1]之間),nn 代表分割結果數。基於上方公式的定義,比例值(r1,r2,...,rnr_1, r_2, ...,r_n)由兩個超參數nnmm決定,它們從 mm 線性增加到 1 。

3. 損失函數

​ 損失函數爲:
L=λLc+(1λ)Ls L = \lambda L_c + (1-\lambda) L_s
其中 LcL_cLsL_s 分別代表完整的文本實例和一個縮小的文本實例,λ\lambda 平衡 LcL_cLsL_s 之間的重要性。

​ 在自然圖像中,文本實例基本只佔圖像很小的區域,當使用二進制交叉熵時,這使得網絡的預測更偏向於非文本區域。所以採用了 dice係數。這個dice係數 D(Si,Gi)D(S_i, G_i) 可以表示爲:
D(Si,Gi)=2x,y(Si,x,y×Gi,x,y)x,ySi,x,y2+x,yGi,x,y2 D(S_i, G_i) = \frac{2 \sum_{x,y}(S_{i,x,y} × G_{i,x,y})}{\sum_{x,y}S_{i,x,y}^2 + \sum_{x,y}G_{i,x,y}^2}
其中Si,x,yS_{i, x,y}​Gi,x,yG_{i,x,y}​ 分別代表了像素 (x,y)(x, y)​ 在分割結果 SiS_i​ 和Ground Truth GiG_i​ 中的值。

​ 此外,有許多類似於文本筆劃的模式,例如柵欄,格子等。因此,我們在訓練期間採用在線硬實例挖掘(OHEM)來更好地區分這些模式。

對於OHEM可以參考文章:https://blog.csdn.net/u014380165/article/details/73148073

LcL_c​ 重點在於分割文本和非文本區域。把通過OHEM給出的training mask作爲 MM​,則 LcL_c​ 可以表示爲:
Lc=1D(SnM,GnM) L_c = 1 - D(S_n \cdot M, G_n \cdot M)
LsL_s 是縮減文本區域的損失。因爲他們是被完整文本實例的原始區域包圍的,我們在分割結果 SnS_n 中忽視非文本區域的像素去避免一定冗餘。因此,LsL_s 可以表示爲:
Ls=1i=1n1D(SiW,GiW)n1Wx,y={1,if  Sn,x,y0.5;0,otherwise. L_s = 1 - \frac{\sum_{i=1}^{n-1}D(S_i \cdot W, G_i \cdot W)}{n-1} \\ W_{x,y} = \begin{cases} 1, \quad if \;S_{n,x,y} \geq 0.5; \\ 0, \quad otherwise. \end{cases}
其中 WW 是在 SnS_n 中忽視非文本區域的 mask,Sn,x,yS_{n,x,y}SnS_n 中像素 (x,y)(x,y) 的值。

實現細節

訓練:

  1. 使用ImageNet預訓練的ResNet,隨機梯度下降(SGD)

  2. 數據:ICDAR2017 MLT(7200訓練圖像,1800張驗證圖像)

  3. Batch Size:16

  4. 迭代次數:180K

  5. 學習率:1×1031 × 10^{-3} ,在60K和120K迭代步數時分別除以10

  6. 權重衰減:5×1045×10^{-4} ,0.99的Nesterov動量 沒有阻尼

    其餘數據集採用了兩種訓練策略:(1)從頭訓練。(2)在IC17-MLT上fine-tuning。從頭開始訓練時,batch size 16,迭代次數36K訓練PSENet,初始學習率爲 1×1031 × 10^{-3} ,在12K和24K迭代步數時分別除以10。在IC17-MLT上fine-tuning是,迭代次數是24K,初始學習率爲 1×1041× 10^{-4},在12K迭代次數時除以10

損失函數:

  1. λ=0.7\lambda = 0.7

  2. OHEM的負樣本比例設置爲 3

數據增強:

  1. 圖像隨機縮放 {0.5,1.0,2.0,3.0}\{0.5, 1.0, 2.0, 3.0\}
  2. 圖像隨機的水平翻轉,在 [10,10][-10^\circ, 10^\circ] 範圍內隨機旋轉;
  3. 從轉換的圖像中隨機剪切 640×640640 × 640 大小的圖像。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章