自然場景文字檢測CTPN原理詳解
阿新 • • 發佈:2018-12-28
自然場景文字檢測CTPN流程詳解
標籤: 文字檢測 CTPN tensorflow
說明: 借鑑了網上很多資源,如有侵權,請聯絡本人刪除!
摘要
對於自然場景中的文字檢測,難點是:字型多變、遮擋、不規則變化等,其實對於實際的應用場景,針對自己的需求可以採用通用的目標檢測框架(faster Rcnn,SSD,Yolo,Retina)等網路,或許也能滿足專案的需求。
而CTPN等用於文字檢測的方法,對自然場景的文字檢測具有更強的魯棒性,就是針對文字檢測較SSD,Yolo等可能具有更高的精度;其次文字檢測中涉及到旋轉和仿射變化等,此時,通用的目標檢測框檢就不合適。
CTPN優點
- 採用固定寬度的anchor,只做一個h迴歸
- 特徵提取的過程中採用VGG作為base net 再加上一個conv3×3_512,再以W方向為序列(sequence),512為特徵數(input feature),經過雙向LSTM。主要目的,提高特徵之間的練習
- 這裡有一個疑問,既然在W方向送入LSTM,進行了特徵增強,那是否可以在H方向增強特徵的聯絡。
網路模型與前向傳播過程
模型結構如上圖所示
整個模型的前向傳播過程如下(以1張圖片為例):
- 採用VGG16作為base net進行特徵提取。假設經過VGG之後的feature map為:W×H×C。
- 增加一個conv3×3_512的卷積層,(這一步網上好多說是用3×3的視窗做滑窗,我看tensorflow的原始碼,就是做了一個卷積,具體可查原論文和official code)。這一步的輸出還是為:feature map:W×H×C=512。
- 將上一步的feature map reshape為LSTM的輸入格式,LSTM採用128個隱藏節點的雙向Bilstm,輸出之後再接256×512的線性層,線性層輸出之後再reshape為1×W×H×C,即和輸入尺寸一樣;在tensorflow中上一步的feature map reshape為:[1 × H, W, C=512],應該是(batch, steps, inputs)的格式,因為是增強特徵在W方向的聯絡,於是應該以W為steps。這一步的輸出為:feature map:1×W×H×C=512。
- 線性迴歸層512×(10×4)做anchor的座標預測,512:每個點的特徵數,10:每個點有10個不同高度的anchors,4:一個anchor有4個座標點(xmin,xmax,ymin,ymax);線性迴歸層512×(10×2)做類別預測,2:兩個類別,是文字,不是文字。這一步的輸出為:box_coordinate_pred:1×W×H×(104),box_label_pred:1×W×H×(102),
- 共生成W×H×10個anchors,採用和faster rcnn類似的策略對每個anchor,指定target_box和target_label
- 計算交叉熵和座標點的L1smooth loss。tensorflow原始碼中還回歸輸出了inside_weights和outside_weights,兩個都為:1×W×H×(10*4),這個不知道怎麼用的。
訓練
對於每一張訓練圖片,總共抽取128個樣本,64正64負,如果正樣本不夠就用負樣本補齊。這個和faster rcnn的做法是一樣的。
測試 TODO
- TO DO …
Tricks
- 採用densenet,resnet等最新的base net,這裡安利一下pytorch,tensorflow的模型建模和除錯確實沒有pytorch方便
- 對H方向也採用一定策略(LSTM或其他方法)進行特徵增強