相關(guān)背景介紹
文本在人機(jī)交互中扮演著重要的角色, 圖片中的文本所包含的豐富而精確的信息在基于視覺(jué)的設(shè)備中應(yīng)用非常廣泛,能夠輔助設(shè)備獲得更精確的物體和周邊環(huán)境信息。隨著智能機(jī)器人、無(wú)人駕駛、醫(yī)療診斷的飛速發(fā)展,文本的檢測(cè)與識(shí)別已經(jīng)成為定位和理解物體信息的重要途徑[28]。現(xiàn)實(shí)當(dāng)中,許多跟文本識(shí)別相關(guān)的應(yīng)用極大地方便了我們的生活,如車牌識(shí)別、發(fā)票識(shí)別、拍圖識(shí)字等。
文本識(shí)別demoOCR相關(guān)概念:提到文本檢測(cè)識(shí)別,我們會(huì)聯(lián)想到的一個(gè)詞就是 OCR,OCR 是光學(xué)字符識(shí)別 Optical Character Recognition的簡(jiǎn)稱,是指對(duì)文本資料的圖像文件進(jìn)行分析識(shí)別處理,獲取文字的過(guò)程 [19]?,F(xiàn)在所說(shuō)的OCR 通常也指場(chǎng)景文字識(shí)別,根據(jù)識(shí)別場(chǎng)景,可大致將 OCR 分為識(shí)別特定場(chǎng)景的專用 OCR 和識(shí)別多種場(chǎng)景的通用 OCR。比如車牌識(shí)別就是對(duì)特定場(chǎng)景的 OCR,而對(duì)自然場(chǎng)景中的文字識(shí)別則是通用場(chǎng)景 OCR,一般來(lái)說(shuō),自然場(chǎng)景的文字識(shí)別由于環(huán)境更加復(fù)雜多樣,其識(shí)別難度相對(duì)困難。文字識(shí)別通常包含文本檢測(cè)和文字識(shí)別兩個(gè)階段。文本檢測(cè)特點(diǎn):1、相比于常規(guī)物體檢測(cè),文字行長(zhǎng)度、長(zhǎng)寬比例變化范圍很大。 2、文本行有方向性,anchor-based的檢測(cè)通常是水平和垂直方向的矩形。 3、有些藝術(shù)字體形狀變化非常大,很多是彎曲的,并且字體類型豐富,語(yǔ)言種類豐富。 4、由于豐富的背景圖像干擾,手工設(shè)計(jì)特征在自然場(chǎng)景文本識(shí)別任務(wù)中不夠魯棒。
文本檢測(cè)比普通物體檢測(cè)存在更多特點(diǎn)
本文將介紹以下幾部分
一、配置Docker環(huán)境為什么要特意提一下Docker,當(dāng)然是因?yàn)檫@東西挺有意思,可以幫助我們高效的做項(xiàng)目! 接下來(lái)就來(lái)看看,什么是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)境)跟測(cè)試環(huán)境不一致(你的環(huán)境),那么,我們可以想象,如果現(xiàn)在有一種工具,可以把別人的環(huán)境克隆一份,放到自己電腦上,然后自己用這個(gè)環(huán)境,豈不就不會(huì)出現(xiàn)環(huán)境不一致的問(wèn)題啦,美滋滋。 那么,有沒(méi)有這種工具呢?答案是有的,這個(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二、介紹多種文本檢測(cè)算法1、CTPN(Detecting Text in Natural Image with Connectionist Text Proposal Network)ECCV 16這篇論文的亮點(diǎn)是結(jié)合了CNN與雙向LSTM,能有效的檢測(cè)出復(fù)雜場(chǎng)景的橫向分布的文字, 在當(dāng)時(shí)也算是開(kāi)坑之作。 總的來(lái)說(shuō),該算法的重點(diǎn)部分有三個(gè): 1、在網(wǎng)絡(luò)上改進(jìn),似的提取的特征能夠在雙向LSTM中使用。 2、使用了雙向LSTM。 3、采用了一組(10個(gè))等寬度,不同高度的的Anchors,用于定位文字位置。 4、采用文本線構(gòu)造算法,把這些text proposal連接成一個(gè)文本檢測(cè)框。 這篇論文的細(xì)節(jié)內(nèi)容知乎上已經(jīng)有大佬寫(xiě)的很好了,我就不重復(fù)搬磚了,可參考: 白裳:場(chǎng)景文字檢測(cè)—CTPN原理與實(shí)現(xiàn)(https://zhuanlan.zhihu.com/p/34757009) 但是我還是要把這篇文章的實(shí)驗(yàn)結(jié)果搬出來(lái),這樣后續(xù)的文章可以跟他比較~實(shí)驗(yàn)結(jié)果:
總結(jié)分析:現(xiàn)在來(lái)看這算法已經(jīng)挺老了,缺點(diǎn)很明顯,只能檢測(cè)橫向或者縱向(改anchor比例后可檢測(cè)縱向)的文本, 但是不能檢測(cè)其他方向, 并且在精度上也落后了.Github 開(kāi)源代碼:https://github.com/eragonruan/text-detection-ctpn2、EAST(EAST: An Efficient and Accurate Scene Text Detector)CVPR 17這篇論文提出了一種端到端的快速有效的文本檢測(cè)方法,消除了中間多個(gè)stage(如候選區(qū)域聚合,文本分詞,后處理等),直接預(yù)測(cè)文本行,從下圖中可看出,EAST的 pipeline(e)最為簡(jiǎn)潔。
EAST pipeline與其他框架pipline對(duì)比論文亮點(diǎn):提出了一種基于兩階段的端到端的快速有效的文本檢測(cè)方法(借鑒了DenseBox和FCN),不熟悉DenseB。 ox的可以看看這篇文章中對(duì)其的介紹 。 陀飛輪:目標(biāo)檢測(cè):Anchor-Free時(shí)代 即可以檢測(cè)單詞級(jí)別,又可以檢測(cè)文本行級(jí)別.檢測(cè)的形狀可以為任意形狀的四邊形(QUAD)或傾斜矩形 (RBOX)。 采用了Locality-Aware NMS來(lái)對(duì)生成的框進(jìn)行過(guò)濾。網(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è)像素對(duì)于文本的預(yù)測(cè)信息。我們以RBOX為例,網(wǎng)絡(luò)輸出的通道數(shù)應(yīng)為6(1個(gè)為score map,4個(gè)為文本框的坐標(biāo)信息,1個(gè)為角度)。我們預(yù)測(cè)的幾何形狀分為RBOX和QUAD(輸出為9維,包括8個(gè)坐標(biāo),一個(gè)score map)兩種,在后面為每一種也相應(yīng)設(shè)計(jì)了不同的loss值。其中score所代表的含義是在該像素位置預(yù)測(cè)的目標(biāo)的可信度,其值為[0, 1]。在最后我們會(huì)將score值大于我們所設(shè)計(jì)的閾值的預(yù) 測(cè)框留下來(lái),并進(jìn)行NMS獲取最終結(jié)果[10,21,22]。
網(wǎng)絡(luò)標(biāo)簽的生成:要對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,就要有標(biāo)簽,讓我們預(yù)測(cè)的結(jié)果和標(biāo)簽進(jìn)行對(duì)比,然后通過(guò)不斷優(yōu)化參數(shù),最終得到我們想要的網(wǎng)絡(luò)。 Score map 標(biāo)簽的產(chǎn)生:根據(jù)論文的描述,我們Score map的正樣本的范圍,其實(shí)就是在圖片中我們標(biāo)注框的一個(gè)縮進(jìn)框,如下圖的(a)到(b)所 示,具體的公式請(qǐng)看原論文 [10]。 Geometry Map 標(biāo)簽產(chǎn)生:不詳細(xì)說(shuō)明,請(qǐng)參照原論文 [10]。
損失函數(shù):由Score map 和 Geometry Map 兩部分產(chǎn)生的損失加權(quán)組成。
loss 對(duì)Score map 采用了class-balanced cross-entropy,如下:
class-balanced cross-entropy 是平衡因子,計(jì)算公式如下 (是標(biāo)簽,? 是預(yù)測(cè)的Score map) : 平衡因子 對(duì)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為例說(shuō)明: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):用了特征圖多尺度融合,所以可檢測(cè)不同尺度的文本區(qū)域, 預(yù)測(cè)的文本框是帶角度的,所以可以對(duì)任意方向的文本進(jìn)行檢測(cè). 缺點(diǎn):由于感受野和anchor大小的限制, 對(duì)長(zhǎng)文本和曲線文本檢測(cè)困難.Github 開(kāi)源代碼: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算法中可以知道, 檢測(cè)長(zhǎng)文本是比較困難的, 或者說(shuō),想要一次性檢測(cè)整個(gè)文本行是比較困難, 針對(duì)這個(gè)問(wèn)題, 本文提出了一種新的思想Seglink (segment + link),它是在SSD目標(biāo)檢測(cè)方法的基礎(chǔ)上進(jìn)行改進(jìn)的,但是不通過(guò)矩形框來(lái)回歸文本區(qū)域的位置.Seglink模型的做法是:先將每個(gè)單詞切割成更易檢測(cè)的有方向的小文字塊(segment),然后用鄰近連接將各個(gè)小文字塊link成單詞。也就是說(shuō),網(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):對(duì)segments的預(yù)測(cè):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)前層的感受野來(lái)進(jìn)行設(shè)置scale size,而SSD是通過(guò)人工設(shè)定的. 對(duì)于link的預(yù)測(cè)包括同層(within-layer link)的和跨層(cross-layer link)的兩種: 對(duì)于conv4_3層,對(duì)于feature map的每個(gè)位置需要預(yù)測(cè)其link輸出的維度為2*8(文中對(duì)feature map中每個(gè)位置只預(yù)測(cè)一個(gè)segment,所以8就是當(dāng)前層8鄰域)=16;對(duì)于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ù)測(cè)出Segment 和 Link 之后,需要用一種算法將預(yù)測(cè)出的Segments組合起來(lái)或者叫連接起來(lái). 作者的算法是:首先通過(guò)人工設(shè)定的 α 和β(這兩個(gè)值是采用網(wǎng)格搜索找到最優(yōu)),對(duì)網(wǎng)絡(luò)預(yù)測(cè)的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): 間隔較大的文字塊不能檢測(cè)出來(lái),比較link只是針對(duì)鄰域的.Github 開(kāi)源代碼: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è)快速而精確的文本檢測(cè)器,叫做TextBoxes,也是在SSD的基礎(chǔ)上進(jìn)行改進(jìn)的。相對(duì)SSD的改變?nèi)缦滤狞c(diǎn):1、修改了default box的apect ratio,分別為[1 2 3 5 7 10],變成長(zhǎng)條狀。 2、修改classifier卷積核的大小為1*5,而SSD中卷積核的大小為3*3,這樣更適合文本檢測(cè)。 3、提出了一個(gè)端到端的訓(xùn)練框架.在測(cè)試的時(shí)候,輸入圖像由單尺度變成了多尺度 。 4、利用識(shí)別來(lái)調(diào)整檢測(cè)的結(jié)果。
主框架 TextBoxes是一個(gè)28層的全連接卷積網(wǎng)絡(luò),從主框架中可以看出,使用了1*5的卷積核,在每一個(gè)特征位置,預(yù)測(cè)一個(gè)72維的向量,因?yàn)槊恳粋€(gè)特征位置會(huì)有12個(gè)默認(rèn)框(12個(gè)框怎么來(lái)的呢,首先有6種比例就有六個(gè)框,但是論文中指出了,為了防止水平方向的框太過(guò)密集,而垂直方向稀疏,所以每個(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ù):見(jiàn)下文TextBoxes++,與其相同。
實(shí)驗(yàn)數(shù)值結(jié)果
實(shí)驗(yàn)效果圖,包含成功案例和失敗案例分析總結(jié):不能檢測(cè)任意方向文本塊.Github 開(kāi)源代碼: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),用于檢測(cè)自然場(chǎng)景圖片中任意方向的文本框,當(dāng)然這種方法并不局限于斜框文字檢測(cè),也可以用在其他領(lǐng)域。 傾斜四邊形如何表示,下邊這邊文章中寫(xiě)的比較清楚了,這篇文章用矩形的兩個(gè)坐標(biāo)點(diǎn)和矩形的高(x1,y1,x2,y2,h)來(lái)表示: stone:基于Faster RCNN的斜框檢測(cè):R2CNN https://zhuanlan.zhihu.com/p/41662351
網(wǎng)絡(luò)架構(gòu):
主框架第一步:通過(guò)RPN網(wǎng)絡(luò),得到正框的Proposal,并且把a(bǔ)nchor的大小從(8,16,32)改為(4,8,16,32) 或 (4,8,16),論文里說(shuō)了,將anchor調(diào)小對(duì)檢測(cè)是有幫助的。第二步:ROIPooling,使用了不同pooled size (7 × 7, 11 × 3, 3 × 11) 的 ROIPooling,將三種結(jié)果concate在一起,再經(jīng)過(guò)fc6,fc7進(jìn)行正框預(yù)測(cè),斜框預(yù)測(cè)以及分類預(yù)測(cè),之后,再通過(guò)斜框的NMS進(jìn)行后處理。 作者在論文里指出,每一個(gè)傾斜框都跟一個(gè)正框相關(guān)聯(lián),如下圖中的(a)與(c),之所以既要對(duì)正框預(yù)測(cè),又要對(duì)斜框預(yù)測(cè),作者認(rèn)為這能提升實(shí)驗(yàn)的效果。
斜NMS 斜NMS算法參考Arbitrary-Oriented Scene Text Detection via Rotation Proposals損失函數(shù):包含分類損失和回歸損失,回歸損失又包含正框和斜框兩部分。
loss實(shí)驗(yàn)結(jié)果:在精度上超過(guò)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)為效果沒(méi)有超過(guò)sota的原因是由于他們使用的訓(xùn)練數(shù)據(jù)不包含單個(gè)字符,如果包含,將可能會(huì)超過(guò)sota??偨Y(jié)分析:對(duì)斜的小的目標(biāo)可能效果好一點(diǎn)Github 開(kāi)源代碼: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++是對(duì)TextBoxes的改進(jìn)。
主框架相對(duì)TextBoxes的改變?nèi)缦拢?、對(duì)文本框的表示方式進(jìn)行了改進(jìn)。 在TextBoxes中,default box 是水平的框,不能檢測(cè)傾斜的文字。論文中討論了兩種表示方式:分別是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ù)測(cè)每個(gè)box上的文本存在概率以及位置偏置,以傾斜矩形為例,其預(yù)測(cè)輸出為: 預(yù)測(cè)輸出 根據(jù)預(yù)測(cè)輸出,計(jì)算檢測(cè)框的坐標(biāo)和高度,公式如下(傾斜矩形形式):
計(jì)算坐標(biāo)和高度
從默認(rèn)框回歸的過(guò)程 在TextBoxes++中,也為文本設(shè)置了垂直偏移,使得默認(rèn)框在垂直方向密集,如下圖所示,沒(méi)有垂直偏移的只有黑色虛線框,就會(huì)漏掉很多連續(xù)的垂直方向文本。黃色虛線框是加入了垂直偏移后的,文本信息都被包圍了進(jìn)去(本人覺(jué)得這里的作圖太過(guò)于刻意了,說(shuō)服力并不是很強(qiáng))。
垂直偏移 損失函數(shù)包含預(yù)測(cè)得分和預(yù)測(cè)定位兩部分損失(與TextBoxes相同): loss 其中,N是與GT匹配的default boxes數(shù)量,_α_設(shè)為0.2,對(duì)于分類用兩分類sotmax,對(duì)于定位用smooth L1。 此外,文章還用了On-line hard negative mining、數(shù)據(jù)增強(qiáng)、多尺度訓(xùn)練、有效級(jí)聯(lián)NMS等技巧。實(shí)驗(yàn)結(jié)果:從ICDAR和COCO-text的實(shí)驗(yàn)數(shù)值上對(duì)比可以看出,這篇18年的文章已經(jīng)完全干掉了17年的 EAST。
四邊形與傾斜矩形對(duì)比
可視化結(jié)果分析總結(jié):對(duì)TextBoxes 不能檢測(cè)任意方向文本塊的缺點(diǎn)進(jìn)行了改進(jìn),其精度已經(jīng)完全干掉了頭一年的EAST.Github 開(kāi)源代碼: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與前面幾篇只是檢測(cè)部分的不一樣,這篇論文是一個(gè)集合了文本檢測(cè)跟文字識(shí)別兩部分的一個(gè)統(tǒng)一的端到端的框架,可同時(shí)對(duì)圖像中的文字進(jìn)行檢測(cè)跟識(shí)別。之前的大部分方法都是將檢測(cè)跟識(shí)別當(dāng)做兩個(gè)獨(dú)立的任務(wù)去做,先檢測(cè),再識(shí)別。這篇論文提出的框架處處是可微的,所以可以對(duì)其進(jìn)行端到端的訓(xùn)練,結(jié)果表明,該網(wǎng)絡(luò)無(wú)需復(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作為文本檢測(cè)器,損失包含分類的loss(cross entrop)和坐標(biāo)的回歸的loss(IOU loss+角度loss),公式如下:
RoIRotate:RoiRotate將變換應(yīng)用于定向特征區(qū)域(有角度的),以獲得軸對(duì)齊的特征映射,如下圖所示:
特征區(qū)域角度變換 RoiRotate計(jì)算公式如下:
M是放射矩陣,包含旋轉(zhuǎn),縮放,平移 使用變換參數(shù),可以使用仿射變換輕松生成最終的roi特征:
這里的幾個(gè)公式涉及到很多參數(shù)的概念,涉及到雙線性插值,更具體的含義請(qǐng)看論文 :仿射變換矩陣,包含旋轉(zhuǎn),縮放,平移 :仿射變換后的特征圖的高度,實(shí)驗(yàn)中為8 :仿射變換后的特征圖的寬度 :特征圖中的點(diǎn)的坐標(biāo) :特征圖中的點(diǎn)距離旋轉(zhuǎn)的框的上下左右的距離 :檢測(cè)框的角度 :在位置(i,j),通道c處的輸出值。 :在位置(n,m),通道c處的輸入值。 :輸入的高度 :輸入的寬度 總之,經(jīng)過(guò)變換之后,我們可以獲得變換后的特征圖,然后將該特征圖輸入到 Text Recognition Branch進(jìn)行識(shí)別。Text Recognition Branch:這個(gè)分支使用共享卷基層的特征和變換后的特征來(lái)識(shí)別文字,其結(jié)構(gòu)類似CRNN結(jié)構(gòu),使用了類似VGG的順序卷積,一個(gè)雙向LSTM,最后再接CTC解碼器,對(duì)CRNN和CTC不熟悉的可先看: 白裳:一文讀懂CRNN+CTC文字識(shí)別 https://zhuanlan.zhihu.com/p/43534801
Text Recognition Branch Structure實(shí)驗(yàn)結(jié)果:精度上可以說(shuō)是很不錯(cuò)了
On ICDAR 2015
On ICDAR 2017
On ICDAR 2013
速度和模型大小比較總結(jié)分析:精度高,速度相對(duì)也比較快Github 開(kāi)源代碼: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通過(guò)前邊的文章我們可以發(fā)現(xiàn),對(duì)文本的檢測(cè)大都采用邊框回歸的思想來(lái)做,而這篇文章提出了不一樣的方法,文章提出采用實(shí)例分割的方法分割出文本行區(qū)域,然后直接找對(duì)應(yīng)文本行的外接矩形框,這樣就實(shí)現(xiàn)了對(duì)文本的檢測(cè)。 但是,通常文本之間挨得很近,很難將他們分割開(kāi)來(lái),如圖所示:
接下來(lái)我們就看看這篇文章是如何做的......框架結(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,對(duì)于PixelLink+VGG16 2s網(wǎng)絡(luò)結(jié)構(gòu):提取了conv2_2, conv3_3, conv4_3, conv5_3, fc_7. 2、對(duì)已提取的特征層,采用自頂向下的方法進(jìn)行融合,融合操作包括先向上采樣,然后再進(jìn)行add操作.注意:這里包含了兩種操作:pixel cls和pixel link(文本/非文本預(yù)測(cè)和Link預(yù)測(cè)),所以對(duì)應(yīng)的卷積核個(gè)數(shù)分別為2和16 。注意,fc6和fc7,被轉(zhuǎn)換為卷積層。
網(wǎng)絡(luò)結(jié)構(gòu)連接像素:到這一步,我們已經(jīng)得到了文本/非文本預(yù)測(cè)和Link預(yù)測(cè),設(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ù)測(cè)是由當(dāng)前兩個(gè)pixel共同決定的,兩個(gè)link中至少有一個(gè)是link positive。連接的規(guī)則采用的是Disjoint set data structure(并查集)的方法。外接矩形:直接使用Opencv里邊的minAreaRext提取文本的帶方向信息的外接矩形框。后期處理:在鏈接的過(guò)程可能引入噪聲,加入后期處理階段,可以通過(guò)矩形的長(zhǎng)、寬、面積、長(zhǎng)寬比信息等將一些明顯的錯(cuò)的區(qū)域過(guò)濾掉,以提高檢測(cè)精度。損失函數(shù):網(wǎng)絡(luò)的損失函數(shù)包含兩個(gè)部分:pixels loss和links loss: loss 損失函數(shù)的具體內(nèi)容在此不展開(kāi)討論,除了在損失函數(shù)上進(jìn)行的設(shè)計(jì),作者還借鑒了SSD里邊的數(shù)據(jù)增強(qiáng)的方法,具體的pixel loss 跟link loss如何設(shè)計(jì)以及如何生成訓(xùn)練數(shù)據(jù)的ground truth可參考大佬寫(xiě)的(我只是個(gè)搬運(yùn)工): 燕小花:文本檢測(cè)之PixelLink https://zhuanlan.zhihu.com/p/38171172實(shí)驗(yàn)結(jié)果:從數(shù)值結(jié)果從可以看出,確實(shí)比EAST強(qiáng),但是好像沒(méi)有比Seglink強(qiáng)太多。
總結(jié)分析:優(yōu)點(diǎn):無(wú)需在imagenet上預(yù)訓(xùn)練. 缺點(diǎn):跟Seglink一樣,間隔較大的文字塊不能檢測(cè)出來(lái).Github 開(kāi)源代碼: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文章的目的是要解決彎曲文字檢測(cè)的問(wèn)題,如下圖所示,對(duì)于彎曲文字,現(xiàn)有方法存在較大的問(wèn)題.
b中容易重疊,c中誤把多個(gè)實(shí)例識(shí)別成一個(gè)實(shí)例 作者認(rèn)為現(xiàn)在的文本檢測(cè)主流方法可以分成regression-based和segmentation-based兩類,本文提出來(lái)的方法屬于segmentation-based.論文的三大特點(diǎn):1、Segmentation-based方法能很好地解決任意形狀文本區(qū)域檢測(cè)這個(gè)問(wèn)題,因?yàn)檎Z(yǔ)義分割可以從像素級(jí)別上分割文字區(qū)域和背景區(qū)域. 2、對(duì)于如何分離靠的很近的文字塊,如上圖 (c) 所示,不能將他們分割開(kāi). 一個(gè)直觀的想法是增大文字塊之間的距離,使它們離得遠(yuǎn)一點(diǎn)?;谶@個(gè)思路,論文引入了新的概念 kernel. 3、有了kernel的概念, 作者通過(guò)一種基于廣度優(yōu)先搜索的漸進(jìn)擴(kuò)展算法來(lái)構(gòu)建完整的文字塊。這個(gè)方法的核心思想是:從每個(gè)kernel出發(fā),利用廣度優(yōu)先搜索來(lái)不斷地合并周圍的像素,使得kernel不斷地?cái)U(kuò)展,最后得到完整的文字塊。 下面就來(lái)看看這些特點(diǎn)具體是如何做的......Pipeline :框架的主干網(wǎng)絡(luò)是FPN,一張圖片通過(guò)FPN可以得到四個(gè)Feature Map (),然后通過(guò)函數(shù)合并這四個(gè)特征圖()得到.
pipeline的具體公式如下:
其中, || 代表 concatenation, U代表上采樣。 接著,通過(guò)來(lái)預(yù)測(cè)不同kernel scale的分割圖。其中是最小kernel scale的分割圖,里面不同的連通區(qū)域都可以看作不同文字塊的“kernel”。是最大kernel scale的分割圖,是個(gè)完整的文字快。最后通過(guò)一個(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 代表尋找連通分量的操作, 對(duì)著上圖來(lái)分析: 1、首先,對(duì)求連通區(qū)域,得到不同文字塊的“kernel”。 2、然后,通過(guò) (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. 來(lái)生成不同核尺度的標(biāo)簽.
Label Generation損失函數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)細(xì)節(jié):在此不細(xì)講,請(qǐng)參考原文:Shape Robust Text Detection with Progressive Scale Expansion Network實(shí)驗(yàn)結(jié)果:
總結(jié)分析:總實(shí)驗(yàn)數(shù)值結(jié)果可以看出,其檢測(cè)精度效果好,但是速度慢.Github 開(kāi)源代碼:https://github.com/liuheng92/tensorflow_PSENet https://github.com/WenmuZhou/PSENet.pytorch https://github.com/liuheng92/tensorflow_PSENet
-
人機(jī)交互
+關(guān)注
關(guān)注
12文章
1200瀏覽量
55324 -
檢測(cè)識(shí)別
+關(guān)注
關(guān)注
0文章
9瀏覽量
7230 -
OCR
+關(guān)注
關(guān)注
0文章
144瀏覽量
16330
原文標(biāo)題:一篇包羅萬(wàn)象的場(chǎng)景文本檢測(cè)算法綜述
文章出處:【微信號(hào):cas-ciomp,微信公眾號(hào):中科院長(zhǎng)春光機(jī)所】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論