相關(guān)背景介紹
文本在人機(jī)交互中扮演著重要的角色, 圖片中的文本所包含的豐富而精確的信息在基于視覺的設(shè)備中應(yīng)用非常廣泛,能夠輔助設(shè)備獲得更精確的物體和周邊環(huán)境信息。隨著智能機(jī)器人、無人駕駛、醫(yī)療診斷的飛速發(fā)展,文本的檢測與識別已經(jīng)成為定位和理解物體信息的重要途徑[28]?,F(xiàn)實(shí)當(dāng)中,許多跟文本識別相關(guān)的應(yīng)用極大地方便了我們的生活,如車牌識別、發(fā)票識別、拍圖識字等。
文本識別demoOCR相關(guān)概念:提到文本檢測識別,我們會(huì)聯(lián)想到的一個(gè)詞就是 OCR,OCR 是光學(xué)字符識別 Optical Character Recognition的簡稱,是指對文本資料的圖像文件進(jìn)行分析識別處理,獲取文字的過程 [19]?,F(xiàn)在所說的OCR 通常也指場景文字識別,根據(jù)識別場景,可大致將 OCR 分為識別特定場景的專用 OCR 和識別多種場景的通用 OCR。比如車牌識別就是對特定場景的 OCR,而對自然場景中的文字識別則是通用場景 OCR,一般來說,自然場景的文字識別由于環(huán)境更加復(fù)雜多樣,其識別難度相對困難。文字識別通常包含文本檢測和文字識別兩個(gè)階段。文本檢測特點(diǎn):1、相比于常規(guī)物體檢測,文字行長度、長寬比例變化范圍很大。 2、文本行有方向性,anchor-based的檢測通常是水平和垂直方向的矩形。 3、有些藝術(shù)字體形狀變化非常大,很多是彎曲的,并且字體類型豐富,語言種類豐富。 4、由于豐富的背景圖像干擾,手工設(shè)計(jì)特征在自然場景文本識別任務(wù)中不夠魯棒。
文本檢測比普通物體檢測存在更多特點(diǎn)
本文將介紹以下幾部分
一、配置Docker環(huán)境為什么要特意提一下Docker,當(dāng)然是因?yàn)檫@東西挺有意思,可以幫助我們高效的做項(xiàng)目! 接下來就來看看,什么是Docker吧。 做深度學(xué)習(xí)項(xiàng)目時(shí),配環(huán)境是一件很讓人頭疼的事情,尤其是當(dāng)你要跑別人代碼時(shí),自己的環(huán)境跟別人的環(huán)境不一致,就會(huì)出現(xiàn)各種bug,這就是所謂的生產(chǎn)環(huán)境(別人的環(huán)境)跟測試環(huán)境不一致(你的環(huán)境),那么,我們可以想象,如果現(xiàn)在有一種工具,可以把別人的環(huán)境克隆一份,放到自己電腦上,然后自己用這個(gè)環(huán)境,豈不就不會(huì)出現(xiàn)環(huán)境不一致的問題啦,美滋滋。 那么,有沒有這種工具呢?答案是有的,這個(gè)工具就是Docker。第一步,想要用docker,首先就要安裝docker在我們的計(jì)算機(jī)上,安裝docker教程如下:跟著教程復(fù)制粘貼命令就行了~ https://docs.docker.com/install/linux/docker-ce/ubuntu/第二步,安裝好了docker,得學(xué)學(xué)怎么用docker,類似于git,在Linux上可用命令可以操作:先學(xué)習(xí)一下docker里邊的基本概念,再學(xué)習(xí)一下基本命令(如果pull下一個(gè)鏡像,如果run等等),參考資料如下: https://blog.csdn.net/fgf00/article/details/51893771 蟈蟈:Docker,救你于「深度學(xué)習(xí)環(huán)境配置」的苦海,https://zhuanlan.zhihu.com/p/64493662二、介紹多種文本檢測算法1、CTPN(Detecting Text in Natural Image with Connectionist Text Proposal Network)ECCV 16這篇論文的亮點(diǎn)是結(jié)合了CNN與雙向LSTM,能有效的檢測出復(fù)雜場景的橫向分布的文字, 在當(dāng)時(shí)也算是開坑之作。 總的來說,該算法的重點(diǎn)部分有三個(gè): 1、在網(wǎng)絡(luò)上改進(jìn),似的提取的特征能夠在雙向LSTM中使用。 2、使用了雙向LSTM。 3、采用了一組(10個(gè))等寬度,不同高度的的Anchors,用于定位文字位置。 4、采用文本線構(gòu)造算法,把這些text proposal連接成一個(gè)文本檢測框。 這篇論文的細(xì)節(jié)內(nèi)容知乎上已經(jīng)有大佬寫的很好了,我就不重復(fù)搬磚了,可參考: 白裳:場景文字檢測—CTPN原理與實(shí)現(xiàn)(https://zhuanlan.zhihu.com/p/34757009) 但是我還是要把這篇文章的實(shí)驗(yàn)結(jié)果搬出來,這樣后續(xù)的文章可以跟他比較~實(shí)驗(yàn)結(jié)果:
總結(jié)分析:現(xiàn)在來看這算法已經(jīng)挺老了,缺點(diǎn)很明顯,只能檢測橫向或者縱向(改anchor比例后可檢測縱向)的文本, 但是不能檢測其他方向, 并且在精度上也落后了.Github 開源代碼:https://github.com/eragonruan/text-detection-ctpn2、EAST(EAST: An Efficient and Accurate Scene Text Detector)CVPR 17這篇論文提出了一種端到端的快速有效的文本檢測方法,消除了中間多個(gè)stage(如候選區(qū)域聚合,文本分詞,后處理等),直接預(yù)測文本行,從下圖中可看出,EAST的 pipeline(e)最為簡潔。
EAST pipeline與其他框架pipline對比論文亮點(diǎn):提出了一種基于兩階段的端到端的快速有效的文本檢測方法(借鑒了DenseBox和FCN),不熟悉DenseB。 ox的可以看看這篇文章中對其的介紹 。 陀飛輪:目標(biāo)檢測:Anchor-Free時(shí)代 即可以檢測單詞級別,又可以檢測文本行級別.檢測的形狀可以為任意形狀的四邊形(QUAD)或傾斜矩形 (RBOX)。 采用了Locality-Aware NMS來對生成的框進(jìn)行過濾。網(wǎng)絡(luò)部分:這個(gè)網(wǎng)絡(luò)的基本結(jié)構(gòu)是以2015年發(fā)表的DenseBox中的網(wǎng)絡(luò)為基礎(chǔ)構(gòu)建的?;谏鲜鲋鞲商卣魈崛【W(wǎng)絡(luò),抽取不同level的feature map,然后上借鑒U-net的合并規(guī)則進(jìn)行合并。 輸出是稠密的每個(gè)像素對于文本的預(yù)測信息。我們以RBOX為例,網(wǎng)絡(luò)輸出的通道數(shù)應(yīng)為6(1個(gè)為score map,4個(gè)為文本框的坐標(biāo)信息,1個(gè)為角度)。我們預(yù)測的幾何形狀分為RBOX和QUAD(輸出為9維,包括8個(gè)坐標(biāo),一個(gè)score map)兩種,在后面為每一種也相應(yīng)設(shè)計(jì)了不同的loss值。其中score所代表的含義是在該像素位置預(yù)測的目標(biāo)的可信度,其值為[0, 1]。在最后我們會(huì)將score值大于我們所設(shè)計(jì)的閾值的預(yù) 測框留下來,并進(jìn)行NMS獲取最終結(jié)果[10,21,22]。
網(wǎng)絡(luò)標(biāo)簽的生成:要對網(wǎng)絡(luò)進(jìn)行訓(xùn)練,就要有標(biāo)簽,讓我們預(yù)測的結(jié)果和標(biāo)簽進(jìn)行對比,然后通過不斷優(yōu)化參數(shù),最終得到我們想要的網(wǎng)絡(luò)。 Score map 標(biāo)簽的產(chǎn)生:根據(jù)論文的描述,我們Score map的正樣本的范圍,其實(shí)就是在圖片中我們標(biāo)注框的一個(gè)縮進(jìn)框,如下圖的(a)到(b)所 示,具體的公式請看原論文 [10]。 Geometry Map 標(biāo)簽產(chǎn)生:不詳細(xì)說明,請參照原論文 [10]。
損失函數(shù):由Score map 和 Geometry Map 兩部分產(chǎn)生的損失加權(quán)組成。
loss 對Score map 采用了class-balanced cross-entropy,如下:
class-balanced cross-entropy 是平衡因子,計(jì)算公式如下 (是標(biāo)簽,? 是預(yù)測的Score map) : 平衡因子 對Geometry Map計(jì)算損失:“we adopt the IoU loss in the AABB part of RBOX regression, and a scale-normalized smoothed-L1 loss for QUAD regression”[10]這里只以RBOX為例說明:IoU loss 部分:
IoU loss loss of rotation angle:
loss of rotation angle Geometry Map loss 總和: Geometry Map loss 總和 Locality-aware NMS: 與標(biāo)準(zhǔn)的NMS相比,主要在于多了一個(gè)合并階段。迭代兩兩候選框,如果兩個(gè)候選框高于某個(gè)權(quán)值,進(jìn)行一個(gè)加權(quán)的合并操作,合并完再做一個(gè)標(biāo)準(zhǔn)的NMS [21,22]。實(shí)驗(yàn)結(jié)果:從實(shí)驗(yàn)結(jié)果中可以看出,這篇文章比14和15年的一些算法在精度上要高出很多。
總結(jié)分析:優(yōu)點(diǎn):用了特征圖多尺度融合,所以可檢測不同尺度的文本區(qū)域, 預(yù)測的文本框是帶角度的,所以可以對任意方向的文本進(jìn)行檢測. 缺點(diǎn):由于感受野和anchor大小的限制, 對長文本和曲線文本檢測困難.Github 開源代碼:https://github.com/argman/EAST https://github.com/huoyijie/AdvancedEAST https://github.com/songdejia/EAST3、SegLink (Detecting Oriented Text in Natural Images by Linking Segments) CVPR 17從EAST算法中可以知道, 檢測長文本是比較困難的, 或者說,想要一次性檢測整個(gè)文本行是比較困難, 針對這個(gè)問題, 本文提出了一種新的思想Seglink (segment + link),它是在SSD目標(biāo)檢測方法的基礎(chǔ)上進(jìn)行改進(jìn)的,但是不通過矩形框來回歸文本區(qū)域的位置.Seglink模型的做法是:先將每個(gè)單詞切割成更易檢測的有方向的小文字塊(segment),然后用鄰近連接將各個(gè)小文字塊link成單詞。也就是說,網(wǎng)絡(luò)會(huì)輸出兩類信息:1、一個(gè)是segment,它可能是一個(gè)字符或者幾個(gè)字符等, 它不是整個(gè)文本行的框,而是文本行的一部分, 這個(gè)信息是帶有角度的,如下圖的黃框表示。 2、另一個(gè)是不同segment之間的link信息,而這個(gè)link也是在網(wǎng)絡(luò)中自動(dòng)學(xué)習(xí)的,由網(wǎng)絡(luò)判定哪些segment屬于一個(gè)文本行,由下圖的綠線表示。
segment 與 link網(wǎng)絡(luò)結(jié)構(gòu):對segments的預(yù)測:2個(gè)segment score和5個(gè)geometric offsets為**default box:本文每個(gè)feature map的每個(gè)位置只采用了一個(gè)aspect ratio=1的default box,而SSD中是一系列(1, 2, 3, 1/2, 1/3).default box scale size:本文的是根據(jù)當(dāng)前層的感受野來進(jìn)行設(shè)置scale size,而SSD是通過人工設(shè)定的. 對于link的預(yù)測包括同層(within-layer link)的和跨層(cross-layer link)的兩種: 對于conv4_3層,對于feature map的每個(gè)位置需要預(yù)測其link輸出的維度為2*8(文中對feature map中每個(gè)位置只預(yù)測一個(gè)segment,所以8就是當(dāng)前層8鄰域)=16;對于conv7, conv8_2, conv9_2, conv10_2, conv11其輸出的link維度為2*8(8是當(dāng)前層8鄰域)+2*4(4是上一層4鄰域)=24
主框架
within-layer link 和cross-layer link 可視化圖網(wǎng)絡(luò)最后總共輸出通道數(shù)為31,如下圖:
網(wǎng)絡(luò)最后總共輸出通道數(shù)Combining Segments with Links算法預(yù)測出Segment 和 Link 之后,需要用一種算法將預(yù)測出的Segments組合起來或者叫連接起來. 作者的算法是:首先通過人工設(shè)定的 α 和β(這兩個(gè)值是采用網(wǎng)格搜索找到最優(yōu)),對網(wǎng)絡(luò)預(yù)測的segments和links進(jìn)行濾除. 然后將每個(gè)segment看成node,link看成edge,建立圖模型,再用DFS(depth first search)找到連通分量,每個(gè)連通分量包含一系列segments(用B表示). 最后,輸出連接segments后的文本框的算法如下:
連接segments成一個(gè)框損失函數(shù):包含三部分,segment classification loss (softmax),offsets regression loss (L1 regression),link classification loss (softmax).
實(shí)驗(yàn)結(jié)果:
總結(jié)分析:缺點(diǎn): 間隔較大的文字塊不能檢測出來,比較link只是針對鄰域的.Github 開源代碼:https://github.com/dengdan/seglink https://github.com/bgshih/seglink4、TextBoxes(TextBoxes: A Fast Text Detector with a Single Deep Neural Network)AAAI 17這篇文章的主要貢獻(xiàn)提出了一個(gè)快速而精確的文本檢測器,叫做TextBoxes,也是在SSD的基礎(chǔ)上進(jìn)行改進(jìn)的。相對SSD的改變?nèi)缦滤狞c(diǎn):1、修改了default box的apect ratio,分別為[1 2 3 5 7 10],變成長條狀。 2、修改classifier卷積核的大小為1*5,而SSD中卷積核的大小為3*3,這樣更適合文本檢測。 3、提出了一個(gè)端到端的訓(xùn)練框架.在測試的時(shí)候,輸入圖像由單尺度變成了多尺度 。 4、利用識別來調(diào)整檢測的結(jié)果。
主框架 TextBoxes是一個(gè)28層的全連接卷積網(wǎng)絡(luò),從主框架中可以看出,使用了1*5的卷積核,在每一個(gè)特征位置,預(yù)測一個(gè)72維的向量,因?yàn)槊恳粋€(gè)特征位置會(huì)有12個(gè)默認(rèn)框(12個(gè)框怎么來的呢,首先有6種比例就有六個(gè)框,但是論文中指出了,為了防止水平方向的框太過密集,而垂直方向稀疏,所以每個(gè)默認(rèn)框都設(shè)有一個(gè)垂直方向的偏移,相當(dāng)于框的數(shù)量翻了一倍,如下下圖默認(rèn)框圖所示)。72維(12*2+12×4)包括文本出現(xiàn)的得分(2維)和12個(gè)默認(rèn)盒子的偏移(offsets)(4層)。
默認(rèn)框圖,這里只展示了兩種比例(1和5的)損失函數(shù):見下文TextBoxes++,與其相同。
實(shí)驗(yàn)數(shù)值結(jié)果
實(shí)驗(yàn)效果圖,包含成功案例和失敗案例分析總結(jié):不能檢測任意方向文本塊.Github 開源代碼:https://github.com/gxd1994/TextBoxes-TensorFlow https://github.com/shinjayne/shinTB5、R2CNN(R2CNN: Rotational Region CNN for Orientation Robust Scene Text Detection)CoRR 17這篇文章提出了一種旋轉(zhuǎn)區(qū)域CNN (Rotational Region CNN,R2CNN),用于檢測自然場景圖片中任意方向的文本框,當(dāng)然這種方法并不局限于斜框文字檢測,也可以用在其他領(lǐng)域。 傾斜四邊形如何表示,下邊這邊文章中寫的比較清楚了,這篇文章用矩形的兩個(gè)坐標(biāo)點(diǎn)和矩形的高(x1,y1,x2,y2,h)來表示: stone:基于Faster RCNN的斜框檢測:R2CNN https://zhuanlan.zhihu.com/p/41662351
網(wǎng)絡(luò)架構(gòu):
主框架第一步:通過RPN網(wǎng)絡(luò),得到正框的Proposal,并且把a(bǔ)nchor的大小從(8,16,32)改為(4,8,16,32) 或 (4,8,16),論文里說了,將anchor調(diào)小對檢測是有幫助的。第二步:ROIPooling,使用了不同pooled size (7 × 7, 11 × 3, 3 × 11) 的 ROIPooling,將三種結(jié)果concate在一起,再經(jīng)過fc6,fc7進(jìn)行正框預(yù)測,斜框預(yù)測以及分類預(yù)測,之后,再通過斜框的NMS進(jìn)行后處理。 作者在論文里指出,每一個(gè)傾斜框都跟一個(gè)正框相關(guān)聯(lián),如下圖中的(a)與(c),之所以既要對正框預(yù)測,又要對斜框預(yù)測,作者認(rèn)為這能提升實(shí)驗(yàn)的效果。
斜NMS 斜NMS算法參考Arbitrary-Oriented Scene Text Detection via Rotation Proposals損失函數(shù):包含分類損失和回歸損失,回歸損失又包含正框和斜框兩部分。
loss實(shí)驗(yàn)結(jié)果:在精度上超過EAST和Seglink.
在不同參數(shù)設(shè)定下,R2CNN的結(jié)果比較
在ICDAR 2015數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果
在ICDAR 2013數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果 在ICDAR 2013數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果,作者認(rèn)為效果沒有超過sota的原因是由于他們使用的訓(xùn)練數(shù)據(jù)不包含單個(gè)字符,如果包含,將可能會(huì)超過sota??偨Y(jié)分析:對斜的小的目標(biāo)可能效果好一點(diǎn)Github 開源代碼:https://github.com/yangxue0827/R2CNN_FPN_Tensorflow https://github.com/DetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow6、TextBoxes++(TextBoxes++: A Single-Shot Oriented Scene Text Detector)TIP 18從論文名字就可以看出,TextBoxes++是對TextBoxes的改進(jìn)。
主框架相對TextBoxes的改變?nèi)缦拢?、對文本框的表示方式進(jìn)行了改進(jìn)。 在TextBoxes中,default box 是水平的框,不能檢測傾斜的文字。論文中討論了兩種表示方式:分別是4個(gè)點(diǎn)坐標(biāo)(x1,y1,x2,y2,x3,y3,x4,y4)(四邊形)和兩個(gè)點(diǎn)的坐標(biāo)外加四邊形的高(x1,y1,x2,y2,h)(傾斜矩形)。但論文推薦使用四個(gè)坐標(biāo)的表示方式。四邊形和矩形表示的計(jì)算方法如下:
四邊形和矩形表示的計(jì)算方法 其中(x0,y0)是default box的中心點(diǎn),(w0,h0)是default box的寬度和高度。 在每個(gè)feature map后的text-box layer將預(yù)測每個(gè)box上的文本存在概率以及位置偏置,以傾斜矩形為例,其預(yù)測輸出為: 預(yù)測輸出 根據(jù)預(yù)測輸出,計(jì)算檢測框的坐標(biāo)和高度,公式如下(傾斜矩形形式):
計(jì)算坐標(biāo)和高度
從默認(rèn)框回歸的過程 在TextBoxes++中,也為文本設(shè)置了垂直偏移,使得默認(rèn)框在垂直方向密集,如下圖所示,沒有垂直偏移的只有黑色虛線框,就會(huì)漏掉很多連續(xù)的垂直方向文本。黃色虛線框是加入了垂直偏移后的,文本信息都被包圍了進(jìn)去(本人覺得這里的作圖太過于刻意了,說服力并不是很強(qiáng))。
垂直偏移 損失函數(shù)包含預(yù)測得分和預(yù)測定位兩部分損失(與TextBoxes相同): loss 其中,N是與GT匹配的default boxes數(shù)量,_α_設(shè)為0.2,對于分類用兩分類sotmax,對于定位用smooth L1。 此外,文章還用了On-line hard negative mining、數(shù)據(jù)增強(qiáng)、多尺度訓(xùn)練、有效級聯(lián)NMS等技巧。實(shí)驗(yàn)結(jié)果:從ICDAR和COCO-text的實(shí)驗(yàn)數(shù)值上對比可以看出,這篇18年的文章已經(jīng)完全干掉了17年的 EAST。
四邊形與傾斜矩形對比
可視化結(jié)果分析總結(jié):對TextBoxes 不能檢測任意方向文本塊的缺點(diǎn)進(jìn)行了改進(jìn),其精度已經(jīng)完全干掉了頭一年的EAST.Github 開源代碼:https://github.com/Shun14/TextBoxes_plusplus_Tensorflow https://github.com/MhLiao/TextBoxes_plusplus7、FOTS(FOTS: Fast Oriented Text Spotting with a Unified Network)CVPR 18與前面幾篇只是檢測部分的不一樣,這篇論文是一個(gè)集合了文本檢測跟文字識別兩部分的一個(gè)統(tǒng)一的端到端的框架,可同時(shí)對圖像中的文字進(jìn)行檢測跟識別。之前的大部分方法都是將檢測跟識別當(dāng)做兩個(gè)獨(dú)立的任務(wù)去做,先檢測,再識別。這篇論文提出的框架處處是可微的,所以可以對其進(jìn)行端到端的訓(xùn)練,結(jié)果表明,該網(wǎng)絡(luò)無需復(fù)雜的后處理和高參數(shù)整定,易于訓(xùn)練,并且在保證精度的前提下大大提高速度,如下圖所示:
可以看出,本文提出的統(tǒng)一的框架要比兩階段的方法快論文的主框架如下:
主框架 FOTS的整體結(jié)構(gòu)由 shared convolutions,the text detection branch,RoIRotate operation,the text recognition branch 4部分組成。Shared Convolutions:FOTS的基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)為Resnet50,共享卷積層采用了類似U-net的卷積的共享方法,將底層和高層的特征進(jìn)行了融合。這部分和EAST中的特征共享方式一樣。最終輸出的特征圖大小為原圖的1/4,如下圖所示:
shared convolutionsText Detection Branch:該模塊和EAST一樣,采用了FCN作為文本檢測器,損失包含分類的loss(cross entrop)和坐標(biāo)的回歸的loss(IOU loss+角度loss),公式如下:
RoIRotate:RoiRotate將變換應(yīng)用于定向特征區(qū)域(有角度的),以獲得軸對齊的特征映射,如下圖所示:
特征區(qū)域角度變換 RoiRotate計(jì)算公式如下:
M是放射矩陣,包含旋轉(zhuǎn),縮放,平移 使用變換參數(shù),可以使用仿射變換輕松生成最終的roi特征:
這里的幾個(gè)公式涉及到很多參數(shù)的概念,涉及到雙線性插值,更具體的含義請看論文 :仿射變換矩陣,包含旋轉(zhuǎn),縮放,平移 :仿射變換后的特征圖的高度,實(shí)驗(yàn)中為8 :仿射變換后的特征圖的寬度 :特征圖中的點(diǎn)的坐標(biāo) :特征圖中的點(diǎn)距離旋轉(zhuǎn)的框的上下左右的距離 :檢測框的角度 :在位置(i,j),通道c處的輸出值。 :在位置(n,m),通道c處的輸入值。 :輸入的高度 :輸入的寬度 總之,經(jīng)過變換之后,我們可以獲得變換后的特征圖,然后將該特征圖輸入到 Text Recognition Branch進(jìn)行識別。Text Recognition Branch:這個(gè)分支使用共享卷基層的特征和變換后的特征來識別文字,其結(jié)構(gòu)類似CRNN結(jié)構(gòu),使用了類似VGG的順序卷積,一個(gè)雙向LSTM,最后再接CTC解碼器,對CRNN和CTC不熟悉的可先看: 白裳:一文讀懂CRNN+CTC文字識別 https://zhuanlan.zhihu.com/p/43534801
Text Recognition Branch Structure實(shí)驗(yàn)結(jié)果:精度上可以說是很不錯(cuò)了
On ICDAR 2015
On ICDAR 2017
On ICDAR 2013
速度和模型大小比較總結(jié)分析:精度高,速度相對也比較快Github 開源代碼:https://github.com/jiangxiluning/FOTS.PyTorch https://github.com/xieyufei1993/FOTS https://github.com/Pay20Y/FOTS_TF8、PixelLink(PixelLink: Detecting Scene Text via Instance Segmentation)AAAA 18通過前邊的文章我們可以發(fā)現(xiàn),對文本的檢測大都采用邊框回歸的思想來做,而這篇文章提出了不一樣的方法,文章提出采用實(shí)例分割的方法分割出文本行區(qū)域,然后直接找對應(yīng)文本行的外接矩形框,這樣就實(shí)現(xiàn)了對文本的檢測。 但是,通常文本之間挨得很近,很難將他們分割開來,如圖所示:
接下來我們就看看這篇文章是如何做的......框架結(jié)構(gòu):主干網(wǎng)絡(luò)是沿用了SSD網(wǎng)絡(luò)結(jié)構(gòu),用VGG16作為base net,并將VGG16的最后兩個(gè)全連接層改成卷積層; 論文中給出了兩種網(wǎng)絡(luò)結(jié)構(gòu):PixelLink+VGG16 2s (特征圖大學(xué)下降為原圖的1/2)和PixelLink+VGG16 4s (特征圖大小下降為原圖的1/4)。
主框架 1、提取不同層的feature map,對于PixelLink+VGG16 2s網(wǎng)絡(luò)結(jié)構(gòu):提取了conv2_2, conv3_3, conv4_3, conv5_3, fc_7. 2、對已提取的特征層,采用自頂向下的方法進(jìn)行融合,融合操作包括先向上采樣,然后再進(jìn)行add操作.注意:這里包含了兩種操作:pixel cls和pixel link(文本/非文本預(yù)測和Link預(yù)測),所以對應(yīng)的卷積核個(gè)數(shù)分別為2和16 。注意,fc6和fc7,被轉(zhuǎn)換為卷積層。
網(wǎng)絡(luò)結(jié)構(gòu)連接像素:到這一步,我們已經(jīng)得到了文本/非文本預(yù)測和Link預(yù)測,設(shè)定兩個(gè)閾值(一個(gè)用于像素分類,一個(gè)用于像素鏈接),可以得到pixel positive集合和link positive集合。然后根據(jù)link positive將pixel positive進(jìn)行連接,得到CCs(conected compoents)集合(數(shù)字圖像處理中連通分量的概念),集合中的每個(gè)元素代表的就是文本實(shí)例。注意:給定兩個(gè)相鄰的pixel positive,它們之間的link預(yù)測是由當(dāng)前兩個(gè)pixel共同決定的,兩個(gè)link中至少有一個(gè)是link positive。連接的規(guī)則采用的是Disjoint set data structure(并查集)的方法。外接矩形:直接使用Opencv里邊的minAreaRext提取文本的帶方向信息的外接矩形框。后期處理:在鏈接的過程可能引入噪聲,加入后期處理階段,可以通過矩形的長、寬、面積、長寬比信息等將一些明顯的錯(cuò)的區(qū)域過濾掉,以提高檢測精度。損失函數(shù):網(wǎng)絡(luò)的損失函數(shù)包含兩個(gè)部分:pixels loss和links loss: loss 損失函數(shù)的具體內(nèi)容在此不展開討論,除了在損失函數(shù)上進(jìn)行的設(shè)計(jì),作者還借鑒了SSD里邊的數(shù)據(jù)增強(qiáng)的方法,具體的pixel loss 跟link loss如何設(shè)計(jì)以及如何生成訓(xùn)練數(shù)據(jù)的ground truth可參考大佬寫的(我只是個(gè)搬運(yùn)工): 燕小花:文本檢測之PixelLink https://zhuanlan.zhihu.com/p/38171172實(shí)驗(yàn)結(jié)果:從數(shù)值結(jié)果從可以看出,確實(shí)比EAST強(qiáng),但是好像沒有比Seglink強(qiáng)太多。
總結(jié)分析:優(yōu)點(diǎn):無需在imagenet上預(yù)訓(xùn)練. 缺點(diǎn):跟Seglink一樣,間隔較大的文字塊不能檢測出來.Github 開源代碼:https://github.com/ZJULearning/pixel_link https://github.com/cheerss/PixelLink-with-pytorch9、PSENet(Shape Robust Text Detection with Progressive Scale Expansion Network)CVPR 19文章的目的是要解決彎曲文字檢測的問題,如下圖所示,對于彎曲文字,現(xiàn)有方法存在較大的問題.
b中容易重疊,c中誤把多個(gè)實(shí)例識別成一個(gè)實(shí)例 作者認(rèn)為現(xiàn)在的文本檢測主流方法可以分成regression-based和segmentation-based兩類,本文提出來的方法屬于segmentation-based.論文的三大特點(diǎn):1、Segmentation-based方法能很好地解決任意形狀文本區(qū)域檢測這個(gè)問題,因?yàn)檎Z義分割可以從像素級別上分割文字區(qū)域和背景區(qū)域. 2、對于如何分離靠的很近的文字塊,如上圖 (c) 所示,不能將他們分割開. 一個(gè)直觀的想法是增大文字塊之間的距離,使它們離得遠(yuǎn)一點(diǎn)?;谶@個(gè)思路,論文引入了新的概念 kernel. 3、有了kernel的概念, 作者通過一種基于廣度優(yōu)先搜索的漸進(jìn)擴(kuò)展算法來構(gòu)建完整的文字塊。這個(gè)方法的核心思想是:從每個(gè)kernel出發(fā),利用廣度優(yōu)先搜索來不斷地合并周圍的像素,使得kernel不斷地?cái)U(kuò)展,最后得到完整的文字塊。 下面就來看看這些特點(diǎn)具體是如何做的......Pipeline :框架的主干網(wǎng)絡(luò)是FPN,一張圖片通過FPN可以得到四個(gè)Feature Map (),然后通過函數(shù)合并這四個(gè)特征圖()得到.
pipeline的具體公式如下:
其中, || 代表 concatenation, U代表上采樣。 接著,通過來預(yù)測不同kernel scale的分割圖。其中是最小kernel scale的分割圖,里面不同的連通區(qū)域都可以看作不同文字塊的“kernel”。是最大kernel scale的分割圖,是個(gè)完整的文字快。最后通過一個(gè)漸進(jìn)擴(kuò)展算法(Progressive Scale Expansion)去不斷地?cái)U(kuò)展中的每個(gè)“kernel”.[1]漸進(jìn)擴(kuò)展算法(Progressive Scale Expansion):
Progressive Scale Expansion 該算法的輸入是, 在上圖中以n=3為例, CC 代表尋找連通分量的操作, 對著上圖來分析: 1、首先,對求連通區(qū)域,得到不同文字塊的“kernel”。 2、然后,通過 (g)所示的擴(kuò)展操作合并中的文字像素,得到擴(kuò)展后的結(jié)果 (c)。最后,使用同樣的擴(kuò)展操作合并中的文字像素,得到最后的文字塊(d)。 3、(g)所示的擴(kuò)展操作是基于廣度優(yōu)先搜索實(shí)現(xiàn)的。 我們可以把(g) 操作放大: 在邊界上有些像素點(diǎn)會(huì)混淆,不知道該屬于那個(gè)kernel, 在實(shí)踐中,處理沖突的原則是,混淆的像素可以在先到先得的基礎(chǔ)上由一個(gè)內(nèi)核合并。
標(biāo)簽生成 (Label Generation) :使用 Vatti clippingal gorithm 參考論文 generic solution to polygon clipping. 來生成不同核尺度的標(biāo)簽.
Label Generation損失函數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)細(xì)節(jié):在此不細(xì)講,請參考原文:Shape Robust Text Detection with Progressive Scale Expansion Network實(shí)驗(yàn)結(jié)果:
總結(jié)分析:總實(shí)驗(yàn)數(shù)值結(jié)果可以看出,其檢測精度效果好,但是速度慢.Github 開源代碼:https://github.com/liuheng92/tensorflow_PSENet https://github.com/WenmuZhou/PSENet.pytorch https://github.com/liuheng92/tensorflow_PSENet 三、文本檢測算法demo運(yùn)行展示 暫時(shí)略, 后續(xù)會(huì)補(bǔ)上。
責(zé)任編輯:lq
-
人機(jī)交互
+關(guān)注
關(guān)注
12文章
1211瀏覽量
55447 -
算法
+關(guān)注
關(guān)注
23文章
4623瀏覽量
93104 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5510瀏覽量
121337
原文標(biāo)題:一篇包羅萬象的場景文本檢測算法綜述
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論