1. 程式人生 > >場景文字檢測之CTPN

場景文字檢測之CTPN

整體框架:


(1)首先一張圖片經過VGG16基礎網路,在conv5_3層引出,一共經過4個pooling操作,所以此時的conv5的大小為原圖的1/16,維度為b*h*w*c(c=512)。

(2)在featuremap conv5上,由一個3*3的滑動視窗進行width方向的滑動。每一個3*3*c的向量會經過BLSTM轉化為256維的向量。然後一共w個這樣的向量,維度為b*h*w*c(c=256)。

(3)經過一個512維度的全連線層,維度變化為b*h*w*c(c=512)。

(4)這裡k為anchor的個數,一共包含10個anchor,即k=10,從11-273畫素,每次乘以1.4。該階段分別輸出垂直迴歸的中心點偏移和高度的偏移(vertical coordinates),維度為b*h*w*c*k(c=2,k=10),每個anchor迴歸的框的得分(score),維度為b*h*w*c*k(c=2),邊框邊緣的左右偏移值(side-refinement),維度為b*h*w*c*k(c=1)。

CTPN核心思想:

如上圖所示,左面為傳統RPN預測的框,右面為CTPN的框。由於RPN中anchor感受野的問題,不可能有一個anchor可以像傳統的人車物檢測那樣覆蓋了整行的文字。因此CTPN提出了寬度固定為16個畫素的anchor策略。然後再將所有anchor預測結果進行NMS合併。

整體的思想還是非常novel的。

LOSS:


CTPN整體包含了3個loss,分類的Ls,邊框迴歸的Lv,邊框左右的迴歸的偏移Lo。

Ls為傳統的softmax_cross_entropy_loss,其中,i表示所有預測的anchor中的第i個,Si_hat={0,1},Ns為歸一化引數,表示所有的anchor的總和。

Lv使用的smooth_L1_loss,其中,j表示所有IOU>0.5的anchor中的第j個,Nv為歸一化引數,表示所有的anchor和groudtruth的IOU>0.5的anchor數總和。λ1為多工的平衡引數,λ1=1.0。


引數v的解釋如上面的式子。實際需要預測的數值就是vc和vh,groundtruth為vc_hat和vh_hat。vc表示了實際的中心座標和anchor中心的偏移,然後和anchor高度的比值,一句話說,就是,相對於anchor的中心座標的歸一化偏移量。同理,vh表示了歸一化後的高度的伸縮量。

在實際預測的時候,只需要將式子反過來算,就可以算出cy和h,也就是最終的邊框的中心座標和高度。

Lo也是使用的smooth_L1_loss,其中,k表示邊界anchor中的第k個,即預測和groundtruth相距32個畫素的邊界anchor的集合。Nv為歸一化引數,表示所有邊界anchor數總和。λ1為多工的平衡引數,λ1=2.0。

o表示在x方向的歸一化的偏移量。cx表示anchor的中心,Xside表示預測的中心。

如上圖,紅色的表示有side-refinement的結果,黃色為沒有side-refinement的結果。可以看出經過side-refinement操作,可以使得邊界更準確。

雙向LSTM:


上圖第一行表示沒有使用BLSTM,第二行表示使用了BLSTM,可以看出,BLSTM可以起到將斷開的區域連線起來的效果。並且使得邊界更加準確。

總結:

優點:

CTPN對於檢測的邊框在上下左右4個點上都比較準確,這點比EAST要好。

缺點:

(1)CTPN只可以檢測水平方向的文字,豎直方向的話就會出現一個字一個字斷開的想象。傾斜角度的話需要修改後處理anchor的連線方式,但是應該會引入新的問題。

(2)CTPN由於涉及到anchor合併的問題,何時合併,何時斷開,這是一個問題。程式使用的是水平50個畫素內合併,垂直IOU>0.7合併。或許由於BLSTM的引入,導致斷開這個環節變差。所以對於雙欄,三欄的這種文字,ctpn會都當做一個框處理,有時也會分開處理,總之不像EAST效果好。