機器之心專欄 本專欄由機器之心SOTA!模型資源站出品,每周日于機器之心公眾號持續(xù)更新。本專欄將逐一盤點自然語言處理、計算機視覺等領(lǐng)域下的常見任務(wù),并對在這些任務(wù)上取得過 SOTA 的經(jīng)典模型逐一詳解。前往 SOTA!模型資源站(sota.)即可獲取本文中包含的模型實現(xiàn)代碼、預(yù)訓(xùn)練模型及 API 等資源。本文將分 3 期進行連載,共介紹 17 個在OCR任務(wù)上曾取得 SOTA 的經(jīng)典模型。 第 1 期:CTPN、TextBoxes、SegLink、RRPN、FTSN、DMPNet 第 2 期:EAST、PixelLink、TextBoxes++、DBNet、CRNN、RARE 第 3 期:ABCNet、Deep TextSpotter、SEE、FOTS、End-to-End TextSpotter
您正在閱讀的是其中的第 2 期。前往 SOTA!模型資源站(sota.)即可獲取本文中包含的模型實現(xiàn)代碼、預(yù)訓(xùn)練模型及 API 等資源。 第 1 期回顧:CTPN、TextBoxes、SegLink、RRPN、FTSN、DMPNet…你都掌握了嗎?一文總結(jié)OCR必備經(jīng)典模型(一) 模型 | SOTA!模型資源站收錄情況 | 模型來源論文 |
---|
EAST | https://sota./project/east 收錄實現(xiàn)數(shù)量:6 支持框架:PyTorch、TensorFlow等 | EAST: An Efficient and Accurate Scene Text Detector | PixelLink | https://sota./project/pixellink 收錄實現(xiàn)數(shù)量:3 支持框架:TensorFlow | Detecting Scene Text via Instance Segmentation | TextBoxes++ | https://sota./project/textboxes-_1 收錄實現(xiàn)數(shù)量:4 支持框架:PyTorch、TensorFlow | TextBoxes++: A Single-Shot Oriented Scene Text Detector | DBNet | https://sota./project/dbnet_1 收錄實現(xiàn)數(shù)量:4 支持框架:PyTorch、TensorFlow等 | Real-time Scene Text Detection with Differentiable Binarization | CRNN | https://sota./project/crnn-4 收錄實現(xiàn)數(shù)量:4 支持框架:PyTorch、TensorFlow等 | An End-to-End Trainable Neural Network for Image-based Sequence Recognition and ItsApplication to Scene Text Recognition | RARE | https://sota./project/rare 收錄實現(xiàn)數(shù)量:3 支持框架:PyTorch、TensorFlow | Robust Scene Text Recognition with Automatic Rectification |
光學(xué)字符識別(Optical Character Recognition,OCR)是指對文本資料進行掃描后對圖像文件進行分析處理,以獲取文字及版面信息的過程。一般來說,在獲取到文字之前需要首先對文字進行定位,即執(zhí)行文本檢測任務(wù),將圖像中的文字區(qū)域位置檢測出來;在找到文本所在區(qū)域之后,對該區(qū)域中的文字進行文字識別。文字識別就是通過輸入文字圖片,然后解碼成文字的方法。OCR解碼是文字識別中最為核心的問題。傳統(tǒng)技術(shù)解決方案中,分別訓(xùn)練文本檢測和文字識別兩個模型,然后在實施階段將這兩個模型串聯(lián)到數(shù)據(jù)流水線中組成圖文識別系統(tǒng)。
對于文本檢測任務(wù),主要包括兩種場景,一種是簡單場景,另一種是復(fù)雜場景。簡單場景主要是對印刷文件等的文本檢測,例如像書本掃描、屏幕截圖,或是清晰度高、規(guī)整的照片等。由于印刷字體的排版很規(guī)范,背景清晰,現(xiàn)在的檢測、識別技術(shù)已經(jīng)很成熟了,檢測的效果都比較好。通過利用計算機視覺中的圖像形態(tài)學(xué)操作,包括膨脹、腐蝕基本操作,即可實現(xiàn)簡單場景的文字檢測。復(fù)雜場景主要是指自然場景,由于光照環(huán)境以及文字存在著很多樣的形式,例如燈箱廣告牌、產(chǎn)品包裝盒、設(shè)備說明、商標(biāo)等,存在角度傾斜、變形、背景復(fù)雜、光線忽明忽暗、清晰度不足等情況,這時要將文本檢測出來難度就比較大了,此時主要考慮引入深度學(xué)習(xí)模型進行檢測。
對于文字識別任務(wù),一般由下面的步驟組成:首先是讀取輸入的圖像,提取圖像特征,因此,需要有個卷積層用于讀取圖像和提取特征;然后,由于文本序列是不定長的,因此需要處理不定長序列預(yù)測的問題;再次,為了提升模型的適用性,最好不要要求對輸入字符進行分割,直接可進行端到端的訓(xùn)練,這樣可減少大量的分割標(biāo)注工作,這時就要引入 CTC 模型(Connectionist temporal classification, 聯(lián)接時間分類)來解決樣本的分割對齊的問題;最后,根據(jù)一定的規(guī)則,對模型輸出結(jié)果進行糾正處理,輸出正確結(jié)果。
最近流行的技術(shù)解決方案中,考慮用一個多目標(biāo)網(wǎng)絡(luò)直接訓(xùn)練出一個端到端的模型以替代兩階段模型。在訓(xùn)練階段,端到端模型的輸入是訓(xùn)練圖像及圖像中的文本坐標(biāo)、文本內(nèi)容,模型優(yōu)化目標(biāo)是輸出端邊框坐標(biāo)預(yù)測誤差與文本內(nèi)容預(yù)測誤差的加權(quán)和。在實施階段,原始圖像經(jīng)過端到端模型處理后直接輸出預(yù)測文本信息。相比于傳統(tǒng)方案,該方案中模型訓(xùn)練效率更高、資源開銷更少。 我們在這篇報告中分別總結(jié)了OCR中必備的文本檢測模型、文字識別模型和端到端的方法。其中,文本檢測模型主要考慮復(fù)雜場景中的深度學(xué)習(xí)模型。
一、文本檢測模型 1、 EASTEAST(Efficient and Accuracy Scene Tex)是曠世科技發(fā)布在CVPR2017的作品,由于提供了方向信息,EAST可以檢測各個方向的文本。EAST的整體網(wǎng)絡(luò)結(jié)構(gòu)分為3個部分:(1) 特征提取層,使用的基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)是PVANet,分別從stage1、stage2、stage3、stage4抽出特征,即一種FPN(feature pyramid network)的思想;(2) 特征融合層,在抽出的特征層從后向前做上采樣,然后執(zhí)行concat;(3) 輸出層,輸出一個score map和4個回歸的框加上1個角度信息,或者輸出一個scoremap和8個坐標(biāo)信息。
具體的,圖1給出原文的網(wǎng)絡(luò)結(jié)構(gòu)圖,該模型可以分解為三個部分:特征提取器stem、特征合并分支和輸出層。如圖所示,輸入一張圖片,經(jīng)過四個階段的卷積層可以得到四張feature map, 分別為f_4、f_3、f_2、f_1,它們相對于輸入圖片分別縮小1/4、1/8、1/16、1/32,之后使用上采樣、concat(串聯(lián))、卷積操作依次得到h_4、h_3、h_2、h_1,在得到這個融合的feature map后,使用大小為通道數(shù)為32的卷積核卷積得到最終的feature map。得到最終的feature map后,使用一個大小為1x1通道數(shù)為1的卷積核得到一張score map用表示。在feature map上使用一個大小為1x1通道數(shù)為4的卷積核得到text boxes,使用一個大小為1x1通道數(shù)為1的卷積核得到text rotation angle,這里text boxes和text rotation angle合起來稱為geometry map,并用F_g表示。 圖1文本檢測模型結(jié)構(gòu)
圖2 EAST pipeline
圖2展示了EAST的pipeline。將一幅圖像送入FCN( fully convolutional network),并生成多通道的像素級文本分?jǐn)?shù)圖和幾何圖形。其中一個預(yù)測通道是一個分?jǐn)?shù)圖,其像素值的范圍是[0, 1]。其余的通道表示從每個像素的角度來看包圍著這個詞的幾何形狀。分?jǐn)?shù)代表了在同一位置預(yù)測的幾何形狀的置信度。
F_s大小為原圖的1/4通道數(shù)為1,每個像素表示對應(yīng)于原圖中像素為文字的概率值,所以值在[0,1]范圍內(nèi)。F_g大小也為原圖的1/4通道數(shù)為5,即4+1(text boxes + text rotation angle)。text boxes通道數(shù)為4,其中text boxes每個像素如果對應(yīng)原圖中該像素為文字,四個通道分別表示該像素點到文本框的四條邊的距離,范圍定義為輸入圖像大小,如果輸入圖像為512,那范圍就是[0,512]。text rotation angle通道數(shù)為1,其中text rotation angle每個像素如果對應(yīng)原圖中該像素為文字,該像素所在框的傾斜角度,角度的度數(shù)范圍定義為[-45,45]。
損失函數(shù)為:
其中,?_s和?_g分別表示score map和geometry map的損失。score map采用交叉熵計算,geometry map用的是IoU loss的計算方式。
最后文章還提出了Locality-Aware NMS,先合并一次窗口,然后采用標(biāo)準(zhǔn)的NMS去抑制窗口。locality_aware_nms在標(biāo)準(zhǔn)nms的基礎(chǔ)上加了weighted_merge,將2個IoU高于某個threshold的輸出框進行基于得分的合并。合并后的輸出框的坐標(biāo)數(shù)值介于2個合并的輸入框之間,從而有效利用所有回歸出的框的坐標(biāo)信息,減少位置誤差。
項目 | SOTA!平臺項目詳情頁 |
---|
EAST | 前往 SOTA!模型平臺獲取實現(xiàn)資源:https://sota./project/east |
2、 PixelLink我們上述介紹的文本檢測算法中大部分是由文本/非文本分類和位置回歸任務(wù)組成的,而且回歸在獲取bounding box中扮演關(guān)鍵的角色。PixelLink放棄了回歸的方式去檢測bounding box,轉(zhuǎn)而采用實例分割的方式,把文字區(qū)域分割出來,然后找到相應(yīng)的外接矩形。相比于基于回歸的方法,PixelLink性能更優(yōu),且需要更少的訓(xùn)練數(shù)據(jù)和迭代次數(shù)。
PixelLink網(wǎng)絡(luò)的backbone采用的是VGG16,并將最后兩層全連接層改為卷積層,結(jié)構(gòu)采用的是FCN的結(jié)構(gòu),文章嘗試了兩種feature map的融合結(jié)構(gòu),分別取{conv2_2, conv3_3, conv4_3, conv5_3, fc_7}進行融合和取{conv3_3, conv4_3, conv5_3, fc_7}進行融合。輸入為圖像,輸出為18通道的結(jié)果,其中,2通道表示預(yù)測的每個像素是否為文本,16通道表示每個像素與它八個鄰域是否需要連接的概率圖。在得到上述的18個通道后,先是使用了兩個閾值分別對像素預(yù)測結(jié)果和link預(yù)測的結(jié)果進行過濾,然后對于預(yù)測為正樣本的像素結(jié)合link通道的預(yù)測結(jié)果將所有像素連接起來,這樣就能得到文本檢測的區(qū)域。大多數(shù)文字檢測算法的bounding box都是使用regression的方式得到,和回歸不同,論文使用了實例分割的方法先得到文字區(qū)域,然后使用opencv中的minAreaRect 算法得到相應(yīng)的矩形(該函數(shù)是輸出包圍點集的最小矩形,該矩形可以是旋轉(zhuǎn)的)。這樣就可以輸出一些列的文本框了,但是文章為了防止一些噪聲的影響,將檢查結(jié)果中短邊小于10或者面積小于300的文本框進行濾除,從而得到最終的文本檢查結(jié)果。 PixelLink完整的結(jié)構(gòu)如圖3。 圖3 PixelLink的架構(gòu)。訓(xùn)練一個CNN模型來進行兩種像素級的預(yù)測:文本/非文本預(yù)測和Link預(yù)測。經(jīng)過閾值處理后,positive像素被positive Link連接起來,實現(xiàn)實例分割。然后應(yīng)用minAreaRect直接從分割結(jié)果中提取邊界框??梢酝ㄟ^后置過濾來有效去除預(yù)測的噪聲。為了更好地說明問題,作者展示了一個輸入樣本。虛線框中的八個熱圖代表了八個方向的Link預(yù)測。盡管有些詞在文本/非文本預(yù)測中難以分離,但通過Link預(yù)測,它們是可以分離的
PixelLink的loss function由每個像素的分類損失函數(shù)和link損失函數(shù)組成,都采用了交叉熵。由于instance的大小不同,一些圖像文字區(qū)域的面積大于所有其他文字的面積,因此提出一種實例平衡交叉熵?fù)p失函數(shù),即為每一個instance計算一個權(quán)重:權(quán)重為所有像素面積的平均值除以每一個instance的面積。訓(xùn)練過程中采取了OHEM(Online Hard Example Ming)的訓(xùn)練策略,選取r x S個負(fù)樣本中l(wèi)oss最高的像素,其中,r為負(fù)樣本與正樣本的比值,一般選取3。link 的loss是要分成正負(fù)link分開計算的,分開計算后對正負(fù)link loss進行歸一化后相加,形成最終的link loss。
項目 | SOTA!平臺項目詳情頁 |
---|
PixelLink | 前往 SOTA!模型平臺獲取實現(xiàn)資源:https://sota./project/pixellink |
3、TextBoxes++TextBoxes++主要是受到SSD的default box啟發(fā),在SSD框架基礎(chǔ)之上做了一些調(diào)整,從而能夠檢測傾斜文本。SSD中default box 是水平的框,不能檢測傾斜的文字。為了檢測傾斜的文字,TextBoxes++采用四邊形或旋轉(zhuǎn)矩形來作為default box回歸的target。為了更加密集的覆蓋圖像中的文字,對default box 做了垂直方向的偏移,更加密集的覆蓋圖像。同時,為了使感受野更加適應(yīng)文本行,使用了長條狀的卷積核。在訓(xùn)練過程中,使用了OHEM(Online Hard Example Ming)和數(shù)據(jù)增強,并且數(shù)據(jù)增強使用了隨機裁剪的策略來增強對小目標(biāo)的檢測。TextBoxes++在6個不同的scale下檢測旋轉(zhuǎn)文字,在測試過程中,將所有的bounding box匯集到一起并做一起級聯(lián)的NMS。最后,將CRNN接在后端,利用文字識別的高語義去優(yōu)化檢測過程。
TextBoxes++的backbone是經(jīng)典的VGG16,保持前五個卷積層(conv1-conv5),并通過參數(shù)下采樣方法將最后兩個全連接轉(zhuǎn)化成卷積層(conv6-conv7),然后在后面再加上8個卷積層,每兩個一組(conv8-conv11),形成四個不同分辨率的stage。類似于SSD,不同scale的層都會接入到Multiple output layers,也叫text-box layers。它負(fù)責(zé)將不同scale下檢測到的框進行一個聚合,并做一個級聯(lián)的NMS。Textboxes++是一個全卷積的結(jié)構(gòu),因此在訓(xùn)練和測試的過程中可以接受不同大小的圖片。不同于Textboxes,TextBoxes++將最后一個global average pooling 替換成了卷積層,這樣有益于多尺度的訓(xùn)練和測試。 圖4 TextBoxes++是一個全卷積網(wǎng)絡(luò),包括來自VGG-16的13層,然后是10個額外的卷積層,6個文本框?qū)舆B接到6個中間卷積層。文本框?qū)拥拿總€位置預(yù)測每個默認(rèn)框的n維向量,包括文本存在分?jǐn)?shù)(2維)、水平邊界矩形偏移量(4維)和旋轉(zhuǎn)矩形邊界框偏移量(5維)或四邊形bounding box偏移量(8維)。在測試階段應(yīng)用非最大抑制,以合并所有6個文本框?qū)拥慕Y(jié)果。'#c '代表通道的數(shù)量
垂直偏移的default box text-box layer在輸入的特征圖的基礎(chǔ)上同時預(yù)測classification和regression,輸出的bounding box包括旋轉(zhuǎn)的bounding box和包含對應(yīng)旋轉(zhuǎn)矩形的最小外接矩形。這個可以通過回歸特征圖上的每個像素對應(yīng)的default box 的偏移來實現(xiàn)。在訓(xùn)練過程中,default box通過計算與ground truth的overlap來匹配ground truth,匹配策略和SSD相同。由于ground truth很多時候是傾斜的,因此,在匹配的時候,default box與ground truth的最小外接矩形計算IoU。因為default box 有很多不同的長寬比,這樣可以使其更加適應(yīng)任務(wù)。
卷積核形狀的選擇 對于水平框的情況下卷積核的形狀是1 x 5 ,但是對于帶有旋轉(zhuǎn)情況下文章選擇的是3 x 5。這種inception-style的不規(guī)則卷積核可以更好的適應(yīng)長寬比更大的文字。由于inception結(jié)構(gòu),這種方形的感受野帶來的噪聲信號也可以被避免。
訓(xùn)練部分 損失函數(shù)采用了和SSD相同的函數(shù),classification采用softmax交叉熵,regression采用smooth L1。 訓(xùn)練過程采用OHEM策略,不同于傳統(tǒng)的OHEM,訓(xùn)練分為兩個stage,stage1的正負(fù)樣本比為1:3,stage2的正負(fù)樣本比為1:6。
數(shù)據(jù)增強策略就是在原圖隨機裁剪一塊與ground truth 的Jaccard overlap大于最小值的圖片,此外增加一個目標(biāo)收斂的約束。對于裁剪后的bounding box B和ground-truth bounding box G,Jaccard overlap J和物體覆蓋度C定義為:
其中,| · |表示cardinality(即面積)。基于物體覆蓋率C的隨機裁剪策略更適合于小物體,如自然圖像中的大多數(shù)文字。
級聯(lián)NMS 由于計算傾斜文字的IoU較為耗時,作者在中間做了一個過渡,先計算所有框的最小外接矩形的IoU,做一次閾值為0.5的NMS,消除一部分框,然后在計算傾斜框的IoU的基礎(chǔ)上做一次閾值為0.2的NMS。
端到端文字識別 最后,在Textboxes++后端接上CRNN(Convolutional Recurrent Neural Network)的框架,可以識別出相應(yīng)的文字,然后通過文字的語義信息優(yōu)化檢測框的位置。整個CRNN網(wǎng)絡(luò)結(jié)構(gòu)包含三部分,從下到上依次為:CNN(卷積層),使用深度CNN,對輸入圖像提取特征,得到特征圖;RNN(循環(huán)層),使用雙向RNN(BLSTM)對特征序列進行預(yù)測,對序列中的每個特征向量進行學(xué)習(xí),并輸出預(yù)測標(biāo)簽(真實值)分布;CTC loss(轉(zhuǎn)錄層),使用 CTC 損失,把從循環(huán)層獲取的一系列標(biāo)簽分布轉(zhuǎn)換成最終的標(biāo)簽序列。關(guān)于CRNN我們會在后文“文字識別模型”章節(jié)中詳細(xì)介紹。 項目 | SOTA!平臺項目詳情頁 |
---|
TextBoxes++ | 前往 SOTA!模型平臺獲取實現(xiàn)資源:https://sota./project/textboxes-_1 |
4、 DBNetDBNet是基于圖像分割網(wǎng)絡(luò)的文本檢測方法,本文提出Differentiable Binarization module(DB module)來簡化分割后處理步驟,并且可以設(shè)定自適應(yīng)閾值來提升網(wǎng)絡(luò)性能。DBNet的網(wǎng)絡(luò)結(jié)構(gòu)見圖5,通過FPN網(wǎng)絡(luò)結(jié)構(gòu)(backbone)得到1/4的特征圖F,通過F得到probability map (P ) 和threshold map (T),通過P、T得到binary map(B)。在訓(xùn)練期間對P、T、B進行監(jiān)督訓(xùn)練,P和B使用相同的監(jiān)督信號(即label)。在推理時,只需要P或B就可以得到文本框。
圖5 DBNet結(jié)構(gòu),其中 'pred '包括一個3×3卷積算子和兩個跨度為2的去卷積算子。算子和兩個跨度為2的去卷積算子。1/2'、'1/4'、... '1/32 '表示與輸入圖像相比的比例
圖6 傳統(tǒng)pipeline(藍(lán)色流程)和DBNet Pipeline(紅色流程)。虛線箭頭是僅有的推理運算符;實線箭頭表示訓(xùn)練和推理中的可區(qū)分運算符 已有的一些基于分割的方法如圖14中藍(lán)色箭頭所示:首先,它們設(shè)置了固定的閾值,用于將分割網(wǎng)絡(luò)生成的概率圖轉(zhuǎn)換為二進制圖像;然后,用一些啟發(fā)式技術(shù)(例如像素聚類)將像素分組為文本實例。DBNet的做法如圖6中紅色箭頭所示:在得到分割map后,與網(wǎng)絡(luò)生成的threshold map進行一次聯(lián)合后做可微分二值化得到二值化圖,然后再經(jīng)過后處理得到最終結(jié)果。將二值化操作插入到分段網(wǎng)絡(luò)中以進行聯(lián)合優(yōu)化,通過這種方式,可以自適應(yīng)地預(yù)測圖像每個位置的閾值,從而可以將像素與前景和背景完全區(qū)分開。但是,標(biāo)準(zhǔn)二值化函數(shù)是不可微分的,因此,作者提出了一種二值化的近似函數(shù),稱為可微分二值化(DB),當(dāng)訓(xùn)練時,該函數(shù)完全可微分:
對于預(yù)測圖(probability map )label 生成任務(wù),給定一個文本圖像,其文本區(qū)域的每個多邊形都由一組片段描述:
然后,通過使用Vatti剪裁算法將多邊形G縮小到G_s,生成正面積。縮減的偏移量D是由原多邊形的周長L和面積A計算出來的,r是shrink ratio,設(shè)置為0.4:
使用 Vatti clipping algorithm 將G縮減到G_s,A是面積,r是shrink ratio,設(shè)置為0.4,L是周長。通過類似的方法,可以為閾值圖(threshold map)生成標(biāo)簽。首先,文本多邊形G以相同的偏移量D對Gd進行擴張。把G_s和G_d之間的空隙視為文本區(qū)域的邊界,在這里,閾值圖的標(biāo)簽可以通過計算與G中最近的片段的距離來生成。二值(binary map)圖的label由以上二者計算得來,計算后G_s外為0,G_s內(nèi)為1。
在預(yù)測圖(P)、閾值圖(T)和估計二值圖(B^)上分別定義損失為?_s、?_t、?_b,損失函數(shù)如下: 其中,?_s和?_b運用binary cross-entropy (BCE) loss,?_t運用L1 loss。只針對Gd里的像素點計算loss再求和:
最后在測試階段,再運用下式還原縮小的文本區(qū)域:
其中,A'是縮小的多邊形的面積,L'是縮小的多邊形的周長,r'根據(jù)經(jīng)驗設(shè)置為1.5。 項目 | SOTA!平臺項目詳情頁 |
---|
DBNet | 前往 SOTA!模型平臺獲取實現(xiàn)資源:https://sota./project/dbnet_1 |
二、文字識別模型 1、 CRNNCRNN 全稱為 Convolutional Recurrent Neural Network,主要用于端到端地對不定長的文本序列進行識別。CRNN不用先對單個文字進行切割,而是將文本識別轉(zhuǎn)化為時序依賴的序列學(xué)習(xí)問題,就是基于圖像的序列識別。CRNN是最經(jīng)典的文字識別模型。CRNN網(wǎng)絡(luò)結(jié)構(gòu)包含三部分,如圖15所示,從下到上依次為:卷積層,使用CNN,作用是從輸入圖像中提取特征序列;循環(huán)層,使用RNN,作用是預(yù)測從卷積層獲取的特征序列的標(biāo)簽(真實值)分布;轉(zhuǎn)錄層,使用CTC,作用是把從循環(huán)層獲取的標(biāo)簽分布通過去重整合等操作轉(zhuǎn)換成最終的識別結(jié)果。
圖7CRNN架構(gòu)
CRNN的輸入是100x32歸一化高度的詞條圖像,基于7層CNN(一般使用VGG16)提取特征圖,把特征圖按列切分(Map-to-Sequence),然后將每一列的512維特征輸入到兩層各256單元的雙向LSTM進行分類。在訓(xùn)練過程中,通過CTC損失函數(shù)的指導(dǎo),實現(xiàn)字符位置與類標(biāo)的近似軟對齊。
CRNN借鑒了語音識別中的LSTM+CTC的建模方法,不同之處是輸入LSTM的特征,即,將語音領(lǐng)域的聲學(xué)特征替換為CNN網(wǎng)絡(luò)提取的圖像特征向量。CRNN既提取了魯棒特征,又通過序列識別避免了傳統(tǒng)算法中難度極高的單字符切分與單字符識別,同時序列化識別也嵌入時序依賴(隱含利用語料)。在訓(xùn)練階段,CRNN將訓(xùn)練圖像統(tǒng)一縮放至100×32;在測試階段,針對字符拉伸導(dǎo)致識別率降低的問題,CRNN保持輸入圖像尺寸比例,然后將圖像高度統(tǒng)一為32個像素,卷積特征圖的尺寸動態(tài)決定LSTM時序長度。CRNN具體參數(shù)如下表1。
表1 CRNN網(wǎng)絡(luò)配置摘要。第一行是top層。k'、's '和 'p '分別代表內(nèi)核大小、跨度和填充大小
CRNN中一共有四個最大池化層,最后兩個池化層的窗口尺寸由 2x2 改為 1x2,也就是圖片的高度減半了四次,而寬度則只減半了兩次。采用這種處理方式是因為文本圖像多數(shù)都是高較小而寬較長的,所以其feature map也是這種高小寬長的矩形形狀。因此,使用1×2的池化窗口可以盡量保證不丟失在寬度方向的信息,更適合英文字母識別(比如區(qū)分i和l)。此外,如表1所示,CRNN 還引入了BatchNormalization模塊,加速模型收斂,縮短訓(xùn)練過程。
在CRNN模型中,卷積層的組件是通過從標(biāo)準(zhǔn)CNN模型中提取卷積層和最大集合層來構(gòu)建的(移除全連接層)。使用該組件從輸入圖像中提取一個連續(xù)的特征表示。在送入網(wǎng)絡(luò)之前,所有的圖像都需要縮放到相同的高度。然后,從卷積層組件產(chǎn)生的特征圖中提取一連串的特征向量,這是RNN的輸入。一個特征序列的每個特征向量在特征圖上從左到右按列生成。這意味著第i個特征向量是所有map的第i列的連接。在作者原文設(shè)置中,每一列的寬度被固定為單像素。
RNN 有梯度消失的問題,不能獲取更多的上下文信息,所以 CRNN 中使用的是 LSTM,LSTM 的特殊設(shè)計允許它捕獲長距離依賴。LSTM 是單向的,它只使用過去的信息。然而,在基于圖像的序列中,兩個方向的上下文是相互有用且互補的。因此,CRNN將兩個LSTM(一個前向和一個后向)組合到一個雙向LSTM中。此外,可以堆疊多層雙向LSTM,深層結(jié)構(gòu)允許比淺層抽象更高層次的抽象。這里采用的是兩層各256單元的雙向 LSTM 網(wǎng)絡(luò): 圖8 (a) 一個基本的LSTM單元結(jié)構(gòu)。一個LSTM由一個單元模塊和三個門組成,即輸入門、輸出門和遺忘門。(b) 論文中使用的深度雙向LSTM結(jié)構(gòu)。將一個前向(從左到右)和一個后向(從右到左)的LSTM結(jié)合起來就形成了雙向LSTM。將多個雙向LSTM堆疊在一起,就形成了深度雙向LSTM
一個特征向量就相當(dāng)于原圖中的一個小矩形區(qū)域,RNN 的目標(biāo)就是預(yù)測這個矩形區(qū)域為哪個字符,即根據(jù)輸入的特征向量,進行預(yù)測,得到所有字符的softmax概率分布。將這個長度為字符類別數(shù)的特征向量作為CTC層的輸入。因為每個時間步長都會生成一個輸入特征向量 x^T,輸出一個所有字符的概率分布y^T,所以輸出為 40 個長度為字符類別數(shù)的向量構(gòu)成的后驗概率矩陣。然后將這個后驗概率矩陣傳入轉(zhuǎn)錄層。
CRNN中需要解決的關(guān)鍵問題是圖像文本長度不定長,所以RNN需要一個額外的搭檔來解決對齊解碼的問題,這個搭檔就是著名的CTC解碼。CRNN采取的架構(gòu)是CNN+RNN+CTC,CNN提取圖像像素特征,RNN提取圖像時序特征,而CTC歸納字符間的連接特性。轉(zhuǎn)錄層輸入是一個序列y =y1, . . . , yT,其中T是序列的長度。這里,每個yt是集合L’ =L ∪上的概率分布,其中L包含任務(wù)中的所有標(biāo)簽(例如所有的英文字符),以及一個 'blank '標(biāo)簽。在序列π∈L’^T上定義了一個序列到序列的映射函數(shù)B,其中T是長度。B將π映射到l上,首先去除重復(fù)的標(biāo)簽,然后去除 'blank'。例如,B將'—hh-e-l-ll-oo-'('-'代表'blank')映射到 'hello'。然后,條件概率定義為由B映射到l上的所有π的概率之和:
無詞典轉(zhuǎn)錄(Lexicon-free transcription) 在這種模式下,上式中定義的具有最高概率的序列l(wèi)?被作為預(yù)測值。并不存在精確找到解決方案的可操作的算法,作者采用的方式是通過l?≈B(argmax_π p(π|y))近似地找到序列l(wèi)?,即在每個時間戳t取最有可能的標(biāo)簽π_t,并將結(jié)果序列映射到l?。
基于詞典的轉(zhuǎn)錄(Lexicon-based transcription) 在基于詞典的模式下,每個測試樣本都與一個詞典D相關(guān)聯(lián)。基本上,標(biāo)簽序列是通過選擇詞典中具有最高條件概率的序列來識別的,該概率由上式定義,即l?=argmax l∈D p(l|y)。可以將我們的搜索限制在最近的鄰域候選人N_δ(l'),其中,δ是最大的編輯距離,l'是在無詞典模式下從y轉(zhuǎn)錄的序列:
可以通過BK-樹數(shù)據(jù)結(jié)構(gòu)尋找候選者Nδ(l'),BK-樹是一種專門適用于離散公制空間的公制樹(metric tree)。BK-樹的搜索時間復(fù)雜度為O(log |D|),其中|D|為詞典大小。因此,這個方案很容易擴展到非常大的詞典。在本文方法中,為一個詞典離線構(gòu)建一個BK-樹。然后,通過尋找與查詢序列的編輯距離小于或等于δ的序列,用BK-樹進行快速的在線搜索。
通過對概率的計算,就可以對之前的神經(jīng)網(wǎng)絡(luò)進行反向傳播更新。類似普通的分類,CTC的損失函數(shù)O定義為負(fù)的最大似然,為了計算方便,對似然取對數(shù):
通過對損失函數(shù)的計算,就可以對之前的神經(jīng)網(wǎng)絡(luò)進行反向傳播,神經(jīng)網(wǎng)絡(luò)的參數(shù)根據(jù)所使用的優(yōu)化器進行更新,從而找到最可能的像素區(qū)域?qū)?yīng)的字符。這種通過映射變換和所有可能路徑概率之和的方式使得 CTC 不需要對原始的輸入字符序列進行準(zhǔn)確的切分。
對于測試階段,使用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)來識別新的文本圖像。文本事先未知,如果像訓(xùn)練階段一樣將每種可能文本的所有路徑都計算出來,在時間步長較長和字符序列較長的情況下,這個計算量是非常龐大的。RNN 在每一個時間步長的輸出為所有字符類別的概率分布,即一個包含每個字符分?jǐn)?shù)的向量,取其中最大概率的字符作為該時間步長的輸出字符,然后將所有時間步長得到的字符進行拼接以生成序列路徑,即最大概率路徑,再根據(jù)上面介紹的合并序列方法得到最終的預(yù)測文本結(jié)果。在輸出階段經(jīng)過 CTC 的翻譯,即將網(wǎng)絡(luò)學(xué)習(xí)到的序列特征信息轉(zhuǎn)化為最終的識別文本,就可以對整個文本圖像進行識別。 項目 | SOTA!平臺項目詳情頁 |
---|
CRNN | 前往 SOTA!模型平臺獲取實現(xiàn)資源:https://sota./project/crnn-4 |
2、 RARERARE模型實現(xiàn)對不規(guī)則文本的端到端文字識別,RARE由STN(Spatial Transformer Network)和SRN(Sequence Recognition Network)組成,兩個網(wǎng)絡(luò)同時用BP算法進行訓(xùn)練。STN用于對輸入的不規(guī)則文本進行矯正,得到形狀規(guī)則的文本作為SRN的輸入,SRN是一個基于注意力機制的網(wǎng)絡(luò)結(jié)構(gòu),實現(xiàn)sequence to sequence的文本識別。
在測試中,先將一張圖像通過Thin-Plate-Spline (TPS)變換成一個正規(guī)的、更易讀的圖像,此變換可以矯正不同類型的不規(guī)則文本,包括透射變換和彎曲的文本。TPS變換由一組基準(zhǔn)點(fiducial points)表示,坐標(biāo)通過卷積神經(jīng)網(wǎng)絡(luò)回歸得到。然后再放入SRN中進行識別。SRN使用序列識別的基于注意力的方法,包含一個編碼器和一個解碼器。編碼器生成一個特征表示序列,即序列的特征向量;解碼器根據(jù)輸入序列循環(huán)地生成一個字符序列。這個系統(tǒng)是一個端到端的文本識別系統(tǒng),在訓(xùn)練過程中也不需要額外標(biāo)記字符串的關(guān)鍵點、字符位置等。
STN主要包括三個部分:1) Localization network; 2) Grid Generator; 3) Sampler,具體結(jié)構(gòu)如圖17所示。其中,Localization network在沒有任何標(biāo)注數(shù)據(jù)的前提下,基于圖像內(nèi)容定位到基準(zhǔn)點的位置。文中該網(wǎng)絡(luò)結(jié)構(gòu)與傳統(tǒng)的CNN網(wǎng)絡(luò)結(jié)構(gòu)相似:4個卷積層,每個卷積層后接一個2 x 2的max-pooling層,再接2個1024維的全連接層,最后輸出為40維的向量。此處的輸出為基準(zhǔn)點的坐標(biāo),設(shè)定基準(zhǔn)點個數(shù)為 k=20。2) Grid Generator和Sampler中,Grid generator估計出TPS變換參數(shù),生成一個采樣網(wǎng)格。給定pi′的坐標(biāo),計算出pi的坐標(biāo)。文章固定了基準(zhǔn)點在目標(biāo)圖像中的位置,再來計算目標(biāo)圖像中每個坐標(biāo)的像素值。得到原圖中pi的坐標(biāo)后,在Sampler中,pi坐標(biāo)附近的像素值已知,通過雙線性差值得到pi′坐標(biāo)的像素值。以此類推,得到最終的目標(biāo)圖像I′。 圖9 STN結(jié)構(gòu)
SRN是一個基于注意力的模型,包括encoder和decoder。Encoder由卷積層和BLSTM組成,Decoder由基于注意力機制的GRU(Gated Recurrent Unit)組成,如圖18所示。Encoder包含7個卷積層,第1、2、4、6個卷積層后均接一個2x2的max-pooling層,卷積層上是一個雙層的BLSTM網(wǎng)絡(luò),每一個LSTM有256個隱單元。encoder的輸出序列為h=(h1,h2,…,hL),其中,L等于卷積層的寬度。decoder根據(jù)encoder輸出的序列循環(huán)地生成目標(biāo)字符序列。decoder是基于注意力機制的循環(huán)網(wǎng)絡(luò),此處網(wǎng)絡(luò)結(jié)構(gòu)采用的GRU是LSTM的一種變體,根據(jù)輸出不斷更新權(quán)重α。最后通過softmax函數(shù)來計算概率分布,l_t^為概率最高的字符:
SRN直接將一個輸入序列映射到另一個序列。輸入和輸出的序列都可以有任意的長度。它可以只用單詞圖像和相關(guān)文本進行訓(xùn)練。
圖10 SRN結(jié)構(gòu),它由一個編碼器和一個解碼器組成。編碼器使用幾個卷積層(ConvNet)和一個兩層的BLSTM網(wǎng)絡(luò)來提取輸入圖像的順序表示(h)。解碼器生成一個以h為條件的字符序列(包括EOS令牌)
為了訓(xùn)練模型,我們使訓(xùn)練集上的負(fù)對數(shù)可能性最小化:
RARE采用ADADELTA作為優(yōu)化算法,收斂速度較快。模型參數(shù)是隨機初始化的,除了Localization network,其輸出全連接層是通過設(shè)置權(quán)重為零來初始化的。
當(dāng)測試圖像與詞典相關(guān)聯(lián)時,即一組供挑選的詞,識別過程是挑選具有最高后驗條件概率的詞:
為了縮小詞典集,構(gòu)造前綴樹,如下圖:
圖11一個由三個詞組成的前綴樹。'ten'、'tea '和 'to'。識別工作從樹根開始。每一步計算所有子節(jié)點的后驗概率。具有最高概率的子節(jié)點被選為下一個節(jié)點。這個過程反復(fù)進行,直到到達一個葉子節(jié)點。邊緣上的數(shù)字是后驗概率。藍(lán)色節(jié)點是被選中的節(jié)點。在這種情況下,預(yù)測的詞是 'tea' 項目 | SOTA!平臺項目詳情頁 |
---|
RARE | 前往 SOTA!模型平臺獲取實現(xiàn)資源:https://sota./project/rare |
前往 SOTA!模型資源站(sota.)即可獲取本文中包含的模型實現(xiàn)代碼、預(yù)訓(xùn)練模型及API等資源。
網(wǎng)頁端訪問:在瀏覽器地址欄輸入新版站點地址 sota. ,即可前往「SOTA!模型」平臺,查看關(guān)注的模型是否有新資源收錄。
|