論文閱讀(1) —— Character Region Awareness for Text Detection

論文地址:https://arxiv.org/abs/1904.01941
Pytorch代碼實現 https://github.com/clovaai/CRAFT-pytorch
自制PPT下載地址:https://download.csdn.net/download/weixin_43575791/12322592

Introduction

(這部分可忽略,暫時爲保留完整性寫下來。)

深度學習出現之前,場景文本檢測是採用自底而上的方法,大多使用人工特徵,比如MSER or SWT 作爲基本成分。
而基於深度學習的文本檢測提出採用目標檢測或實例分割的方法,比如SSD,Faster R-CNN,FCN

基於迴歸的文本檢測:
和一般物體不同,文本形狀不規則,長寬比不同
爲了解決這個問題,TextBoxes改變卷積核和錨點邊框以便有效的捕捉不同的文本形狀。
DMPNet嘗試合併四邊形滑窗。
Rotation-Sensitive Regression Detector (RSDD):充分使用旋轉不變性,將卷積核旋轉。但是使用這種方法對捕捉所有可能的形狀存在結構制約

基於分割的文本檢測:
分割的方法致力於尋找像素級別的文本區域。
這些想通過估計詞的邊界區域來檢測文本的方法也使用分割作爲基礎
SSTD試圖從迴歸和分割兩種方法中受益,它使用了一種注意機制,通過減少特徵層上的背景干擾來增強文本相關區域。
TextSnake通過預測文本區域和中心線以及幾何屬性來檢測文本實例。

端到端的文本檢測:
端到端的方法將檢測和識別一起訓練,以利用識別結果來提高檢測準確性
FOTS and EAA 連接了最受歡迎的檢測和識別方法,並以端到端的方式訓練
Mask TextSpotter利用統一模型來把識別任務作爲一個語義分割問題處理
很明顯,使用識別模塊進行訓練有助於文本檢測器對類似文本的背景雜波具有更強的魯棒性。
大多數方法以檢測單詞作爲單元,但是檢測字母的邊界也很重要。因爲 劃分單詞的標準很多,比如空格、顏色,意思。

CRAFT

CRAFT全稱:Character Region Awareness for Text Detection,是一種文字檢測方法。

公開數據集一般都是單詞級標註,合成的圖像有字符級標註,本文利用單詞級標註的真實圖片和字符級標註的合成圖片訓練craft模型。craft可以定位字符區域,並且把檢測到的字符連成文字實例。craft使用弱監督框架,在現有的單詞級數據集基礎上估計字符級真值。
craft很靈活,可檢測長的、彎曲的、任意形狀的文本

其效果圖下圖
在這裏插入圖片描述

Architecture

backbone爲帶BN層的VGG16
上採樣部分採用和U-net類似的跳躍連接,可以聚合低層次的特徵圖
輸出爲兩個通道,區域分數以及關聯分數
其中,區域分數代表給定像素是字符中心的概率,用來定位單個字符;
關聯分數代表相鄰字符間距中心的概率,用來把每個字符組合成實例。

網絡結構如下圖:
在這裏插入圖片描述

Training

訓練過程如下圖:
在這裏插入圖片描述
首先,用來訓練的圖片分爲兩類。
一是隻有單詞級標註的真實圖片
二是人工合成的圖片,人工合成的圖片有字符級標註
 
網路訓練過程整體上爲,將圖片輸入網絡,輸出預測的the region score and the affinity score,然後有每個字符有pseudo-ground truth,通過使得損失函數最小不斷調整網絡中的權重及偏置項,得到訓練好的模型。
 
但是,這裏有兩個問題是
一、和預測的the region score and the affinity score相對應的Ground Truth Label如何產生
二、真實圖片是沒有字符級標註的,如何產生字符級標註(解決了第一個問題,且有了字符級標註後,真實圖片也按照同樣的方法生成Ground Truth Label)

對於第一個問題,如何產生Ground Truth Label,作者解決辦法如下:
在這裏插入圖片描述
首先這個辦法的前提是有字符級標註。
生成辦法如下:
1、affinity box生成過程:
1) 連接每個字符邊框對角,產生兩個三角形,分別爲上、下字符三角形
2) 對每一對相鄰字符框,上下字符三角形的中心作爲角,就產生affinity box

2、分數生成過程:
1)準備2維等向高斯熱圖
2)在高斯熱圖區域和每一個字符邊框之間計算透視變換
3)變換高斯熱圖到字符邊框區域

也就是,原本字符級標註就是有字符邊框的,有了字符邊框,自己設置高斯熱圖(也就是字符中心概率分佈設爲二維高斯分佈),經過透視變換,就產生了 region score GT。affinity box生成過程幫我們產生了關聯邊框,有了邊框就可以用同樣的方法產生affinity score GT 了。

到現在爲止,只要有字符級標註,就可以產生對應的分數標籤,the region score and the affinity score。
這隻解決了上述的第一個問題:Ground Truth Label如何產生,還有第二個問題:真實圖片沒有字符級標註怎麼辦?

解決辦法如下:
在這裏插入圖片描述
總之是要想辦法把字符分開。
文章採用分水嶺算法(watershed algorithm)分開字符,具體如下:
把圖片中單詞級標註的區域裁剪下來,用本文之前介紹的以VGG16爲backbone並能產生region score and affinity score的網絡預測出region score,然後應用分水嶺算法,產生字符邊框,並還原到原圖片上。

關於分水嶺算法如何產生邊框的,不做過多描述,可參考其他博客。這裏簡述如下:
任何一副灰度圖像都可以被看成拓撲平面,灰度值高的區域可以被看成是山峯,灰度值低的區域可以被看成是山谷。我們向每一個山谷中灌不同顏色的水。隨着水的位的升高,不同山谷的水就會相遇匯合,爲了防止不同山谷的水匯合,我們需要在水匯合的地方構建起堤壩。不停的灌水,不停的構建堤壩知道所有的山峯都被水淹沒。我們構建好的堤壩就是對圖像的分割。

下附分水嶺算法示意圖
在這裏插入圖片描述
 

上述這種利用真實圖片的單詞級標註來產生字符級標註,進而用來訓練模型的方式,稱爲弱監督學習方式,也是本文的一大特色。

現在,兩個問題都解決了

下面定義損失函數:
首先,說明數學符號的含義:
在這裏插入圖片描述
然後:
在這裏插入圖片描述
當一個單詞級標註的樣本,經過上面說過的字符級標註過程,產生字符級標註的時候,會預測出lc(w)個字符,實際上的真實字符數是l(w),前面我們都沒有講過,如何評定產生的字符標註的準確性,這個公式可以代表一個置信分數,觀察這個公式可以發現,預測的字符數和真實字符數越接近,即lc(w)和l(w)越接近,置信分數越大,可信度越高,當兩者相等時,Sconf(w)=1。

下面一個公式:
在這裏插入圖片描述
這個公式是在定義每個像素的的置信度,當像素p屬於樣本w的區域時,像素p的置信度爲樣本w的置信分數,其他區域設爲1。這裏可以理解爲,其他區域確定不是字符所在區域,所以概率爲1。同時,對於合成圖像來說,由於其字符級標註不是預測的,所以所有像素的置信度都設爲1,即 Sc(p) =1

最後一個公式,也就是最重要的損失函數:
在這裏插入圖片描述
可以看到,最小化損失函數,也就是在不斷調整網絡權重,使網絡預測的the region score and the affinity score更接近pseudo-ground truth,這裏可以認爲Sc(p)是權重。

Inference

對於任意形狀文本,可以產生多邊形
在這裏插入圖片描述
具體來說,可以先產生一個矩形框QuadBox,步驟如下:
1)先生成一個二值圖M,初始化爲0
在這裏插入圖片描述
Tr:區域分數 (the region score) 閾值
Ta:關聯分數 (the affinity score) 閾值
對於每個像素,分數超過相應的閾值,則設爲1,其他設爲0

2)Connected Component Labeling (CCL)
進行區域連通標記。

3)找到最小面積外接矩形

關於區域連通標記:
區域連通標記指的是,找出圖像中連通區域並且標記,處理對象一般爲二值化圖像
而連通區域一般有4 - 鄰域連通和8 - 鄰域連通,如下圖:
在這裏插入圖片描述

除了可以生成矩形框,也可以爲任意文本形狀生成多邊形邊框,做法如下:
1)沿着掃描的方向,找到每個字符局部極大值線。
將局部極大值線的長度相等地設置爲其中的最大長度,以防止最終的多邊形變得不均勻,即圖中藍色線
2)連接每個局部極大值線的中心,即圖中黃色線
3)將藍色線旋轉到與黃色線垂直來反映傾斜角,旋轉後的線即圖中紅色線
4)局部極大值線的端點即是多邊形的控制點,即圖中綠色圓圈
5)將兩邊的極大直線向外移動,即得最外面的控制點,以覆蓋文字區域,即圖中兩端最外面的紅色線,即其綠色端點

Experiment

關於試驗部分,簡單介紹如下:

評價指標:recall, precision and H-mean

Datasets: IC13、IC15、IC17、TD500、TotalText、CTW

Training strategy
first use the SynthText dataset to train the network for 50k iterations,
then each benchmark dataset is adopted to fine-tune the model.

優化:ADAM optimizer
GPU:多GPU,訓練和監督GPU分離,產生的pseudo-GTs保存在內存中
fine-tuning:SynthText dataset 使用比例1:5確保字符分開
On-line Hard Negative Mining:使用,1:3
Data augmentation techniques:crops, rotations, and/or color variations

Datasets

總結了一下文中用的數據集信息:
在這裏插入圖片描述

CTW-1500數據集只含有多邊形標註但是沒有文本轉錄,且只有行級標註,不提供空格作爲分隔符,這和我們所假設的 字符中間有空格的affinity score得分爲零相去甚遠。
因此爲了得到單一多邊形(即一行文字用一個多邊形框出來),使用了一個淺層網絡進行連接細化,如下圖:
在這裏插入圖片描述
這個網絡是將CRAFT產生的the region score and the affinity score以及stage4產生的特徵作爲輸入,ASPP確保大的感受野,將距離遠的字符和單詞組合到同一文本行上,輸出Link score ,並用Link score 替換 affinity score

這裏,CRAFT的作用是定位單個字符,LinkRefiner的作用是結合字符以及由空格分開的單詞。

效果如圖:
在這裏插入圖片描述

Discussions & Conclusion

Robustness to Scale Variance: 相對小的感受野足以覆蓋大圖像中的單個字符,在檢測尺度不同的文本時具有魯棒性

Multi-language issue:孟加拉文字和阿拉伯文字比較潦草,且合成數據集裏面沒有,故不能很好分開這兩種字符

Generalization ability:泛化能力很好

CRAFT通過the character region score and the character affinity score的結合,檢測各種形狀的文本;弱監督的學習方式解決了真實數據集字符級標註少的問題
 
 
 
搜了兩張孟加拉文字和阿拉伯文字的圖片,如下:
在這裏插入圖片描述
在這裏插入圖片描述

模型測試效果如下:
在這裏插入圖片描述

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