Lukas Neumann——【ICCV2017】Deep TextSpotter_An End-to-End Trainable Scene Text Localization and Recognition Framework
目錄
- 作者和相關鏈接
- 方法概括
- 方法細節
- 實驗結果
- 總結與收獲點
- 參考文獻和鏈接
作者和相關鏈接
- 作者
方法概括
-
方法概述
- 該方法將文字檢測和識別整合到一個端到端的網絡中。檢測使用YOLOv2+RPN,並利用雙線性采樣將文字區域統一為高度一致的變長特征序列,再使用RNN+CTC進行識別。
-
文章亮點
- 檢測+識別在一個網絡中端到端訓練
- 速度很快(100ms/每張圖,注意是檢測+識別!)
-
主要流程
-
- 如上圖,整個端到端識別分為四步:
-
檢測:用去掉全連接層的YOLOv2框架進行fcn+RPN,得到候選文字區域
-
雙線性采樣(實際上是一個Spatial Transform module):將大小不同的文字區域統一特征映射為高度一致寬度變長的特征序列
- 識別:將特征序列用rnn得到概率矩陣(帶recurrent的fcn),再接CTC得到識別字符串
-
最后利用識別的打分情況反過來對檢測的boundingbox進行nms,得到精確的檢測框
-
- 如上圖,整個端到端識別分為四步:
方法細節
-
檢測的FCN網絡
-
使用YOLOv2的前18個convolution layer和5個max pool layer,去掉了最后的全連接層
-
最后輸出的feature map是:W/32 * H/32 * 1024
-
-
Region Proposals
-
采用類似於RPN的anchor機制
-
回歸參數5個,除了正常的RPN回歸的x, y, w, h的相對值,還有角度ɵÎ[-pi/2, pi/2] (這個怎么加入loss?)
-
每個anchor點有14個anchor box,這14個anchor box的scale、aspects(angle范圍怎么設?)通過在訓練集上用k-means聚類得到
-
正負樣本選擇:IOU最大為正anchor box,其他均為負樣本(合理嗎?)
- NMS使用:利用識別結果對檢測結果進行反饋調整(取識別分數大於閾值的所有框進行nms)
-
-
Bilinear Sampling
-
這步的目的
-
將前面detection得到的大小不同的region proposal對應的feature統一成固定高度的feature(為了輸入到識別的CNN中,識別的CNN有recurrent network,需要固定高度,但寬度可以變長),並且保持特征不會形變太多;
-
- 這一步為什么不直接用Faster R-CNN中的ROI pooling?
- 答: 第一是因為ROI pooling實際上是固定網格,不論原proposal有多長,最后都會變成比如7*7的網格。而實際的text proposal,文字是變長的,固定網格有可能導致text被拉伸或壓縮,造成大的形變;第二(更重要的是)是因為采用ROI pooling只是水平和豎直的grid,無法處理旋轉或形變情況。
-
-
- Bilinear Sampling是什么?
- 文中用的bilinear sampling 是一個以bilinear interpolation kernel為核的Spatial Transformer。
- Bilinear Sampling是什么?
-
-
- 一個Spatial Transformer的結構分為三個部分,Localisation net,Grid generator,和Sampler。Localisation net負責學習一組參數(下一步生成網格要用的),其輸入為原特征feature map(記為U),輸出即參數ɵ。Grid generator負責給定參數ɵ時生成網格Tɵ(G)。最后的Sampler負責把網格Tɵ(G)打在原feature map上,生成最后transform之后的特征(記為V)。
-
-
-
- Spatial Transformer簡單來說,實際上是用來做特征變換的,包括扭曲、旋轉、平移、尺度變換,它的特點是這個變換的參數不是固定的,而是根據每個樣本的不同自己學出來的。
-
-
-
- Bilinear Sampling特征映射公式如下:
-
-
-
-
- κ(v) = max(0, 1 - |v|)是一個bilinear sampling kernel,T即為學出來的網格,實際上是一個坐標變換(就是一個矩陣)。
- STN詳見論文:Spatial Transformer Networks(參考文獻1)
- Bilinear sampling kernel詳見論文:Image Fusion Using LEP Filtering and Bilinear Interpolation(參考文獻2)
-
-
-
識別
- 傳統的變長word識別思路
- 一個超大類分類器(每一個單詞就是一類)
- 多個二類分類器(每一個位置預測一下是哪一類,類數=字符的總類數,例如英文就是62類)
- 識別流程
- 識別FCN(帶RNN的)+ CTC(Connectionist Temporal Classification)
- 識別FCN
- 一堆conv + pool + recurrent conv + batch norm,最后接一個softmax
- 傳統的變長word識別思路
-
- CTC(Connectionist Temporal Classification)
- CTC的功能在於可以根據一個概率矩陣得到最可能的序列結果。這個輸入的概率矩陣設為A(i, j),i Î[1, m],jÎ[1, n],m表示字符的類別總數(包括背景類,英文即為63類),是一個固定值,n與輸入的圖像長度相關(本文n=w/4)。A(i, j)可以理解為在水平位置i的滑窗里包含第j個字符的概率大小。輸出的序列結果例如“text”等即為最終的識別結果。
- CTC(Connectionist Temporal Classification)
Figure 4. Text recognition using Connectionist Temporal Classification. Input W × 32 region (top), CTC output W 4 × |A| ˆ as the most probable class at given column (middle) and the resulting sequence (bottom)
-
-
- CTC操作首先去掉空格和重復的字符(即為化簡),然后對化簡之后得到同一個單詞的串概率求和,最后取總概率最大的字符串即為最終的識別結果。
-
-
Training
-
檢測和識別單獨預訓練,然后端到端再合起來訓練
-
檢測預訓練:SynthText (80萬),3epoch,ImageNet預訓練模型
-
識別預訓練:Synthetic Word(900萬),3epoch,隨機初始化N(0,1)
-
合起來訓練:SynthText + Synthetic Word + ICDAR2013-train + ICDAR2015-train, 3epoch,每張圖隨機crop30%,momentum = 0.9,lr = 0.001,每個epoch將10倍
-
實驗結果
- 速度說明
- Nvidia K80 GPU
- ICDAR2013:圖像大小resize成544*544,100ms/每張圖
- ICDAR2015:圖像大小608*608,110ms/每張圖
- ICDAR2013
- ICDAR2015
總結與收獲
- 檢測這邊基本上是用yolov2,不一樣的點在於:第一,加了角度信息;第二,anchor的選擇是通過kmeans確定的,雖然有點trick,但感覺也挺有道理的,雖然作者沒有驗證這樣做的generalization;
- 個人覺得文中最好的點是加入了spatial transform(文中叫bilinear sampling),雖然也不是作者提出的,但作者用在檢測+識別中間是第一個,也很有意思。值得一提的是,stn的paper中說stn沒有增加多少耗時;
- 識別這邊像是自己設計的簡化的網絡,RNN+CTC是正常的識別方法;
- 端到端訓練可以借鑒,先預訓練檢測+預訓練識別+合起來訓練。
參考文獻
- M. Jaderberg, K. Simonyan, A. Zisserman, et al. Spatial transformer networks. In Advances in Neural Information Processing Systems, pages 2017–2025, 2015. 2, 3
- Raveendran H, Thomas D. Image Fusion Using LEP Filtering and Bilinear Interpolation. International Journal of Engineering Trends and Technology (IJETT) 2014, Volume 12 Number 9