算法架構圖:
算法分析
-
總覽,主要包含三個部分:
- backbone提取特徵(特徵金字塔)
- 特徵金字塔被上採樣到相同尺度構建一個特徵圖F
- 使用F來預測概率圖P和閾值圖T,並通過P和T來生成二值圖B
-
一些細節:
- 預設的圖片大小【640,640】
- 在訓練階段:P、T、B都會進行loss計算,並bp,其中P、B會使用相同的標籤
- 在推理階段,P、B都可以被用於計算bbox
- DB模塊的優勢:
- 幫助區分非常近的模塊
- 自己的理解其實就是對邊界做了加強學習,讓邊界更準了,同時免去了複雜的後處理,連通區域的計算其實就在裏面了
- 閾值圖T的學習可以監督或者非監督,監督效果更好
- 閾值圖T的用法是,用於對P的二值化
- 關於DB模塊
- 損失函數,及其導數:
- deformable conv:可形變的卷積,提供可形變感受野,對大寬高比有效果
- 標註生成:基於PSEnet標註的生成規則。收縮和擴展的長度計算公式(6),其中收縮和擴展之間的像素爲T的正樣本,其餘爲負樣本
- 損失函數:
- loss計算方式這裏,其實就是交叉熵,因爲x受T影響,bp到P時,可以理解爲P會影響最終的結果,同時P也可以被學習
- 其中阿爾法爲1.0,貝塔爲10,Ls、Lb爲負採樣交叉熵損失,採樣比1:3;Lt爲平滑後的L1損失,只計算Gd內部的像素(可能是爲了避免樣本不平衡的問題,類似於負採樣)
- 在推理階段,使用P或者B生成bbox差不多
- box生成規則:
- 首先使用閾值進行二值化(預設0.2)
- 通過二值化後的map尋找連接區域(對應標註的Gs,收縮圖)
- 通過公式(10)反推文本區域:
- 訓練細節:
- 所有的模型先使用Synthtext與訓練10w個iter
- 然後finetuning 各自數據集1200epoch,類別totaltext1500個訓練集的話,標註數據2k個應該足夠了
- lr設置方面:
- 初始化0.007
- 每個iter改變一次:lr= (1 − iter/maxiter )^power,power=0.9,maxter=epoch*(iterperepoch),decay=0.0001,moment=0.9
- 數據增強方面:
- -10-10隨機旋轉
- 隨機裁剪
- 隨機偏移
- all resize 640*640
- 預測階段,等比例
- 缺陷:
- 重疊文本無法處理
- 重疊文本無法處理
模型效果(附帶數據說明)
1)彎曲文本:
2、多方向文本
3、多語言
4、中英文