大白話《Shape Robust Text Detection with Progressive Scale Expansion Network》
來自專欄 DeepInsight
論文題目:Shape Robust Text Detection with Progressive Scale Expansion Network
論文地址:https://arxiv.org/abs/1806.02559
源碼地址:https://github.com/whai362/PSENet (代碼目前還在整理中,後面會放出)
問題1:如何檢測任意形狀的文字塊?
目前很多文字檢測的方法都是基於bounding box回歸的,雖然它們在常規的文字塊檢測任務中取得了不錯的效果,但是它們很難準確地定位彎曲文字塊(Fig. 1 (a))。而基於語義分割的方法恰好能很好地解決這個問題,語義分割可以從像素級別上分割文字區域和背景區域。
問題2:如何分離靠的很近的文字塊?
直接用語義分割來檢測文字又會遇到新的問題:很難分離靠的很近的文字塊(Fig. 1 (b))。因為語義分割只關心每個像素的分類問題,所以即使文字塊的一些邊緣像素分類錯誤對loss的影響也不大。對於這個問題,一個直接的思路是:增大文字塊之間的距離,使它們離得遠一點。基於這個思路,我們引入了新的概念「kernel」,顧名思義就是文字塊的核心。從Fig. 2中我們可以看到:利用「kernel」可以有效地分離靠的很近的文字塊。
問題3:如何通過「kernel」來構建完整的文字塊?
上述的「kernel」只是文字塊的核心,並不是完整的文字塊,不能作為最終的檢測結果。在這篇文章中,我們通過一種基於廣度優先搜索的漸進擴展演算法來構建完整的文字塊。這個方法的核心思想是:從每個「kernel」出發,利用廣度優先搜索來不斷地合併周圍的像素,使得「kernel」不斷地擴展,最後得到完整的文字塊。具體演算法後面會詳細介紹。
解決了以上的三個問題,相信大家對檢測任意形狀的文字塊也有了初步的想法,下面開始講一下PSENet的總體結構和漸進擴展演算法。
首先是PSENet的總體結構。
如圖Fig. 3所示,PSENet的主幹網路是FPN,一張圖片 通過FPN可以得到四個Feature Map( ),然後通過函數 合併 ,得到 。 的具體公式如下:
,
其中,「」表示拼接操作, 分別表示2,4,8倍上採樣。接著,通過 來預測不同kernel scale的分割圖 。 其中 是最小kernel scale的分割圖,裡面不同的連通區域都可以看作不同文字塊的「kernel」。 是最大kernel scale的分割圖,是完整的文字快。最後通過一個漸進擴展演算法(Progressive Scale Expansion)去不斷地擴展 中的每個「kernel」,直到變成 中完整的文字塊。
下面講漸進擴展演算法(Progressive Scale Expansion)。
漸進擴展演算法的輸入是不同kernel scale的分割圖 ,輸出是最後的檢測結果 。不妨令 ,則漸進擴展的演算法的過程如Fig. 4所示。首先,對 求連通區域,得到不同文字塊的「kernel」(Fig. 4 (b))。然後,通過Fig. 4 (g)所示的擴展操作合併 中的文字像素,得到擴展後的結果(Fig. 4 (c))。最後,使用同樣的擴展操作合併 中的文字像素,得到完整的文字塊(Fig. 4 (d))。其中Fig. 4 (g)所示的擴展操作是基於廣度優先搜索實現的。
到這裡PSENet已經差不多講完,接下來我們看看PSENet在不同數據集上的表現,如Table 1所示,PSENet在常規數據集ICDAR 2015和ICDAR 2017 MLT上的表現不弱於主流的檢測演算法,但在彎曲文字數據集SCUT-CTW1500上的表現超過了之前最好的結果6.37%。Fig. 5是PSENet在不同數據集上的一些結果。
更多詳情請看原文,如有錯誤請指正。
推薦閱讀:
※九章演算法 | Amazon 面試題:Minimum String Array Coverage
※021 Merge Two Sorted Lists[E]
※Leetcodes Solution 3 Longest Substring Without Repeating Characters
※九宮飛星入中宮演算法
※陽宅堪輿基礎,宅命推演算法!