east做文字檢測只需要兩步:先是乙個全卷積的網路直接產生乙個字元或者文字行的**(可以是旋轉的矩形或者不規則四邊形),然後通過nms(non-maximum suppression)演算法合併最後的結果。下圖是east的pipeline。第乙個階段是基於全卷積網路(fcn)模型,直接產生文字框**;第二個階段是對生成的文字**框(可以是旋轉矩形或矩形)經過非極大值抑制以產生最終結果。該模型放棄了不必要的中間步驟,進行端到端的訓練和優化。
east網路是乙個全卷積網路,主要有三部分:特徵提取層,特徵融合層,輸出層。由於在一張中,各個文字大小不一,所以需要融合不同層次的特徵圖,小文字的**需要用到底層的語義資訊,大文字的**要用到高層的語義資訊。
特徵提取和融合這一單元很容易看懂,最深層的 特徵f
1f_1
f1 上取樣2倍 與上層的 f
2f_2
f2 拼接,然後經過乙個1×1
1 \times 1
1×1卷積(特徵降維)和乙個3×3
3 \times 3
3×3 卷積後再上取樣2倍與 f
3f_3
f3拼接,剩下的結構與這個類似,一共只融合了四層特徵圖,feature map大小分別為原圖的1/4、1/8、1/16、1/32,這樣可以獲取不同尺度的特徵圖,能夠解決文字行尺度變換劇烈的問題。ealy stage可用於**小的文字行,late-stage可用於**大的文字行。
在特徵融合部分,從特徵提取網路的頂部特徵按照相應的規則向下進行合併,上圖中逐步融合的特徵可以用公式表示為(其中[ ; ]符號表示沿著通道軸連線。):
輸出層主要有三部分。
socre map:特徵融合層後接乙個1*1的卷積,輸出通道為1,最後輸出一共分數圖,代表每個畫素點屬於文字區域的概率。
rbox:這部分一共輸出5個通道。分別由兩個1*1卷積產生4個和1個,其中4個通道分別表示從畫素位置到矩形的頂部,右側,底部,左側邊界的4個距離,1個通道表示邊界框的旋轉角度。這部分用來**旋轉矩形的文字
quad:使用8個數字來表示從四邊形的四個角頂點
}\\}
}到畫素位置的座標偏移。由於每個距離偏移包含兩個數字(δxi
,δyi
)\delta x_i,\delta y_i)
δxi,δ
yi)
,因此幾何輸出包含8個通道。該部分可以**不規則四邊形的文字。
1.先對所有的output box集合結合相應的閾值(大於閾值則進行合併,小於閾值則不合併),將置信度得分作為權重加權合併,得到合併後的bbox集合;
2.對合併後的bbox集合進行標準的nms操作。
因為本文會**成千上萬個幾何框,乙個簡單的nms演算法的時間複雜度是o(n^2),其中n是候選框的數量,這個時間複雜度太高,尤其是面對上萬個後選框的時候。所以本文提出逐行合併幾何圖形,假設來自附近畫素的幾何圖形傾向於高度相關,在合併同一行中的幾何圖形時,將迭代合併當前遇到的幾何圖形與最後乙個合併圖形,改進後的時間複雜度為o(n)。這裡合併的四邊形座標是通過兩個給定四邊形的得分進行加權平均的。下面是演算法流程。
待補充參考:
east演算法詳解
east-tensorflow 原始碼解讀
C 呼叫tensorflow模型EAST識別文字
主要利用了emgucv這個opencv的c 庫,但是由於emgucv裡的nms只能計算rect不能計算rotaterect所以識別水平文字還行,傾斜的就不行了,如下 寫的不規範什麼的勿噴.如果有什麼問題請告訴我,互相提高嘛 using system using system.collections....
EAST演算法介紹
該演算法是一種高效的而且準確的場景文字檢測演算法,再icdar 2015資料集上,在720解析度的情況下可以實現 0.7820的f score和13.2fps。該文章的主要貢獻如下 1.提出了乙個包含兩個stage的場景文字檢測方法,乙個是全卷積網路 fcn 和乙個nms合併過程,fcn用來排除冗餘...
EAST文字檢測學習整理
復現 傳統的文字檢測方法和一些基於深度學習的文字檢測方法,大多是multi stage,在訓練時需要對多個stage調優,這勢必會影響最終的模型效果,而且非常耗時 針對上述存在的問題,本文提出了端到端的文字檢測方法,消除中間多個stage 如候選區域聚合,文字分詞,後處理等 直接 文字行 提出了基於...