論文地址: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。
亮點: 提出了內核(把 中的文本實例的分割區域稱爲內核kernels)和漸進式擴展算法(Progressive Scale Expansion )。
優勢:
- 是一個基於像素分割的方法,能夠精確地定位任意形狀的文本實例
- 提出了漸進式擴展算法,即使兩個文本實例離得很近也可以分開,從而保證文本實例的準確位置。
方法流程
- 輸入圖像,從主幹網絡獲得四個256通道特徵圖(即)。
- 通過函數 用1024個通道融合了四個特徵映射得到feature map (進一步將語義特徵從低級別升級到高級別):
其中 “” 代表拼接(concatenation), 分別代表上採樣 倍。
-
隨後,將 通過到 層中並減少至256個通道。 接下來,它通過 個 層併產生 個分割結果。
,, 和 指的是卷積,批量歸一化,整流線性單元和上採樣。
每個是一定尺度的所有文本實例的一個分割掩碼,此處的尺度由超參數決定。 具有最小尺度(最小內核)的文本實例的分割結果, 表示原始分割掩模(最大內核)。
-
使用漸進式算法將 中的所有實例的內核逐漸擴展到它們在 中的完整形狀,並獲得最終的檢測結果 。
對於訓練步驟:
執行1,2,3,得到 個分割結果 之後,對每一個分割結果和其對應的ground truth計算損失,反向傳播,更新參數。
對於推理步驟:
執行1,2,3,4得出最終的檢測結果。
方法細節:
1. 漸進尺度擴展算法
這有一個生動的例子(下圖),解釋了漸進擴展算法的流程,其中心思想來自於廣度優先搜索(BFS)算法。在這個例子裏,我們有三個分割的結果 (圖(a)(e)(f))。首先基於最小內核的map (圖(a)),4個不同的連通域 可以作爲初始化。在圖(b)中分別使用不同的顏色代表不同的連通域。現在,我們檢測到了全部文本實例的中心部分(最小內核)。然後,我們通過合併 中的像素逐步擴展檢測到的內核,然後 。這兩個尺度擴展結果分別在圖©和圖(d)中顯示。最後,我們提取在圖(d)中用不同顏色標記的連通域作爲文本實例的最終預測。
尺度擴展的流程在圖(g)中說明。擴展基於廣度優先搜索算法,該算法從多個核的像素開始並迭代地合併相鄰的文本像素。請注意,在擴展期間可能存在衝突的像素,如圖(g)中的紅色框所示。在我們的實踐中處理衝突的原則是,混淆的像素只能由一個單獨的內核合併 - 先到先得。由於“漸進式”擴展程序,這些邊界衝突不會影響最終檢測和性能。 算法1總結了尺度擴展算法的細節。在僞代碼中, 是中間結果, 是隊列。 代表 的鄰近像素(4個方向)。 是按標籤對中間結果進行分組的函數。“” 表示 中像素 的預測值屬於文本部分。 和 分別表示擴展前後的內核。
2. 標籤生成
PSENet生成不同尺度內核的分割結果(例如)。因此,在訓練的時候,有相對應的不同內核的Ground Truth。這些Ground Truth通過縮小原始文本實例生成。在上圖(b)中藍色邊框的多邊形代表原始文本實例,它對應於最大的分割標籤掩碼(最右邊圖©)。爲了順序獲得在圖©中的收縮掩模,我們利用 裁剪算法將原始多邊形 縮小 像素並得到縮小的多邊形 (見圖(a))。隨後,每個收縮的多邊形 被轉換成 0/1 二進制掩碼作爲分割標籤 Ground Truth。 我們將這些Ground Truth分別表示爲 。在數學上,如果我們將比例視爲,則 和 之間的餘量 可以計算爲:
其中, 是計算多邊形面積的函數, 是計算多邊形周長的函數。我們定義Ground Truth 的比例 爲:
其中, 是最小的尺度比例(在 之間), 代表分割結果數。基於上方公式的定義,比例值()由兩個超參數和決定,它們從 線性增加到 1 。
3. 損失函數
損失函數爲:
其中 和 分別代表完整的文本實例和一個縮小的文本實例, 平衡 和 之間的重要性。
在自然圖像中,文本實例基本只佔圖像很小的區域,當使用二進制交叉熵時,這使得網絡的預測更偏向於非文本區域。所以採用了 dice係數。這個dice係數 可以表示爲:
其中 和 分別代表了像素 在分割結果 和Ground Truth 中的值。
此外,有許多類似於文本筆劃的模式,例如柵欄,格子等。因此,我們在訓練期間採用在線硬實例挖掘(OHEM)來更好地區分這些模式。
對於OHEM可以參考文章:https://blog.csdn.net/u014380165/article/details/73148073
重點在於分割文本和非文本區域。把通過OHEM給出的training mask作爲 ,則 可以表示爲:
是縮減文本區域的損失。因爲他們是被完整文本實例的原始區域包圍的,我們在分割結果 中忽視非文本區域的像素去避免一定冗餘。因此, 可以表示爲:
其中 是在 中忽視非文本區域的 mask, 是 中像素 的值。
實現細節
訓練:
-
使用ImageNet預訓練的ResNet,隨機梯度下降(SGD)
-
數據:ICDAR2017 MLT(7200訓練圖像,1800張驗證圖像)
-
Batch Size:16
-
迭代次數:180K
-
學習率: ,在60K和120K迭代步數時分別除以10
-
權重衰減: ,0.99的Nesterov動量 沒有阻尼
其餘數據集採用了兩種訓練策略:(1)從頭訓練。(2)在IC17-MLT上fine-tuning。從頭開始訓練時,batch size 16,迭代次數36K訓練PSENet,初始學習率爲 ,在12K和24K迭代步數時分別除以10。在IC17-MLT上fine-tuning是,迭代次數是24K,初始學習率爲 ,在12K迭代次數時除以10
損失函數:
-
-
OHEM的負樣本比例設置爲 3
數據增強:
- 圖像隨機縮放 ;
- 圖像隨機的水平翻轉,在 範圍內隨機旋轉;
- 從轉換的圖像中隨機剪切 大小的圖像。