EAST模型與seglink模型
一、EAST(Efficient and Accuracy Scene Text)模型
相關資料:https://blog.csdn.net/attitude_yu/article/details/80724187(中文翻譯)
論文原文:https://arxiv.org/abs/1704.03155
代碼地址:https://github.com/argman/EAST
內容:
1.概述:該模型只有兩個階段:
第一個階段是基於全卷積網絡(FCN)模型,直接產生文本框預測;
第二個階段是對生成的文本預測框(可以是旋轉矩形或矩形)經過非極大值抑制(NMS,簡單地說就是基於高度相關的條件下通過閾值合並相鄰文本框)以產生最終結果。該模型放棄了不必要的中間步驟,進行端到端的訓練和優化
2.網絡結構
特征提取-特征合並-輸出層
輸入:雖然這個網絡中沒有提輸入,但是還是有必要簡單了解一下,該模型的輸入的圖像為512x512;
此外,雖然原文用的PVANet網絡,但實際運用中多采用vgg16;
特征提取:首先,利用在ImageNet數據集上預訓練的卷積網絡參數初始化;然后,基於VGG16模型從特征提取階段中提取四個級別的特征圖(記為fi),其大小分別為輸入圖像的1/32 1/16 1/8和1/4。另外,提取了pooling-2到pooling-5后的特征圖用於特征合並。
特征合並:逐層合並,在每個階段合並。
首先,將來自上一個階段的特征圖首先被輸入到一個unpooling層來擴大其大小;然后,與當前層特征圖進行合並(通道);最后,通過conv1×1 減少通道數量和計算量;conv3×3,將局部信息融合以最終產生該合並階段的輸出。在最后一個合並階段之后,conv3×3層會生成合並分支的最終特征圖並將其送到輸出層。
輸出層:
包含若干個conv1×1操作,以將32個通道的特征圖投影到1個通道的分數特征圖Fs和一個多通道幾何圖形特征圖Fg。幾何形狀輸出可以是RBOX或QUAD中的任意一種
RBOX:幾何形狀由4個通道的水平邊界框(AABB)R和1個通道的旋轉角度θ表示。AABB 4個通道分別表示從像素位置到矩形的頂部,右側,底部,左側邊界的4個距離
QUAD:使用8個數字來表示從矩形的四個頂點到像素位置的坐標偏移,由於每個距離偏移量都包含兩個數字(Δxi;Δyi),因此幾何形狀輸出包含8個通道。
3.關鍵操作
(a)文本矩形(黃色虛線)和縮小的矩形(綠色實線); ——縮小:一般將標注框縮小0.3比例的大小進行訓練,減少標注誤差。
(b)文本score 特征圖;
(c)RBOX框幾何圖;
(d)每個像素到矩形邊界的4個通道距離;
(e)旋轉角度。
對上述過程總結:
首先,縮小矩形,然后生成一個旋轉矩形,以最小面積覆蓋該區域;然后,對於RBOX標注框,計算每個有正分數的像素與文本框4個邊界的距離;對於QUAD 標注框,計算每個有正分數的像素與文本框4個頂點的坐標偏移。
NMS:局部感知(本文提出逐行合並幾何圖形,假設來自附近像素的幾何圖形傾向於高度相關)
1.先對所有的output box集合結合相應的閾值(大於閾值則進行合並,小於閾值則不合並),將置信度得分作為權重加權合並,得到合並后的bbox集合;
2.對合並后的bbox集合進行標准的NMS操作。
4.損失函數:
其中,Ls和Lg分別表示分數圖和幾何圖的損失,λg表示兩個損失之間的重要性(本文實驗λg=1)
對應的值:ls:分數損失,是指預測值與標注值之間的損失,具體采用的方法是:類平衡交叉熵(解決類別不平衡訓練)
lg指圖形損失:包括RBOX的損失,采取的是IOU損失以及角度損失;和QUAD損失,計算的則是文本框的預測偏移量。
二、SEGlink
1.論文網址:https://arxiv.org/abs/1703.06520
2.代碼地址:https://github.com/bgshih/seglink
3.具體實現解讀:
(1)網絡結構圖
輸入與輸出:
首先是輸入,因為網絡全部采用卷積結構,所有對輸入圖片大小沒有要求,可以是任意大小和任意長寬比
輸出文章稱為segments和links。segments可以理解為是一個一個的小框,這些小框類似於SSD中的default boxes,它們不一定一個框能框一個字,可能就框一個字的一部分,一個segment用公式
表示,其中xb,yb表示segment的中心,wb,hb表示segment的寬和高,θb表示該segment的旋轉角。links就是將segments連接起來,說白了就是兩個框是不是同一個文本的一個概率值。
網絡的backbone(骨架)采用的是VGG-16,將VGG中所有的全連接層改為卷積層(fc6、fc7改為conv6、conv7),並在conv7后面還加了若干個卷積層(conv8_1 - conv11),訓練與檢測的網絡結構類似於SSD,只是這里的feature map是從conv4_3,conv7,conv8_2,conv9_2,conv10_2,conv11這6個層中提取出來的。最后這六層feature map經過卷積處理得到segments和links
(2)Segment的檢測方法:
首先需要計算default box(均是沒有旋轉角的矩形);
default boxes的位置可以這樣理解,相對於每一個卷積出來的feature map中的每個點都可以找到在原圖中的對應點,這個對應於feature map上的在原圖中的點就是default boxes的位置。值得注意的是因為提取出了6層feature map,每層都要輸出segments。具體的定義如下:
假定輸入圖片大小為wi x hi;segments定義為b:
其中:1個點在feature map上的坐標為(x,y)對應原圖的坐標為(xa,ya)
此外根據經驗函數可得出al(default box 的長寬均為該常數):
每個feature ma 經過卷積后輸出的pipline為7;其中兩個表示segment的置信度(0,1)以及五個位置偏移量:
因此可以求得segment的位置
(3)links的檢測方法:其中links分為Within-Layer與Cross-Layer Link
Within-Layer link 檢測
一個link連接着相鄰兩個segment,表示他們是屬於同一個字或者在同一框中。link的作用不僅是將相鄰的segment連接起來,還可以區分鄰近的segment但是不屬於同行或者同一個標定框。
檢測link使用的feature map與檢測segment使用的是同一feature map,所以對於同一層feature map來說,一個segment有其他8個相鄰的segment,那links就是每個feature map經過卷積后輸出16個通道,每兩個通道表示segment與鄰近的一個segment的link。
Cross-Layer Link
簡單的說就是相鄰層的feature map之間的segments相連(為了避免不同層輸出segment是同一個位置可能只是大小不一樣,最終導致不同層產生的框的合並會出現問題);
這個網絡有個重要的屬性方便我們進行Cross-Layer Link連接,就是我們提取出來的6個feature map中,上一層的大小是下一層的四倍(長寬各兩倍)。但是值得注意的是,只有feature map是偶數的時候才滿足這個屬性,所以在實際操作中,輸入圖像的長寬大小都要縮放到128的整數倍。例如,一張1000*800的圖片,首先會先縮放到1024*768大小。
由於上層的feature map為下一層的四倍大小,那相當於一個segment與另一層的四個segment相鄰。這時除1-th的feature map外,其他五個feature map每個經過卷積后都要輸出8個通道,每兩個通道表示一個Cross-Layer Link。
每層feature map的輸出:
(4)利用Links連接segments
上述思路大致可以簡述為:
1.將連接后的所有segments當作一個集合B;
2.求解B集合中的旋轉角的平均值,作為文本框的旋轉角
3.將tanθb作為斜率建立一些列直線,然后利用最小二乘法(B中所有segments的中心點到直線距離的的最小值)找到那條直線。
4.將segment的中心垂直投影到找到的直線。然后找到最遠的兩個點,其坐標均值為最終輸出的框的中心,然后就是長度為兩點距離;θ為均值
(5)訓練
正樣本:
(1)default box的中心在標定文本框內
(2)default box的長寬al與文本框的高h滿足一定公式:
負樣本:不滿足上述兩點即為負樣本
位置偏移量:計算方式
損失函數:
參數解讀:
ys,yl:segments 和links的標簽值
cs,cl:segments 和links的預測值
Lconf:softmax loss,用於計算segments和links置信度的損失
Ns:圖像中所有正樣本的default boxes的個數
Nl:圖像中所有正樣本的links的個數
λ作者默認均為1;
(6)結果:
不足:還是不能很好的的解決同行的畫在一個框的問題。例如(a),(b)中的紅色的框。