「ECCV2018」「端到端文字識別」

SIGAI特約作者

謝恩澤

同濟計算機研三在讀,

face++ 研究實習生

主要研究方向為目標檢測,語義分割等

其中包括文字檢測和識別

「ECCV2018」「端到端文字識別」

前言:這篇文章是第一個做彎曲文本的端到端檢測+識別。

傳統的方法將文字檢測和文字識別分為兩個分開的部分,即輸入一張圖,先進行文字檢測,檢測出文字的位置,再進行文字識別,即對檢測出的文字摳出來並送入識別網絡。這樣一方面比較費時間,第二沒有共享檢測和識別的特徵。

一 什麼是端到端檢測識別?

即只需要一個網絡,輸入一張圖片,同時輸出檢測和識別的結果,相比傳統先檢測再識別的好處在於

(1)速度更快,因為流程更簡單

(2)效果更好,由於多任務學習使得網絡能提取更為魯棒的特徵,每一個任務都可以有一定程度的提高。

端到端訓練文字檢測和識別可以使得這兩個任務都能得到提高,使得梯度能從這兩個分支分別回傳到主幹網絡,能使得定位更加精準並減少錯誤樣本的檢測。

傳統做法大多數分為以下四步

(1)檢測出旋轉的文字框

(2)並做一個仿射變換

(3)在feature map上將文字區域摳出來

(4)用crnn或者類似sequence的方法識別。

這種方法的缺點在於文字可能檢測的不夠精準,這樣對於識別來說就會造成一定困難,比如文字邊緣多框了一些空白區域等。

二 彎曲文本的檢測和識別

彎曲文本檢測:過去的方法主要解決水平文字檢測或者傾斜的文字檢測,而彎曲文字在自然場景中大量出現,如星巴克標誌。

「ECCV2018」「端到端文字識別」

水平文字檢測只需要檢測出文字的左上角和右下角,即4個變量[x1,y1,x2,y2]

傾斜文字一般有兩種方法,1是用4個點表示,即8個變量,[x1,y1,x2,y2,x3,y3,x4,y4],2是用水平矩形+旋轉角度表示,需要5個變量,[x1,y1,x2,y2,theta]

而彎曲文字往往需要用更多的點才能精準描述。如下圖所示。

因此,過去的方法無法很好的適應彎曲文字檢測的任務。

「ECCV2018」「端到端文字識別」

傳統文字識別的方法是把文字區域當做一個序列,用lstm從左到右掃描文字,得到文字識別結果,代表方法為CRNN,這種方法對於水平的文字效果很好,但是對於彎曲的文字效果卻很差。

彎曲文本識別的難度在於水平檢測框或者四邊形檢測框 做仿射變換,如下圖所示

(1)無法精準定位文字區域,水平檢測框和四邊形檢測框中文字區域都只佔據很小的一部分,大部分都是背景,而基於分割的方法可以準確的包圍彎曲文字區域。

(2)水平或者傾斜檢測框無法扭正文本,因此基於lstm的CRNN識別方法效果就會很差,而用實例分割的方法可以精準檢測文字並識別

「ECCV2018」「端到端文字識別」

三 網絡結構介紹

該方法是基於Mask R-CNN的,Mask R-CNN是Facebook提出的通用物體檢測分割框架,可以同時對80類物體做檢測和分割,其中有三個分支

(1)classification分支,用來對目標分類

(2)bounding box regression分支,用來定位物體

(3)mask分支,用來對框內的物體做實例分割。如下圖所示

「ECCV2018」「端到端文字識別」

「ECCV2018」「端到端文字識別」

這篇文章是基於mask rcnn的,流程圖如下。

創新點主要是對mask分支進行了改進,其中把mask 分支做了類似於人體關鍵點的檢測,把一個個字符當做整個文字的關鍵點,即不僅對bounding box內的整個文字區域做instance segmentation,同時對每個字符做分割,這裡要注意的是每個字符的標註並不來源於真實數據,而是來自於人造數據集synth800k數據,因為真實數據集中往往只有單詞級別的標註,並沒有字符級別的標註。

「ECCV2018」「端到端文字識別」

這篇文章的創新之處主要在於在mask 分支加入了文字識別的分支,詳細分析一下mask 分支

可以看到mask 分支一共分三部分,第一部分是global word map,第二部分是每個字符的character map,這關係到如何識別,第三部分是字符的關鍵點,即background map,用來區分背景和字符

「ECCV2018」「端到端文字識別」

(1) global word map 和標準的mask rcnn分割的分支一樣,目的是分割出word的區域。

(2) character maps 該map的channel數量和要識別的文字類別一致,一般數據集為36(10數字+26字母),即對所有字符的中心做語義分割,這個字符屬於哪一類就會在channel對應層上響應最高。

(3) bachground map 是定位字符的,和(2)類似,但是不需要區分是哪個字符,只需要區分是不是字符。

識別是通過一種 叫pixel-voting的方法,即通過bachground map去算他在36個字符的fmap上的響應,通過投影的方式,取響應最大的當做類別。

可以說這是一種基於語義分割的方法的文字識別。

pixel-voting做文字識別

「ECCV2018」「端到端文字識別」

上圖 描述了(2)(3)如何做文字識別的細節。通過background map中的字符位置投影到character map上,去計算在每一層的響應值,哪一層響應最大,就認為這個字屬於哪一類。主要是通過pixel-voting的方法。

通過這種方法識別的好處在於:

(1)借鑑了語義分割的思路,直接分割出字符的中心區域並判斷類別

(2)拋棄了基於lstm的序列識別的方法,因此對於無論是水平文字還是彎曲文字識別效果都很魯棒。

標籤生成

訓練神經網絡需要label,如何準備label呢?

「ECCV2018」「端到端文字識別」

可以看到,左圖中藍色的水平box是rpn 產生的候選框,紅色的多邊形框是word的真實框,黃色的box是每個字符的真實 box框,綠色的水平框是紅色多邊形的最小外接矩形框。 右邊:上圖是mask rcnn做實例分割的label,下邊是根據黃色框進行等比例縮圈得到的不同字符的語義分割的label(不同顏色代表不同字符。)

細節:其中大量的字符標註(黃色框)不來源於真實數據集,而是來自人造數據集Synth800k,其中包括了80萬張人工合成圖。

實驗結果

「ECCV2018」「端到端文字識別」

可視化結果:作者在icdar2013,2015和total-text上做了實驗,效果還是很不錯的,紅色框表示fast rcnn分支出的水平box,白點是每個字符的定位。

作者對比Textboxes+CRNN這種水平box檢測識別的效果,這種方法在彎曲文本上優越性的確更強。

可以看到Textboxes檢測只能檢測水平框,精準度很低,其次這樣檢測出的結果送給識別網絡效果很差,很多地方都識別錯了。

「ECCV2018」「端到端文字識別」

實驗數據:

作者分別在ICDAR2013,2015和Total-Text這三個數據集上做了實驗。

ICDAR2013是水平文本,ICDAR2015是多方向文本,Total-Text是彎曲文本,因此這三個數據集代表了不同類型的文字檢測識別任務。

可以看到所提出的方法在彎曲文字上大幅度超過現有方法,在傳統的水平和多方向文字檢測識別上效果也領先現有的方法。

「ECCV2018」「端到端文字識別」

「ECCV2018」「端到端文字識別」

「ECCV2018」「端到端文字識別」

總結:

這個方法是一個可以端到端檢測和識別彎曲文字的方法,基於目前最好的實例分割模型Mask R-CNN,對於曲形文字的端到端識別基於top-down自頂向下的方法基本是做的很好了。

此外該方法有一個缺點,對於中文識別估計效果不好,因為中文類別數太多,他們識別的feature map層數和類別成正比,因此feature map層數會很大,會很拖累速度。

不過瑕不掩瑜,該方法是第一個嘗試做端到端的彎曲文字檢測和識別,創新度非常高,其中在Mask分支通過關鍵點的思路做文字識別更是首創,值得大家多學習一下。


分享到:


相關文章: