Xiang Bai——【CVPR2016】Multi-Oriented Text Detection with Fully Convolutional Networks
目錄
- 作者和相關鏈接
- 方法概括
- 方法細節
- 創新點和貢獻
- 實驗結果
- 問題討論
- 總結與收獲點
-
作者和相關鏈接
- 作者:
-
方法概括
- Step 1——文本塊檢測: 先利用text-block FCN得到salient map,再對salient map進行連通分量分析得到text block;
- Step 2——文本線形成: 對text-block利用MSER提取候選字符區域,利用候選字符區域估計整個block的方向,再結合候選字符的bounding box生成每個每條文本行;
- Step 3——文本線過濾: 利用centroid FCN得到每條文本行中的字符的質心,利用質心過濾非文本行;
以下為細化的每個步驟示例圖:
Figure 1. The procedure of the proposed method. (a) An input image; (b) The salient map of the text regions predicted by the TextBlock FCN; (c) Text block generation;
(d) Candidate character component extraction; (e) Orientation estimation by component projection; (f) Text line candidates extraction; (g) The detection results of the proposed method.
-
方法細節
-
text blcok 檢測
- Text-block FCN的網絡結構
-
選用VGG16的前5層卷積層,去掉后面的全連接層。在每個卷積層后都接上一個deconv操作(由1*1的卷積+上采樣構成)。再把5個deconv得到的maps用1*1的卷積進行 fusion,並經 過一個sigmoid層得到salient map。
-
-
- Text-block FCN生成salient map的示例圖
-
從第1層到第5層的細節越來越少,global的信息越來越強。
-
-
- 普通方法得到的的salient map和由text-block FCN得到的salient map對比
-
-
-
- text block FCN用到的訓練圖
-
-
-
文本線生成
- MSER提取字符候選區域
- 在每個text block里進行MSER提取(不要求MSER把所有字符都提取出來,允許漏檢和存在噪聲);
- 利用候選區域的面積、長寬比過濾大部分噪聲(僅在text block里提取,噪聲不多,比較單一);
- projection方法估計直線方向
- 在text block里找到最優的h和θ(可以確定一條直線),使得該直線穿過的component個數最多;
- 本方法的假設條件:第一,同一block中,所有文本線的方向一致;第二,文本線是近直線的;
- MSER提取字符候選區域
-
-
-
- 候選文本線生成
- 對每個block里的所有component進行聚類,聚類條件如下:
- 每個grouping生成bounding box
- 沿着block(記為α)的方向θr(α)的方向畫一條直線l,該直線經過這個grouping中的所有component的中心(所有component中心中隨便取一個或者取中間那個?);
- 將直線l與α的邊緣點的交點集合記為P(α是圖(b)中的所有白色點的集合),即如下圖中的最左邊和最右邊的兩個紅點。
- 利用點集P和每個componet的bounding box生成整條文本線的bounding box(求並集)
- 對每個block里的所有component進行聚類,聚類條件如下:
- 候選文本線生成
-
-
文本線噪聲過濾
- character-centroid FCN獲得每條文本線中的所有可能存在的字符的質心
- 模型結構:從text-block FCN的5層卷積→3層卷積(text-block FCN的縮小版)
- 訓練樣本:距離字符中心(ground Truth中的字符中心?)距離小於字符高度的15%的點都算作正樣本點,其他點算作負樣本點、
- 非文本線噪聲過濾
- 質心概率的均值過濾
- 幾何角度過濾(近直線)
- 質心概率的均值過濾
- character-centroid FCN獲得每條文本線中的所有可能存在的字符的質心
-
創新點和貢獻
- 貢獻
- 用FCN生成文字/非文字的salient map;
- 利用局部(Component based )和全局(context of the text block ) 的信息生成文本線;
- 用FCN得到字符的質心;
- idea的出發點
- FCN既然可以作像素級的標定,那么可以用來得到每個像素屬於文字的概率(salient map),也可以用來得到每個像素是字符質心的概率(centroid map );
- 單個字符容易受背景干擾,容易造成漏檢或者誤檢,而文本塊相對於字符不但區分性更強(更容易與背景區分開),而且更穩定(一般比較完整)。因此,如果能把單個字符的信息(局部,細節)與上下文信息(文本線)結合起來,就能使檢測更加魯棒;
- 貢獻
-
實驗結果
- MSRA-TD500
- ICDAR2015
- ICDAR2013
- 示例圖
- 失敗的圖
- MSRA-TD500
-
問題討論
- 為什么FCN可以用來做文字?有什么好處?
- FCN可以融合局部(字符)和全局信息(文本線);
- FCN是端到端訓練;
- FCN由於去掉了全連接層后在像素級的標定很快,而且文字本身也容易獲得像素級標定的訓練數據;
- 為什么這篇文章的方法可以解決多方向的文字檢測問題?
- 文章中決定文字方向的方法是text block(記為α)上利用MSER檢測候選字符,再在整個block上找到一條直線θr(α),使得經過的候選字符個數最多。由於直線θr(α)的兩個參數h和θ都沒有約束限制,因此可以檢測任意方向的文字;
-
- deconv中1*1的卷積作用是什么?
- 1*1的卷積得到的map大小和原圖是一樣的,所以作用一般有三個。一是為了把多通道的信息融合起來;二是為了升維或降維(把上一層的channel數變多或者變少);三是有時候1*1的卷積是在做pixel-wise的prediction。
- deconv中上采樣的作用是是什么?
- 因為每一層卷積得到的map大小是不同的,而且和原圖相比都更小,在fusion的時候要得到和原圖相同大小的map所以要進行上采樣。這個上采樣的核(參數)在FCN中是可以學習的,初始化的時候可以選擇用雙線性插值;
- 得到的text block為什么不能直接看成是文本線,為什么還要單獨一步專門做文本線生成?
- 第一,當多條文本線靠得比較近時,容易被一個block包含;第二,text block得到的區域范圍太粗糙,並沒有准確的文本位置;
- 文本線方向估計的這個projection的算法實際是如何操作的?(遍歷h和θ?)
- 在文本線過濾中得到的質心圖是一個概率圖,如下圖所示,是一團白色區域,而不是唯一的一個點,每個字符最終是由一個質心表示么?如何確定這個唯一的質心?(使用類似於meanshift,nms找到極值點?)
- deconv中1*1的卷積作用是什么?
-
總結與收獲點
- 把text block(global)和character(local)的特點綜合起來,這個想法非常好,要把Faster RCNN與component的方法結合起來可以參考這篇文章的一些思想。
- 這是第一個用FCN來做文字的文章,雖然准確率高,但是pixel wise還是比較慢的。文字和其他目標檢測不大一樣,太細了。需要找其他方法來檢測text block。