文本檢測 DB:Real-time Scene Text Detection with Differentiable Binarization

原文地址:https://blog.csdn.net/m_buddy/article/details/103285989
代碼地址:
DB-official:https://github.com/MhLiao/DB
DBNet.pytorch:https://github.com/WenmuZhou/DBNet.pytorch

1. 概述

由於分割網絡的結果可以準確描述諸如扭曲文本的場景,因而基於分割的自然場景文本檢測方法變得流行起來。基於分割的方法其中關鍵的步驟是其後處理部分,這步中將分割的結果轉換爲文本框或是文本區域。這篇文章的文本檢測方法也是基於分割的,但是通過提出Differenttiable Binarization module(DB module)來簡化分割後處理步驟(加了一個變的預測),並且可以設定自適應閾值來提升網絡性能。文章的方法在現有5個數據上在檢測精度與速度上均表現爲state-of-art。在換用輕量級的backbone(ResNet-18)之後可以將檢測幀率提升到62FPS,其與其它一些文本檢測算法的性能與速率關係見圖1所示。
文章方法與其它一些方法的對比:
在這裏插入圖片描述
傳統意義上基於分割的文本檢測算法其流程如圖2中的藍色箭頭所示。在傳統方法中得到分割結果之後採用一個固定的閾值得到二值化的分割圖,之後採用諸如像素聚類的啓發式算法得到文本區域。
在這裏插入圖片描述
而文章的檢測算法流程是圖2中紅色箭頭所示的,其中不同的地方也是這篇文章核心的一點就是在閾值選取上,通過網絡去預測圖片每個位置處的閾值,而不是採用一個固定的值,這樣就可以很好將背景與前景分離出來。但是這樣的操作會給訓練帶來梯度不可微的情況,對此對於二值化提出了一個叫做Differentiable Binarization來解決不可微的問題。

在解決了閾值可微的爲題之後,文章將分割算法與DB module組合起來構建了一個快速且魯棒的文本檢測器,這個方法的亮點表現在:

  • 1)在幾個開源的數據集上對於水平、傾斜、扭曲的文本表現出了更好的檢測性能;
  • 2)由於不需要繁瑣的後處理,直接使用DB module產生適應的閾值使得網絡提速很多,並且DB module能夠生成更加魯棒的分割二值圖;
  • DB module在輕量級的backbone(ResNet-18)也具有很好的性能;
  • DB module在做inference的時候可以直接移除,而不會損失性能,因而減少了這部分的時間與資源消耗;

2. 方法設計

2.1 網絡結構

文章的網絡結構見圖3所示,輸入的圖像經過不同stage的採樣之後獲得不同大小的特徵圖,之後這些由這些特徵圖構建特徵金字塔,從而構建出統一尺度(相比原圖像stride=8)的特徵圖FFF,之後這個特徵圖用於預測分割概率圖PPP與閾值圖TTT,之後將P,TP,TP,T結合得到估計的二值圖Bˆ\hat{B}
B
^
。在訓練的時候P,BP,BP,B是使用同樣的表現作訓練,而TTT會使用單獨的閾值圖作訓練。
在這裏插入圖片描述

2.2 二值化操作

標準二值化(Standard Binarization,SB)
對於分割特徵圖P∈RH∗WP\in R^{H*W}P∈R
H∗W
,使用下面的方式進行二值化處理:
在這裏插入圖片描述
可微的二值化(Differentiable Binarization,DB)
由於公式1中的二值方法不是可微的,因而就不能在分割網絡中隨着訓練的過程進行優化,爲了解決這個問題文章提出了一個函數來近似這個二值化過程,既是:
Bi,j=11+ek(Pi,jTi,j)B_{i,j} = \frac{1}{1+e^{-k(P_{i,j}-T_{i,j})}}

自適應閾值與膨脹卷積

在圖6中展示了閾值圖對於檢測的影響,就算沒有閾值圖的監督,閾值圖也可以很好區分文本的邊界。

在這裏插入圖片描述
此外,爲了增加網絡的感受野,文章在backbone的stage3、stage4、stage5使用了deformable卷積

2.3 標註生成

訓練標籤生成
在訓練標籤的生成過程中借鑑了PSENet的方法,使用標籤收縮的方式進行,這裏對於搜索的offset DDD使用下面的計算方式得到:

其中,A是多邊形區域的面積,r=0.4r=0.4r=0.4,LLL是多邊形的周長。
其標註過程見下圖5所示:

其標註過程見下圖5所示:
在這裏插入圖片描述

2.4詳細解釋數據生成

Bi,j=11+ek(Pi,jTi,j)B_{i,j} = \frac{1}{1+e^{-k(P_{i,j}-T_{i,j})}}
p可以理解,就是有文字的區域有值,0.9以上,沒有文字區域黑的,爲0
T呢,T是一個只有文字邊界纔有值的,其他地方爲0,那所有的像素都是經過這個公式,得到thresh_binary,這個合適嗎?
然後自己慢慢從一開始製作的標籤入手,gt就是我們標註好的,p就是gt,那個T的標籤threshold map是根據文字邊界做的,T的標籤threshold map到底是啥,
是根據文字邊界做的,T的標籤threshold map到底是啥,
threshold map是將文本框分別向內向外收縮和擴張d(根據第一步收縮時計算得到)個像素,然後計算收縮框和擴張框之間差集部分裏每個像素點到原始圖像邊界的歸一化距離。是根據一個算法跑出來的,看了源碼就是一堆計算,沒有細看。然後我就把gt與threshold map顯示出來更加直觀。
其實一開始就有個問題,gt是標註好的,爲啥還要經過psenet裏面的縮水操作?
看到圖自然就會明白了,這就是這個算法的特別之處了。
在這裏插入圖片描述
分別是原圖,gt圖,threshold map圖。
這裏再說下threshold map圖,非文字邊界處都是灰色的,這是因爲統一加了0.3,所有最小值是0.3,這是爲了後面有用的。
這裏其實還看不清,我們把src+gt+threshold map看看。

2.4 網絡的損失函數

網絡的損失函數定義爲:
在這裏插入圖片描述
可以看到:
p的ground truth是標註縮水之後
T的ground truth是文字塊邊緣分別向內向外收縮和擴張
p與T是公式裏面的那兩個變量。
再看這個公式與曲線圖:
並且爲了樣本均衡這裏使用了困難樣本挖掘,保持正負樣本的比例爲1:3。
在這裏插入圖片描述
P和T我們就用ground truth帶入來理解
在這裏插入圖片描述
p網絡學的文字塊內部,
T網絡學的文字邊緣,兩者計算得到B。
B的ground truth也是標註縮水之後,和p用的同一個。
在實際操作中,作者把除了文字塊邊緣的區域置爲0.3.應該就是爲了當在非文字區域,
P=0,T=0.3,x=p-T<0這樣拉到負半軸更有利於區分。可以看上面的曲線圖。
同時,作者在論文中也寫了之所以這麼做的原因:
首先:
Threshold map本身可以在沒有監督的情況下學到。通過可視化的觀察,發現threshold map會highlight文字區域的邊緣。因此作者利用文字區域的標註對threshold進行監督以獲得更好的結果。如下論文中的圖:
在這裏插入圖片描述
c圖是沒有監督的效果,d是有監督的

其次:求導,更容易區分正負樣本

3. 實驗結果

3.1 消融實驗

DB與膨脹卷積的影響:
在這裏插入圖片描述
閾值監督的影響:
在這裏插入圖片描述

3.2 性能比較

在這裏插入圖片描述
ICDAR 2015:
在這裏插入圖片描述
MSRA-TD500與MLT-2017:
在這裏插入圖片描述

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