綜述:基於深度學習文字檢測的十全大補丸
為了讓各位小哥哥和小姐姐全面地瞭解文字檢測,小女子獻上了本人的葵花寶典.由於知乎對文章字數有限制,本篇文章主要是簡單地介紹各大文字檢測的方法.本文中的部分方法,知乎專欄中已經有詳細的文章解讀;剩餘的部分方法,文章暫時還未釋出.碼字不易,特別是這麼冷的大冬天,如果各位小主覺得這篇文章對你有用,麻煩點贊.文章之後會持續更新
文字檢測的難點
- 背景多樣化.自然場景下,文字行的背景可以為任意,同時還會受一些結構相近的背景影響(如柵欄)
- 文字行形狀和方向的多樣化.如水平、垂直、傾斜、曲線等
- 文字行顏色、字型、尺度的多樣化
- 不同程度的透視變換
- 惡劣的光照條件和不同程度的遮擋
文字檢測的前世
在深度學習沒有火起來之前,文字檢測主要是以手動提取特徵為主,比較經典的特徵有SWT、MSER、HOG等.記得看早期版本的EasyPR(開源的車牌識別原始碼),裡面車牌區域定位就有用到MSER.下圖給出一個相對比較經典的傳統文字檢測流程:

文字檢測的今生
目前文字檢測領域的深度學習方法主要包括: 基於候選框的文字檢測(Proposal-based)、基於分割的文字檢測(Segmentation-based)、基於兩者方法混合的文字檢測(Hybrid-based)、其它方法的文字檢測 .對於基於候選框的文字檢測,其基本思路是先利用若干個default boxes(也稱anchor)產生大量的候選文字框,再經過NMS得到最終的檢測結果.對於基於分割的文字檢測,其基本思路是通過分割網路結構進行畫素級別的語義分割,再基於分割的結果構建文字行.

基於候選框的文字檢測(Proposal-based)
基於候選框的文字檢測,最經典的就是基於Faster-RCNN、SSD、RFCN.
基於Faster RCNN的文字檢測
- LSPR 該文章的主要思想是在傳統two-stage目標檢測框架的基礎上,增加了水平7個維度和豎直7個維度的各2個點的迴歸,減少網路計算量的同時加入了迴歸點的先驗知識,實現任意形狀的文字檢測.在構建最終的文字行時,可以根據文字行長邊與滑動線的點集(也可以根據兩個方向所有的點集,一般用普通四邊形)進行構建.

- FFST(特徵融合) 使用原生的Fast-RCNN框架做文字檢測可能存在的問題:原生RPN是基於單階段的特徵圖生成候選框,這裡本質就忽略了文字行的尺度.本文的思想很簡單,直接在Fast-RCNN的基礎上進行改進:即在RPN階段和Fast-RCNN階段使用特徵融合,目的是解決文字檢測中文字行尺度多樣化問題.對於RPN階段:融合了stage-3,stage-4層的特徵;對於R-CNN階段:融合了stage-3,stage-4,stage-5三層的特徵.注意:這裡特徵圖融合採用的是add操作(也可以使用concat操作代替),add操作可以加速收斂和提高準確率.本文的方法主要用於解決小尺度和大尺度的文字檢測

- RRPN RRPN沿用了Faster-rcnn中的RPN的思想(即使用其來生成候選區域),並在此基礎上進行了改進,提出了基於旋轉候選網路區域(RRPN).整個網路結構和Faster-rcnn非常相似,RRPN也是分成並行兩路:一路用於預測類別,另一路用於迴歸旋轉矩形框.RRPN模組主要是用於生成帶傾斜角的候選區域,該層輸出包括候選框的類別和旋轉矩形框的迴歸;再通過RRoI層(它扮演的是最大池化層的作用)將RRPN生成的候選框對映到特徵圖上,得到最終的文字行檢測結果.

- R2CNN R2CNN也是在Fast-RCNN基礎上進行改進的,其大體思路是先通過RPN產生不同方向文字的軸對齊矩形框,然後對RoI進行三種不同尺度池化,並將結果進行concatenated,最終得到文字分類、軸對齊(
)、傾斜box(
)

基於SSD的文字檢測
- SegLink SegLink是在SSD目標檢測方法的基礎上進行改進,其基本思想:既然一次性檢測整個文字行比較困難,就先檢測區域性片段,然後通過規則將所有的片段進行連線,得到最終的文字行,這樣做的好處是可以檢測任意長度的文字行.該方法提出了文字行檢測的兩個基本組成元素:segment和link;通過改進的網路同時預測不同尺度的segments和link;根據不同的link(層內連線(within-layer link)和跨層連線(cross-layer link))得到最終的文字行

- TextBoxes TextBoxes是在SSD的基礎上進行改進的.相比SSD做了以下的改進:1).修改了default box的apect ratio,分別為[1 2 3 5 7 10],目的是適應文字行長度比較長,寬度比較短的特性;2).提出了text-box層,修改classifier卷積核的大小為這樣做的目的是更適合文字行的檢測,避免引入非文字噪聲;3).提出了端到端的訓練框架,並通過增加文字識別來提高文字行檢測的效果

- TextBoxes++ TextBoxes++是TextBoxes的擴充套件版,同樣也是SSD的改進版,具體做了一下改進:1).修改最後的迴歸邊框,將TextBoxes的水平邊框改成普通四邊形(quadrilaterals)或旋轉矩形(rbox);2).修改了default box的aspect ratio(
);3).修改了網路結構中的部分引數,具體為:1).將TextBoxes中的最後的全域性平均池化層(global average pooling layer)改成卷積層;2).修改Text-box layer中的卷積核大小

- RRD RRD也是基於SSD的一個改進版本,其基本思想就是摒棄了先前目標檢測中分類和迴歸共享特徵圖的方式,而是採用相互獨立的方式(即分類基於旋轉不變性的特徵圖,迴歸採用的是位置敏感的特徵圖).本文的方法可以嵌入到任何已存在的目標檢測框架中,並可以在提升精度的前提下不大大增加運算時間,可用於檢測多方向文字

基於RFCN的文字檢測
- FEN FEN本質上是在R-FCN基礎上的改進,與原生的R-FCN不同的是增加了特徵融合、positive mining策略、自適應權重的位置敏感Roi層.主要貢獻如下:1).提出了FEN網路結構(Feature Enhence Network),對高維度和低維度的語義特徵進行融合,提高文字檢測的準確率和召回率.用於解決採用只利用3×3的滑動視窗特徵和利用高維度的特徵對目標檢測視窗進行精修的不足;2).提出了自適應權重的位置敏感Roi池化層,進一步提升文字檢測的準確率.用於解決通用目標檢測只利用單一權重的位置敏感Roi池化層;3)).提出了正樣本挖掘策略(positive mining strategy),解決文字檢測精修階段的正負樣本不均衡的問題

其它
- CTPN 文字檢測的難點在於文字的長度是不固定,可以是很長的文字,也可以是很短的文字.如果採用通用目標檢測的方法,將會面臨一個問題:如何生成好的text proposal.針對上述問題,作者提出了一個vertical anchor的方法,具體的做法是隻預測文字的豎直方向上的位置,水平方向的位置不預測。與faster rcnn中的anchor類似,但是不同的是,vertical anchor的寬度都是固定好的了,論文中的大小是16個畫素。而高度則從11畫素到273畫素(每次除以0.7)變化,總共10個anchor,用於檢測小尺度文字.接著採用RNN迴圈網路將檢測的小尺度文字進行連線,得到文字行.

基於分割的文字檢測(Segmentation-based)
基於Mask RCNN的文字檢測
- SPCNet SPCNet是在Mask RCNN上進行改進的,增加了文字上下文模組(TCM模組)和Re-score機制.引入文字上下文資訊模組的目的是解決False positive,它包括兩部分:金字塔注意力模組(PAM)和金字塔特徵融合模組(PFM).針對文字得分(Re-score)進行了重新設計,即融合得分:分類得分(CS)和例項得分(IS).

- MaskTextSpotter
整個網路結構沿用了Mask RCNN,包括四個元件:1).特徵提取主幹網路,採用的是ResNet+FPN;2).候選區域生成RPN;3).Fast RCNN迴歸邊框;4).mask分支,用於文字例項分割和字元分割;相比原生的Mask RCNN,MaskTextSpotter的創新點在於修改了mask分支的輸出,使其包含全域性文字例項分割和字元分割.
在訓練階段,RPN先生成大量的文字候選框,接著將候選框的RoI特徵分別送入Fast RCNN分支和mask分支,用於生成準確的文字候選框和文字例項分割圖及字元分割圖;
在測試階段,先使用Fast RCNN分支生成文字候選框(因為相比於RPN,它的輸出更為精確),然後再將其送入到mask分支生成文字例項分割圖和字元分割圖

基於FCN的文字檢測
- TextSnake 本文的主要貢獻就是提出了一種更加靈活的文字行表徵方式(TextSnake),可以很好地表徵任意形狀的文字行.它主要是通過一個個有序重疊的disk串聯組成,每個disk由圓心(對應的文字行區域的中心)、半徑、方向來表徵.文字行的表徵屬性(圓心、半徑、方向)有FCN來估計出.先使用FCN基礎網路預測文字行中心線(TCL)得分圖、文字行區域(TR)的得分圖、幾何屬性(
);然後用TR的map圖去掩膜TCL的map圖,得到mask TCL特徵圖;最後藉助並查集(disjoint set)執行例項分割。Striding Algorithm 用於提取中心軸點,並最終重建文字例項。

基於FCIS的文字檢測
- PixelLink
PixelLink放棄了邊框迴歸的思想,採用例項分割的方法,分割出文字行區域,然後直接找對應文字行的外接矩形框.論文中給出了兩種網路結構:PixelLink+VGG16 2s和PixelLink+VGG16 4s
對於PixelLink+VGG16 2s網路結構:其融合的特徵層包括:{conv2_2, conv3_3, conv4_3, conv5_3, fc_7},得到的特徵圖解析度為原圖的二分之一
對於PixelLink+VGG16 4s網路結構:其融合的特徵層包括:{conv3_3,conv4_3, conv5_3, fc_7},得到的特徵圖解析度為原圖的四分之一
整個實現過程包括兩部分:先通過深度學習網路預測pixel positive和link positive,並根據link positive連線pixel positive得到文字例項分割圖,然後從分割圖中直接提取文字行的bbox

- PSENet 形狀魯棒性文字檢測存在以下挑戰:1).現有的文字檢測是基於四邊形或旋轉矩形,很難將任意形狀的文字(特別是形狀文字)進行包閉操作;2).大多數基於畫素分割的方法不能很好地區分非常鄰近的文字例項.針對上述問題,PSENet提出了基於分割的單文字例項多預測的方法,它是一種基於語義分割的方法用於檢測任意方向的文字,採用了前向漸進式尺度擴充套件的方法用來區分鄰近的文字例項.PSENet沿用了特徵金字塔網路結構(簡稱FPN),並在此基礎上增加了特徵融合和漸進式尺度擴充套件的方式來實現自然場景中文字行的檢測,可以用於檢測非常相近的兩個文字行

- InceptText InceptText來自阿里團隊,是在FCIS的基礎上進行改進的,具體如下:1).提出Inception-Text module來解決多方向場景文字檢測,通過增加少量計算量來極大地提升準確率;2).在標準的PSROI池化模型的基礎上,提出可變形的PSROI池化模型,用於解決多方向文字檢測

- FTSN FTSN實際上是FCIS和FPN的一個組合,它是基於例項感知分割的端到端可訓練的多方向文字檢測,去除中間冗餘的步驟;在特徵提取階段,通過融合不同層的特徵圖來自適應生成更好的文字特徵表徵;後處理階段,採用了Mask-NMS用於處理傾斜文字框的去重,得到最終的文字行

基於混合的文字檢測(Hybird-based)
- EAST EAST思想非常簡單,結合了DenseBox和Unet網路中的特性,具體流程如下:1).先用一個通用的網路(論文中採用的是Pvanet,實際在使用的時候可以採用VGG16,Resnet等)作為base net ,用於特徵提取;2).基於上述主幹特徵提取網路,抽取不同level的feature map,這樣可以得到不同尺度的特徵圖.目的是解決文字行尺度變換劇烈的問題,ealy stage可用於預測小的文字行,late-stage可用於預測大的文字行;3).特徵合併層,將抽取的特徵進行merge.這裡合併的規則採用了U-net的方法,合併規則:從特徵提取網路的頂部特徵按照相應的規則向下進行合併,這裡描述可能不太好理解,具體參見下述的網路結構圖;4).網路輸出層,包含文字得分和文字形狀.根據不同文字形狀(可分為RBOX和QUAD),輸出也各不相同

- 角定位和區域分割的文字檢測 該文融合了檢測和分割的思路,使用default box的思路去迴歸到角點(corner point),然後對角點進行取樣和群組,獲取候選框,然後通過旋轉位置敏感分割圖得到score,然後濾除得分低的box,得到最終的文字檢測.通過結合目標檢測和目標分割,揚長避短,實現不定向的文字行檢測

- FTDN 基於focal loss的文字檢測(簡稱FTDN),它是基於FCN,在對分割文字行的同時進行畫素級的文字行邊框迴歸,將目標檢測中的focal loss應用到文字檢測的分割任務中,實現正負樣本比例不平衡、難易樣本的區分難的問題;提出了端到端的基於畫素級的分割和迴歸任務相合並的文字檢測框架,去除了額外的後處理操作

基於其它方法的文字檢測
- ITN ITN是一種新的例項轉換網路(Instance Transformation Network),它使用網內變換嵌入的方法學習幾何感知編碼,從而實現一次通過的文字檢測.具體的關鍵idea如下:1).提出了幾何感知用於表徵表徵文字行的獨特幾何結構,實現一次性通過的文字檢測;2).提出了網內變換嵌入模組,用於產生自然場景文字行的自適應表徵;3).提出了端到端的ITN(例項轉換網路),可以用於檢測多尺度、多方向、多語言的文字行,且不需要複雜的後處理步驟

各模型在ICDAR2015資料集上的測試結果
這裡評判的標準不一樣:如單尺度還是多尺度、尺度大小等等,這裡整理出來的指標僅供參考
