场景文本检测(Scene text detection) -- CTPN
什么是OCR?
其中OCR識(shí)別的關(guān)鍵技術(shù)在于文字檢測(cè)和文本識(shí)別部分,這也是深度學(xué)習(xí)技術(shù)可以充分發(fā)揮功效的地方。
自然場(chǎng)景文字識(shí)別(Scene text detection)
CTPN 網(wǎng)絡(luò)結(jié)構(gòu)
細(xì)節(jié)補(bǔ)充
01. Detecting Text in Fine-scale proposals
02. Recurrent Connectionist Text Proposals
03. side-refinement
04. Model outputs and loss function
什么是OCR?
OCR的全稱(chēng)是"Optical Character Recognition".它利用光學(xué)技術(shù)和計(jì)算機(jī)技術(shù)讀取打印在紙上或?qū)懺诩埳系奈淖?,并將其轉(zhuǎn)換為計(jì)算機(jī)和人都能理解的形式.
簡(jiǎn)易OCR的過(guò)程
第一步,通過(guò)圖像信息采集(一般是相機(jī)),得到了一幅包含待識(shí)別字符的圖像,并對(duì)其結(jié)構(gòu)進(jìn)行了分析.
第二步,采用閾值運(yùn)算等圖像處理方法對(duì)待測(cè)對(duì)象進(jìn)行去噪,并校正待檢測(cè)的物體.
第三步,由于文本信息的特殊性,需要進(jìn)行行和列分割用于檢測(cè)單個(gè)或連續(xù)的字符.
第四步,將分割后的字符圖像導(dǎo)入識(shí)別模型進(jìn)行處理, 從而獲得原始圖像中的字符信息.
其中,OCR識(shí)別的關(guān)鍵技術(shù)在于文字檢測(cè)和文本識(shí)別部分,這也是深度學(xué)習(xí)技術(shù)可以充分發(fā)揮功效的地方。
自然場(chǎng)景文字識(shí)別(Scene text detection)
印刷字體的OCR技術(shù)現(xiàn)在已經(jīng)相當(dāng)成熟.騰訊Tim手機(jī)版自帶圖像文本提取功能;Microsoft Office lens具備掃描功能.雖然不能說(shuō)100%正確,但基本上可以做到95%以上的打印字體識(shí)別基本可以完成.所以現(xiàn)在的技術(shù)關(guān)注更多的是"場(chǎng)景文本識(shí)別",表示在復(fù)雜的環(huán)境中進(jìn)行字符識(shí)別.如下圖所示的兩種環(huán)境:
復(fù)雜場(chǎng)景的字符識(shí)別的操作主要包含兩步:文本檢測(cè)和文本識(shí)別.CTPN便是一種效果不錯(cuò)的提取場(chǎng)景文本的算法,它可以檢測(cè)文本信息在自然環(huán)境中的位置.
在選擇圖像中的位置信息時(shí),很容易想到用于目標(biāo)檢測(cè)的R-CNN模型(從一副圖中尋找RoI).畢竟,近幾年中,談起圖像處理,人們會(huì)想到CNN.
基于這種處理方式,可以將"字符位置"進(jìn)行標(biāo)記,然后將截取的圖片放入CNN模型中進(jìn)行處理? 然而,現(xiàn)實(shí)并非如此. 大量文本信息的文本、字體、位置等各種情況直接對(duì)R-CNN方法造成了干擾,造成了嚴(yán)重偏差。鑒于這種情況,CTPN便是通過(guò)結(jié)合CNN的優(yōu)點(diǎn),針對(duì)環(huán)境文本信息做出反應(yīng)的模型.
CTPN 網(wǎng)絡(luò)結(jié)構(gòu)
文本信息的字符是一個(gè)序列,是一個(gè)由"字符、部分字符、多字符"組成的序列。如下圖所示,待檢測(cè)的文本信息具備"序列"這樣的特征. 很顯然,基于這樣的特征,文本檢測(cè)識(shí)別的目標(biāo)不同于一般的目標(biāo)檢測(cè),可以獨(dú)立的針對(duì)各個(gè)目標(biāo)進(jìn)行檢測(cè).同時(shí),基于"序列"的特征,會(huì)比較容易的想到利用上下文的語(yǔ)境,利用上下文確定文本的位置. 這自然會(huì)想到RNN系列的模型.
值得注意的是,作者認(rèn)為預(yù)測(cè)文本水平方向的位置要比預(yù)測(cè)文本垂直方向的位置困難得多。
因此,在檢測(cè)過(guò)程中,可以引入數(shù)學(xué)上類(lèi)似的"微分"思想。首先檢測(cè)一個(gè)固定寬度的小文本段。在后處理部分,將這些小文本段連接起來(lái),得到一條文本行,如下圖所示。
通過(guò)將CNN和RNN,以及數(shù)學(xué)上"微分"的思想作用于處理文本。CTPN的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:
繪制結(jié)構(gòu)圖:http://ethereon.github.io/netscope/#/editor
結(jié)構(gòu)代碼:https://github.com/tianzhi0549/CTPN/blob/master/models/deploy.prototxt
具體操作可以劃分為5步:
1. 首先,使用VGG-16模型中的前5個(gè)Conv獲得feature map,大小為N*C*W*H。VGG網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,使用的網(wǎng)絡(luò)結(jié)構(gòu)如紅色框體內(nèi)。由于紅色框體內(nèi)共包含4個(gè)池化操作,因此,此時(shí)輸出的feature map 為原圖的1/16。
2. 利用3*3滑動(dòng)窗口從上一步得到的feature map中提取特征,生成3*3*C的特征向量。輸出N*9C*H*W的feature map。并利用這些特征預(yù)測(cè)多個(gè)anchor。這里anchor的定義與Faster-Rcnn中的相同。
3*3滑動(dòng)窗口的操作如下圖所示,即提取每個(gè)點(diǎn)附近的9個(gè)臨近點(diǎn),每行都如此處理,也就使得特征提取前后分辨率不發(fā)生變化。即feature map維度的變化如下:
3. 將上一步得到的特征輸入到Bi-LSTM中,輸出W*256的結(jié)果(128雙向整合結(jié)果),再將結(jié)果輸入到512維全連接層(FC)中。結(jié)構(gòu)輸出節(jié)點(diǎn)數(shù)量可參照下圖。
這里會(huì)有一個(gè)轉(zhuǎn)換,就是如何將圖像形狀(N*9C*H*W)轉(zhuǎn)化為L(zhǎng)STM可以輸入的向量(一維向量)?如下圖im2col_transpose操作所示,將feature map(N*9C*H*W)進(jìn)行reshape操作。
reshape的具體操作如下所示:
基于此,作者以NH=Batch,W作為L(zhǎng)STM的最大時(shí)間長(zhǎng)度,9C作為L(zhǎng)STM網(wǎng)絡(luò)輸入節(jié)點(diǎn)的個(gè)數(shù)。此時(shí),數(shù)據(jù)維度符合LSTM輸入的要求。
4. 最后,通過(guò)分類(lèi)或回歸得到的輸出主要分為三個(gè)部分。根據(jù)網(wǎng)絡(luò)結(jié)構(gòu)圖,從上到下依次為:
vertical coordinates(2k):錨框的高度和中心點(diǎn)y軸坐標(biāo);
scores (2k):錨框的類(lèi)別得分,即表示當(dāng)前錨框中包含的內(nèi)容為是否是一個(gè)字符的得分。
side-refinement (k):表示水平偏移量。
其中,k表示錨框的數(shù)量。在實(shí)驗(yàn)中,錨框的水平寬度為16 像素,
這一部分是通過(guò)Faster R-CNN中的RPN網(wǎng)絡(luò)獲得text proposals,也就是上述三部分的過(guò)程。
5. 獲得text proposals后,使用文本構(gòu)造算法,將得到的細(xì)長(zhǎng)矩形合并到一個(gè)文本序列框中。
細(xì)節(jié)補(bǔ)充
01. Detecting Text in Fine-scale proposals
CTPN與RPN和Faster R-CNN主要區(qū)別在于引入了"微分"思想,即將候選區(qū)域切割成細(xì)小的條狀進(jìn)行處理。其采用了一組(10個(gè))等寬度的anchor,高度從11到283變化(by ÷0.7 each time)。寬、高可以清晰的表示為:
RPN與Fine-scale text proposals對(duì)比結(jié)果如下所示:
文獻(xiàn)中返回y軸坐標(biāo)的方法如下所示,其中,*表示真實(shí)值;vc, vh表示預(yù)測(cè)的中心y坐標(biāo)和高度,vc*,vh*表示Ground Truth;cya,ha表示anchor的中心y坐標(biāo)和高度(pre-computed)。cy和h表示預(yù)測(cè)的中心y坐標(biāo)和高度。
02. Recurrent Connectionist Text Proposals
該方法對(duì)應(yīng)于前一個(gè)過(guò)程中"Bi-LSTM"的細(xì)節(jié),上下文信息用于文本位置的定位。Bi-LSTM具有128個(gè)隱含層節(jié)點(diǎn),輸入是由3*3的滑動(dòng)窗口構(gòu)成的3*3*C的特征,由于是雙向,最終形成256的輸出。如下圖所示:
使用RNN和不使用RNN的對(duì)比結(jié)果如下圖所示,第一行是不使用RNN的CTPN;第二行是使用RNN的CTPN。
03. side-refinement
side-refinement是最后的優(yōu)化過(guò)程,通過(guò)合并和匯總已定位的"小矩形",得到所需文本信息的位置信息。即合并下圖中的紅色小矩形,最后生成一個(gè)黃色大矩形。"小矩形"是否保留直接通過(guò)有無(wú)文本信息的得分是否大于0.7來(lái)判斷。
對(duì)于將一系列紅色小矩形合并成最終的黃色大矩形的方法遵循以下規(guī)則(下面簡(jiǎn)稱(chēng)文本線構(gòu)造方法):
因?yàn)樗付ǚ祷乜虻膶挾葹楣潭ǖ?6像素,所以它將導(dǎo)致一些位置錯(cuò)誤。定義公式如下:
其中,*表示GroundTruth;Xside表示回歸的左/右邊界,cxa表示錨點(diǎn)中心的橫坐標(biāo),wa為16像素的固定寬度。所以O(shè)的定義相當(dāng)于一個(gè)縮放比例,這有助于我們對(duì)回歸后的方框結(jié)果進(jìn)行拉伸,從而更好地匹配實(shí)際文本的位置。對(duì)比圖如下,紅色方框?yàn)槭褂胹ide-refinement,黃色方框?yàn)槲词褂胹ide-refinement的結(jié)果:
04. Model outputs and loss function
輸出一共包含三個(gè)部分:
是否有文本的得分 2k
縱坐標(biāo) vc,vh 2k
side-refinement的偏移量(o)k
因此,損失函數(shù)也包含三部分,一個(gè)分類(lèi)損失,兩個(gè)回歸損失:
anchor softmax loss: 針對(duì)每個(gè)anchor中是否包含文本。si*={0,1};
anchor y坐標(biāo)回歸損失: 針對(duì)包含文本的anchor y方向的偏移量;
anchor x坐標(biāo)回歸損失: 針對(duì)包含文本的anchor x方向的偏移量。
在整個(gè)過(guò)程中,該方法最大的兩點(diǎn)也是將RNN引入到文本檢測(cè)中,利用"微分"的思想來(lái)減少被檢測(cè)的誤差,以及使用定寬錨檢測(cè)多塊分割。最后一個(gè)合并序列是需要檢測(cè)的文本區(qū)域。CNN和RNN之間高效無(wú)縫的連接大大提高了準(zhǔn)確率。實(shí)驗(yàn)對(duì)比如下表所示:
總結(jié)
以上是生活随笔為你收集整理的场景文本检测(Scene text detection) -- CTPN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是 Angular 的多级注入器
- 下一篇: 写给即将离开校园准备进入 SAP 研究院