何偉鑫,鄧建球,叢林虎
(海軍航空大學(xué) 岸防兵學(xué)院,山東 煙臺(tái) 264001)
隨著智能化時(shí)代的發(fā)展,大多數(shù)行業(yè)均向著人工智能化方面發(fā)展。部隊(duì)也在積極尋求著人工智能方面的應(yīng)用。海航機(jī)載彈藥大隊(duì)任務(wù)繁忙,彈庫(kù)裝備出入庫(kù)次數(shù)較多,而每一次進(jìn)出均需進(jìn)行出入庫(kù)的登記。而目前卻還是人工登統(tǒng)計(jì)的方式進(jìn)行著工作,浪費(fèi)時(shí)間與人力,這與我軍的發(fā)展目標(biāo)背道而馳。隨著深度學(xué)習(xí)的發(fā)展,可利用自然場(chǎng)景文字識(shí)別技術(shù)識(shí)別裝備上的編號(hào),實(shí)現(xiàn)彈庫(kù)自動(dòng)化登統(tǒng)計(jì)方式[1-4]。
識(shí)別自然場(chǎng)景中的文字意指從圖片中定位到文字部分,而后得出具體文字內(nèi)容的過(guò)程。該過(guò)程不僅可單獨(dú)用于文字的實(shí)際識(shí)別,同時(shí)也可與場(chǎng)景文字檢測(cè)算法組合成為一個(gè)連續(xù)的端到端場(chǎng)景文字識(shí)別系統(tǒng)。場(chǎng)景文字識(shí)別技術(shù)是一項(xiàng)難度系數(shù)較大的任務(wù),因?yàn)樽匀粓?chǎng)景中不僅存在光照的變化以及圖像的復(fù)雜背景,同時(shí)文字存在的多角度、多維、文字的長(zhǎng)度等也影響著場(chǎng)景文字識(shí)別的準(zhǔn)確度。所以,不同于傳統(tǒng)圖像分類技術(shù),自然場(chǎng)景文字識(shí)別技術(shù)[5-9]尋求的是從圖像中識(shí)別出非固定長(zhǎng)度序列。
傳統(tǒng)文本識(shí)別方法局限太大,如模板匹配法在一些應(yīng)用很湊效,如身份證號(hào)碼識(shí)別,其只存在阿拉伯?dāng)?shù)字、字體統(tǒng)一清晰,識(shí)別難度較低。然而較復(fù)雜的場(chǎng)景,傳統(tǒng)方法難以滿足需求。而OCR的通用方法:設(shè)計(jì)特征,提取特征而后進(jìn)行分類,得出最終識(shí)別結(jié)果,但效果也很難達(dá)到應(yīng)用需求。針對(duì)傳統(tǒng)OCR的不足,使得基于深度學(xué)習(xí)的OCR大放異彩[10-13]。
深度學(xué)習(xí)的出現(xiàn),讓文字識(shí)別技術(shù)有了新突破,識(shí)別率有了質(zhì)的提升,同時(shí)不需耗費(fèi)較長(zhǎng)時(shí)間對(duì)字符特征進(jìn)行設(shè)計(jì)。在文字識(shí)別模型中,神經(jīng)網(wǎng)絡(luò)的任務(wù)是提取圖像特征并歸類,得到文本的具體結(jié)果。其中,在眾多基于深度學(xué)習(xí)的文本識(shí)別算法中,CRNN[14]算法無(wú)疑是性能最為優(yōu)秀的,文獻(xiàn)[14]表明了該算法在多個(gè)數(shù)據(jù)集中的識(shí)別準(zhǔn)確率遙遙領(lǐng)先于其他算法,且該算法支持多方向文本識(shí)別,對(duì)復(fù)雜場(chǎng)景下的文本等也擁有較高的識(shí)別率[15-20]。
針對(duì)包含航空導(dǎo)彈編號(hào)的文本識(shí)別,介紹基于CRNN的導(dǎo)彈編號(hào)識(shí)別模型AA-CRNN。AA-CRNN增加了非對(duì)稱卷積(asymmetric convolution)和注意力機(jī)制(attention),可以提取更豐富的語(yǔ)義信息[21-23]。而基于深度學(xué)習(xí)的文字識(shí)別算法需大量文本圖片數(shù)據(jù)集,而在海軍某機(jī)載彈藥大隊(duì)中獲取到的裝備編號(hào)數(shù)據(jù)集數(shù)據(jù)量不足會(huì)使得模型存在過(guò)擬合,而文本圖像不能夠?qū)ζ溥M(jìn)行簡(jiǎn)單的數(shù)據(jù)增強(qiáng),因此本課題研究人工合成裝備編號(hào)文本數(shù)據(jù)集供訓(xùn)練使用[24-25]。
CRNN對(duì)于圖像的序列識(shí)別任務(wù)具有較好效果,特別是場(chǎng)景文字識(shí)別問(wèn)題。圖1為CRNN結(jié)構(gòu)圖,可看出共可分為3個(gè)大層:卷積層、遞歸層和翻譯層[14]。
圖1 CRNN結(jié)構(gòu)圖
CNN層提取輸入圖像的特征序列。CNN卷層之后為RNN層,用以預(yù)測(cè)CNN層輸出的特征序列的每幀。翻譯層將RNN層的單幀預(yù)測(cè)轉(zhuǎn)換為標(biāo)簽序列。雖然CRNN是由不同類型的網(wǎng)絡(luò)體系結(jié)構(gòu)組成的,但是該網(wǎng)絡(luò)可用一個(gè)損失函數(shù)聯(lián)合訓(xùn)練CNN和RNN。
CNN部分采用的是VGG的結(jié)構(gòu),并且對(duì)VGG網(wǎng)絡(luò)做了一些微調(diào),如表1所示。
從表1看出,對(duì)VGG的調(diào)整如下:為了將CNN提取的特征作為輸入,輸入到RNN網(wǎng)絡(luò),將第三和第四個(gè)maxpooling的步長(zhǎng)從2*2改為了1*2,這樣做可以使得特征圖的寬度可以被更好地保留。為了加速網(wǎng)絡(luò)的訓(xùn)練,在第五和第六個(gè)卷積層后面加上了BN層。
表1 CRNN網(wǎng)絡(luò)參數(shù)表
該網(wǎng)絡(luò)的輸入為W*32單通道灰度圖,亦即網(wǎng)絡(luò)對(duì)輸入圖片的寬度無(wú)特殊的要求,但高度必須為32。如一張包含10個(gè)字符的圖片大小為100*32,經(jīng)上述的卷積神經(jīng)網(wǎng)絡(luò)后得到的特征尺度為25*1,這樣得到一個(gè)序列,每一列特征對(duì)應(yīng)原圖的一個(gè)矩形區(qū)域(如圖2所示),這樣就很方便作為RNN的輸入進(jìn)行下一步的計(jì)算了,而且每個(gè)特征與輸入有一個(gè)一對(duì)一的對(duì)應(yīng)關(guān)系,而且1*2的pooling stride使得感受野具備較窄的寬度,有助于識(shí)別”i”,”1”等較窄的字符。
圖2 CNN序列圖
由于卷積神經(jīng)網(wǎng)絡(luò)中的CNN層以及pool層都存在局部性,所以其提取的特征序列同樣存在局部性。在圖2中,每一序列均與輸入圖像的某一區(qū)域相對(duì)照。所以CRNN的CNN層提取圖像的序列特征。
對(duì)于不同類型的視覺(jué)識(shí)別任務(wù),深度卷積特征具有魯棒性、豐富性和可訓(xùn)練性。以前的一些方法已經(jīng)使用DCNN來(lái)學(xué)習(xí)類序列對(duì)象的魯棒表示。然而,這些方法通常通過(guò)DCNN提取整個(gè)圖像的整體表示,然后收集局部深度特征來(lái)識(shí)別類序列對(duì)象的每個(gè)分量。由于DCNN要求將輸入圖像縮放到固定大小,以滿足其固定的輸入維數(shù),因此不適合于類序列對(duì)象,因?yàn)樗鼈兊拈L(zhǎng)度變化很大,另一方面,文字的局部細(xì)節(jié)容易丟失。在CRNN中,將深層特征傳遞到序列表示中,以便對(duì)類序列對(duì)象的長(zhǎng)度變化不變。
與普通圖像識(shí)別相比,文本識(shí)別的任務(wù)是識(shí)別整個(gè)文本行,因此輸入的圖像寬度一般比高度數(shù)值大得多。然而,普通卷積的感受野具有相同的寬度和高度,可能無(wú)法很好地提取文本圖像的特征[22]。因此,引入了非對(duì)稱卷積(asymmetric convolution),用于適應(yīng)文本的特征。本文中的非對(duì)稱卷積運(yùn)算如圖3所示。在卷積層中加入 和 非對(duì)稱卷積核進(jìn)行卷積運(yùn)算。該操作相當(dāng)于增加了圖像中水平文本區(qū)域的接受野,使得網(wǎng)絡(luò)增強(qiáng)了從水平文本區(qū)域提取特征的能力。
圖3 不對(duì)稱卷積運(yùn)算
在卷積層的頂部建立了一個(gè)深度雙向遞歸神經(jīng)網(wǎng)絡(luò)。遞歸層對(duì)每個(gè)幀都預(yù)測(cè)一個(gè)標(biāo)簽的概率分布。循環(huán)層有三個(gè)優(yōu)點(diǎn)。首先,RNN具有在序列中捕獲上下文信息的強(qiáng)大能力。利用上下文線索進(jìn)行基于圖像的序列識(shí)別比獨(dú)立處理每個(gè)符號(hào)更加有效。如寬字符需要多個(gè)幀進(jìn)行處理。此外,一些模棱兩可的字符在觀察其上下文時(shí)會(huì)更容易區(qū)分,例如,通過(guò)對(duì)比字符高度來(lái)識(shí)別“il”比單獨(dú)識(shí)別它們中的每一個(gè)更容易。其次,RNN可以反向傳播誤差至卷積層,使得網(wǎng)絡(luò)可以進(jìn)行端到端地訓(xùn)練。第三,RNN能夠預(yù)測(cè)隨機(jī)長(zhǎng)度的序列。
經(jīng)典RNN單元的輸入及輸出層間存在一自連接的隱藏層。在序列接收幀時(shí),該層會(huì)用一個(gè)非線性函數(shù)來(lái)更新其內(nèi)部狀態(tài),該函數(shù)同時(shí)以當(dāng)前輸入和過(guò)去狀態(tài)作為輸入:,而后其對(duì)當(dāng)前幀做出預(yù)測(cè)。所以值由過(guò)去以及現(xiàn)在的輸入決定,所以能夠?qū)⑶拔男畔⑦M(jìn)行利用。
但經(jīng)典RNN可能產(chǎn)生梯度消失的情況[20],這影響其可存儲(chǔ)的上下文區(qū)間,且加深訓(xùn)練難度。長(zhǎng)短期記憶[23](LSTM)是一種特殊的RNN,專門解決梯度消失問(wèn)題。LSTM (圖4)由一個(gè)內(nèi)存單元以及輸入門、輸出門還有忘記門組成。內(nèi)存單元對(duì)過(guò)往上下文進(jìn)行儲(chǔ)存,輸入和輸出門允許單元格存儲(chǔ)很長(zhǎng)一段時(shí)間的上下文。同時(shí),細(xì)胞中的內(nèi)存可以通過(guò)忘記門進(jìn)行更新。LSTM的特殊設(shè)計(jì)使它能夠在多次訓(xùn)練中保持穩(wěn)定,從而能夠獲得長(zhǎng)距離的上下文。
圖4 LSTM結(jié)構(gòu)
LSTM是定向的,它只使用過(guò)去的上下文。 然而,在基于圖像的序列中,來(lái)自兩個(gè)方向的上下文均有用,因此,CRNN使用兩個(gè)LSTM,分別向前以及向后,組合雙向LSTM(BiLSTM)。此外,堆疊多個(gè)BiLSTM,形成深層BiLSTM。如圖4(b)所示。
誤差通過(guò)時(shí)間反向傳播算法在圖4(b)所示的箭頭的相反方向上傳播。在RNN的底部,傳播的誤差序列被連接成圖,將特征圖轉(zhuǎn)換成特征序列,并反饋到卷積層,這一步驟是通過(guò)“Map-to-Sequence”的自定義網(wǎng)絡(luò)層實(shí)現(xiàn)的,該層是卷積層和循環(huán)層之間的橋梁。
在文本識(shí)別中,RNN可以作為解碼模塊對(duì)CNN中的特征序列進(jìn)行解碼,并輸出最終預(yù)測(cè)結(jié)果。如果使用固定長(zhǎng)度的向量對(duì)句子進(jìn)行編碼,會(huì)導(dǎo)致嚴(yán)重的過(guò)擬合問(wèn)題,特別是對(duì)于長(zhǎng)輸入序列。這是因?yàn)檩斎胄蛄斜痪幋a為一個(gè)固定長(zhǎng)度的向量表示,不管它有多長(zhǎng),但是由于輸入的固定長(zhǎng)度向量,解碼器在解碼過(guò)程中將受到限制[22]。然后,針對(duì)這一問(wèn)題提出了注意機(jī)制。研究將注意力機(jī)制添加到雙向LSTM中。因此,注意機(jī)制使得雙向LSTM能夠接收到與當(dāng)前輸出相關(guān)的特征序列,并對(duì)那些重要的特征序列給予更多的關(guān)注,以獲得更好的識(shí)別結(jié)果。本文采用加權(quán)注意力機(jī)制,根據(jù)相關(guān)性對(duì)特征序列進(jìn)行加權(quán)平均,得到一個(gè)上下文向量作為雙向LSTM的輸入。其結(jié)構(gòu)如圖5所示。其中ci表示為上下文向量,xj表示特征序列,aij表示在時(shí)間i時(shí)向量xj的相應(yīng)權(quán)重,Tx表示特征序列的數(shù)目,aij表示xj被選中的概率,因?yàn)閍ij的和為1。所以有:
圖5 加入注意力機(jī)制的BiLSTM
(1)
其中:aij根據(jù)RNN的隱藏狀態(tài)si-1和特征序列xj計(jì)算。公式如下:
aij=f(si-1,xj)
(2)
其中:f是計(jì)算特征序列相關(guān)性的函數(shù),f需要用神經(jīng)網(wǎng)絡(luò)建模,因此我們采用三層神經(jīng)網(wǎng)絡(luò)來(lái)建模,其中tanh函數(shù)作為激活函數(shù)。計(jì)算過(guò)程是:
hij=tanh(w11×xj+w12×si-1+b)
(3)
eij=hij×w21
(4)
其中:hij表示特征序列xj和si-1的第一層輸出向量,w11和w12分別表示第一層的權(quán)重,b和w21分別表示偏差項(xiàng),第二層的權(quán)重和eij表示神經(jīng)網(wǎng)絡(luò)的第二層得分。然后在eij上施加softmax層以獲得aij,如公式:
(5)
然后將每個(gè)注意模塊輸出的上下文向量輸入到雙向LSTM中,得到性能幀預(yù)測(cè),并將預(yù)測(cè)結(jié)果反饋給CTC層。改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖6所示。
圖6 改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)
翻譯層是將RNN所做的每幀預(yù)測(cè)轉(zhuǎn)換成標(biāo)簽序列的過(guò)程。從數(shù)學(xué)上講,翻譯層是根據(jù)每幀預(yù)測(cè)找到概率最高的標(biāo)簽序列,其共有兩種不同模式:無(wú)字典及基于詞庫(kù)[23]。無(wú)字典的情況下,預(yù)測(cè)是在沒(méi)有任何詞庫(kù)的情況下進(jìn)行的。在基于詞庫(kù)的模式下,通過(guò)選擇后驗(yàn)概率最高的標(biāo)簽序列進(jìn)行預(yù)測(cè)。CRNN標(biāo)簽序列概率采用Graves等人提出的連接時(shí)續(xù)分類(CTC)進(jìn)行計(jì)算[24]。
1.3.1 序列合并機(jī)制
RNN對(duì)時(shí)序進(jìn)行預(yù)測(cè)時(shí),不可避免地會(huì)產(chǎn)生多余信息,可能單一字符被接連預(yù)測(cè)多次,這需一種去冗余機(jī)制。
圖7 RNN預(yù)測(cè)示意圖
如識(shí)別圖6文本,RNN中有5個(gè)時(shí)間步,在正常情況下t0,t1,t2映射為“a”,t3,t4映射為“b”,然后將這些字符序列連接起來(lái)得到“aaabb”,而后將連續(xù)重復(fù)的字符合并成一個(gè),得最終結(jié)果“ab”。但如是look,hello等存在連續(xù)相同字母的詞,則得到 lok 和 helo,產(chǎn)生錯(cuò)誤,因此 CTC 提出blank機(jī)制解決該問(wèn)題。
以“-”符號(hào)代表blank,RNN 輸出序列時(shí),在文本標(biāo)簽中的重復(fù)的字符之間插入一個(gè)“-”,比如輸出序列為“l(fā)looo-ookk”,則映射輸出“l(fā)ook”,也就是如果有blank字符隔開(kāi),連續(xù)相同字符不合并。即對(duì)序列先去掉連續(xù)相同字符,接著去掉“-”字符,這個(gè)稱為解碼過(guò)程,而編碼則是由神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)。引入blank機(jī)制,可以很好地解決重復(fù)字符的問(wèn)題。相同的文本標(biāo)簽一定幾率具有不同的字符組合如,“11-2”、“1122”及“-122”均表示“12”。也就是說(shuō)一個(gè)文本標(biāo)簽存在一條或多條的路徑。
1.3.2 訓(xùn)練階段
在訓(xùn)練階段,根據(jù)這些概率分布向量和相應(yīng)的文本標(biāo)簽得到損失函數(shù),從而訓(xùn)練神經(jīng)網(wǎng)路模型。
圖8表示時(shí)序?yàn)?的字符識(shí)別,有兩個(gè)時(shí)間步長(zhǎng)和三個(gè)可能的字符為“a”,“b”和“-”,可得兩個(gè)概率分布向量,如采取最大概率路徑解碼的方法,則“--”的概率最大,即真實(shí)字符為空的概率為0.6*0.6=0.36。但是為字符“a”的情況有多種對(duì)齊組合,“aa”, “a-“和“-a”都是代表“a”,所以,輸出“a”的概率應(yīng)該為三種之和:0.4 * 0.4 + 0.4 * 0.6 + 0.6 * 0.4 = 0.16 + 0.24 + 0.24 = 0.64,因此“a”的概率比空“”的概率高。如果標(biāo)簽文本為“a”,則通過(guò)計(jì)算圖像中為“a”的所有可能的對(duì)齊組合(或者路徑)的分?jǐn)?shù)之和來(lái)計(jì)算損失函數(shù)。所以最后映射為標(biāo)簽文本的總概率為:
圖8 文本標(biāo)簽概率分布圖
(6)
其中:B-1(l)代表從序列到序列的映射函數(shù)B變換后是文本l的所有路徑集合,而π則是其中的一條路徑。每條路徑的概率為各個(gè)時(shí)間步中對(duì)應(yīng)字符的分?jǐn)?shù)的乘積。類似普通的分類,CTC的損失函數(shù)O定義為負(fù)的最大似然,為方便計(jì)算,對(duì)似然函數(shù)取對(duì)數(shù)。
(7)
通過(guò)對(duì)損失函數(shù)的計(jì)算,就可以對(duì)之前的神經(jīng)網(wǎng)絡(luò)進(jìn)行反向傳播,神經(jīng)網(wǎng)絡(luò)的參數(shù)根據(jù)所使用的優(yōu)化器進(jìn)行更新,從而找到最可能的像素區(qū)域?qū)?yīng)的字符。這種通過(guò)映射變換和所有可能路徑概率之和的方式使得 CTC 不需要對(duì)原始的輸入字符序列進(jìn)行準(zhǔn)確的切分。定義為負(fù)的最大似然,為方便計(jì)算,對(duì)似然函數(shù)取對(duì)數(shù)。
1.3.3 測(cè)試階段
在測(cè)試階段,過(guò)程與訓(xùn)練階段有所不同,用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別新的文本圖像。事先不知道任何文本,如過(guò)與之前一樣計(jì)算每一可能文本的所有路徑,這樣長(zhǎng)時(shí)間步和長(zhǎng)字符序列將產(chǎn)生龐大的計(jì)算量。RNN在每一個(gè)時(shí)間步的輸出為所有字符類別的概率分布,即一個(gè)包含每個(gè)字符分?jǐn)?shù)的向量,取概率最大字符當(dāng)做該時(shí)間步的輸出字符,接著所有時(shí)間步的輸出組合得一序列路徑,即最大概率路徑,再根據(jù)合并序列方法獲得文本的預(yù)測(cè)。在輸出階段經(jīng)過(guò) CTC 的翻譯,即將網(wǎng)絡(luò)學(xué)習(xí)到的序列特征信息轉(zhuǎn)化為最終的識(shí)別文本,就可以對(duì)整個(gè)文本圖像進(jìn)行識(shí)別。
如圖9所示,有5個(gè)時(shí)間步,字符類別為“a”、“b”和“-”(blank),對(duì)于每個(gè)時(shí)間步的概率分布,取分?jǐn)?shù)最大的字符,得序列路徑“aaa-b”,先移除相鄰重復(fù)的字符得到“a-b”,然后去除blank字符得到最終結(jié)果:“ab”。
圖9 文本預(yù)測(cè)圖
由于軍隊(duì)航空導(dǎo)彈裝備的特殊性,當(dāng)前未有用于導(dǎo)彈編號(hào)識(shí)別的數(shù)據(jù)集,而如果僅僅使用通用的文本識(shí)別數(shù)據(jù)集,得到的預(yù)測(cè)結(jié)果準(zhǔn)確率將不夠高。因此,本課題結(jié)合航空導(dǎo)彈編號(hào)的文本特征,人工合成可應(yīng)用于導(dǎo)彈編號(hào)識(shí)別的文本圖像,追求較高的識(shí)別準(zhǔn)確率。圖10為人工合成文本數(shù)據(jù)集的流程。
圖10 識(shí)別數(shù)據(jù)集合成流程
為了盡可能真實(shí)地獲得航空導(dǎo)彈編號(hào)的圖像場(chǎng)景,實(shí)地在海航某部機(jī)載彈藥大隊(duì)所拍攝數(shù)據(jù)集。對(duì)于所收集整理到的導(dǎo)彈編號(hào)數(shù)據(jù)集,覆蓋海航某部機(jī)載彈藥大隊(duì)各項(xiàng)型號(hào)裝備的不同背景。值得注意的是,CRNN模型對(duì)于輸入數(shù)據(jù)的高度要求是固定的,所以在截取背景時(shí)應(yīng)注意背景圖像的大小,否則會(huì)影響到訓(xùn)練。而如果通過(guò)縮放等圖像處理方法來(lái)將圖像進(jìn)行或大或小的縮放,可使得背景的像素與真實(shí)值產(chǎn)生偏差,從而影響最終的精度。因此在截取航空導(dǎo)彈編號(hào)背景圖像時(shí),確保其能夠滿足CRNN輸入圖像的尺寸要求。同時(shí),在實(shí)際的航空導(dǎo)彈業(yè)務(wù)工作中,計(jì)算機(jī)識(shí)別編號(hào)的時(shí)候并非嚴(yán)格正對(duì)編號(hào),或多或少存在一定角度傾斜,因此在截取背景圖像時(shí)也按照一定角度進(jìn)行傾斜。圖11為背景圖示例。
圖11 導(dǎo)彈編號(hào)背景圖
文本的字體對(duì)于在識(shí)別任務(wù)中占據(jù)較高地位。不同字體間的風(fēng)格存在著差異,航空導(dǎo)彈編號(hào)識(shí)別模型為了適應(yīng)不同的裝備,也需不同的字體特征,針對(duì)已經(jīng)采集到的航空導(dǎo)彈編號(hào),對(duì)其進(jìn)行分析,得出大體所需字體為:微軟雅黑、新羅馬以及Vanta,如圖12所示。
圖12 字體示意圖
文本圖像上的文本尺寸特征對(duì)模型非常重要。盡管相同型號(hào)航空導(dǎo)彈的編號(hào)尺寸相同,但不同型號(hào)上的編號(hào)大小存在差異,所以在合成圖像時(shí),針對(duì)性的采用不同尺寸的字符以豐富特征。且2.2中背景截取使用相同大小的背景,所以不同文本大小能夠匹配相應(yīng)文本長(zhǎng)度,可更加合理粘貼于背景圖像上。
在合成識(shí)別數(shù)據(jù)集時(shí),利用字典檢索的方式對(duì)生成的背景圖像貼上文本內(nèi)容。字典中包含英文字母以及阿拉伯?dāng)?shù)字。每一個(gè)字符在字典中單獨(dú)一行,程序可更容易檢索到該字符。隨機(jī)生成一段4~10個(gè)字符的文本后,檢索該文本所有字符在字典中的位置,而后利用該索引位置可獲得字符類別,進(jìn)而可以產(chǎn)生該文本段的標(biāo)簽。
準(zhǔn)備工作過(guò)后,隨機(jī)組合航空導(dǎo)彈編號(hào)、背景圖以及不同的字體,將航空導(dǎo)彈編號(hào)文本粘貼到背景圖像上。這一步驟主要使用了Pillow,在進(jìn)行合成的時(shí)候需設(shè)置將航空導(dǎo)彈編號(hào)靠近于背景左上角。合成后的航空導(dǎo)彈文本編號(hào)圖像如圖13所示。
圖13 合成圖像示例
由于在航空導(dǎo)彈業(yè)務(wù)當(dāng)中,工作場(chǎng)所變換較多,伴隨因素影響較大,一些噪聲對(duì)識(shí)別產(chǎn)生干擾的情況無(wú)可避免。所以在訓(xùn)練CRNN模型過(guò)程中需對(duì)這種情況進(jìn)行學(xué)習(xí),以提高模型對(duì)不同環(huán)境的適應(yīng)能力。所以對(duì)合成的數(shù)據(jù)集應(yīng)用高斯模糊、灰度拉伸以及透視變換的方式對(duì)航空導(dǎo)彈編號(hào)文本圖像進(jìn)行增強(qiáng)[25]。
高斯模糊取圖像中每個(gè)像素周圍像素的平均值,使用正態(tài)分布對(duì)周圍像素值權(quán)重進(jìn)行分配。而目標(biāo)點(diǎn)像素即為正態(tài)分布中心,因此靠近該點(diǎn)則權(quán)重較大,遠(yuǎn)離則小,式(8)為其計(jì)算公式:
(8)
由于不確定的環(huán)境因素可能會(huì)影響后續(xù)識(shí)別過(guò)程中文本特征的提取。航空導(dǎo)彈編號(hào)文本圖像灰度拉伸將圖片的灰度值在更大區(qū)間內(nèi)進(jìn)行擴(kuò)展以增強(qiáng)圖片對(duì)比度。提取圖的最大以及最小灰度值Imax和Imin,MAX和MIN表示目標(biāo)灰度最大以及最小值,式(9)表示映射過(guò)程:
(9)
透視變換將圖像映射到一個(gè)新平面,首先將圖像從二維平面映射到三維空間,接著映射到另一二維平面,如式(10)所示:
(10)
對(duì)航空導(dǎo)彈編號(hào)文本識(shí)別模型進(jìn)行實(shí)驗(yàn)。對(duì)比在航空導(dǎo)彈編號(hào)識(shí)別數(shù)據(jù)集中CRNN算法與其它文本識(shí)別算法訓(xùn)練得到深度學(xué)習(xí)模型的識(shí)別效果。
識(shí)別實(shí)驗(yàn)在Ubuntu16.04系統(tǒng)下進(jìn)行,CPU:酷睿i5-8400 2.80 GHz,顯卡為GTX1080Ti,顯存為11 GB,計(jì)算機(jī)內(nèi)存為16 G;python 3.6,使用pycharm作為實(shí)驗(yàn)平臺(tái),同時(shí)配套tensorflow,tensorboard支持實(shí)驗(yàn)進(jìn)行。使用Momentum優(yōu)化器進(jìn)行優(yōu)化,初始學(xué)習(xí)率為0.01,按訓(xùn)練次數(shù)衰減,圖15為學(xué)習(xí)衰減曲線圖,訓(xùn)練次數(shù)為8萬(wàn)。
圖15 學(xué)習(xí)率衰減曲線
3.1.1 數(shù)據(jù)集
本實(shí)驗(yàn)的訓(xùn)練數(shù)據(jù)集為前文所合成識(shí)別數(shù)據(jù)集與人工新增入阿拉伯?dāng)?shù)字圖像的公開(kāi)數(shù)據(jù)集Synth90K。本文合成數(shù)據(jù)集一共3萬(wàn)張,包括實(shí)地拍攝、合成以及圖像增強(qiáng),標(biāo)注數(shù)據(jù)集只需在實(shí)地拍攝數(shù)據(jù)集中按照Synth90K數(shù)據(jù)集進(jìn)行標(biāo)注,合成以及圖像增強(qiáng)均可以代碼形式進(jìn)行標(biāo)注。
3.1.2 評(píng)價(jià)指標(biāo)
實(shí)驗(yàn)中以測(cè)試數(shù)據(jù)的字符識(shí)別準(zhǔn)確率以及平均編輯距離作為評(píng)估標(biāo)準(zhǔn)。字符識(shí)別準(zhǔn)確率指正確識(shí)別的字符數(shù)量占總數(shù)量的比重,而后對(duì)每張圖像求得該比重去平均,即為總的字符識(shí)別準(zhǔn)確率。平均編輯距離是一種度量?jī)蓚€(gè)序列(字符串)差異大小的方法。平均編輯距離越小說(shuō)明識(shí)別率越高,可以同時(shí)反應(yīng)識(shí)別錯(cuò),漏識(shí)別和多識(shí)別的情況。
假設(shè)現(xiàn)在兩個(gè)字符串A和B,其中A的長(zhǎng)度為a,B的長(zhǎng)度為b,現(xiàn)要計(jì)算A與B之間的Levenshtein distance可用動(dòng)態(tài)規(guī)劃的思想解決這個(gè)問(wèn)題:假設(shè)Ai和Bi分別為字符串A、B的前i,j個(gè)字符組成的子串,現(xiàn)將Ai:A[1] A[2] … A[i-1] A[i]修改為Bj:B[1] B[2] … B[j-1] B[j]需要的最少編輯次數(shù),即兩個(gè)子串的編輯距離,下面分別討論三種操作的操作次數(shù):
1)插入操作:假設(shè)將A[1…i]修改為B[1…j-1]需要操作數(shù)為k1,那么在A[i]后插入一個(gè)字符B[j],這樣就可以將A[1…i]修改為B[1…j],這時(shí)所需要的操作數(shù)為k1+1。
2)刪除操作:假設(shè)將A[1…i-1]修改為B[1…j]需要操作數(shù)k2,那么刪除A[i]就可以將A[1…i]修改為B[1…j],此時(shí)所需要的操作數(shù)為k2+1。
3)修改操作:假設(shè)將A[1…i-1]修改為B[1…j-1]需要操作數(shù)為k3,這時(shí)要將A[1…i]修改為B[1…j]則分為兩種情況:一是當(dāng)A[i]≠B[j]時(shí),則將A[i]替換成B[j]即可完成修改,此時(shí)操作數(shù)為k3+1;另一種情況是當(dāng)A[i]==B[j]時(shí),則將不需要進(jìn)行修改操作,操作數(shù)仍然為k3。最后可得狀態(tài)轉(zhuǎn)移方程:
(11)
其中:1ai≠bj表示ai≠bj表達(dá)式取0,否則取1。
首先模型AA-CRNN上進(jìn)行了實(shí)驗(yàn),然后與其他經(jīng)典的文本識(shí)別算法CRNN,CNN+CRF以及ESIR[25]為對(duì)比對(duì)象,三者均為當(dāng)前較為先進(jìn)的文本識(shí)別算法。對(duì)訓(xùn)練得到的各個(gè)模型逐一測(cè)試,使用前文所提的兩個(gè)評(píng)價(jià)指標(biāo)進(jìn)行評(píng)估,結(jié)果如表2所示。
表2 不同模型效果對(duì)比
由表2可以明顯看出AA-CRNN的字符準(zhǔn)確率以及平均編輯距離均優(yōu)于另外的算法,因此說(shuō)明本課題改進(jìn)的AA-CRNN算法作為航空導(dǎo)彈編號(hào)識(shí)別的算法是較優(yōu)的。圖16以及圖17表示訓(xùn)練過(guò)程中AA-CRNN的train loss曲線以及val loss。
圖16 AA-CRNN train LOSS曲線
圖17 AA-CRNN val LOSS曲線
由表2以及圖16、17可以看出AA-CRNN模型具備較好的性能,接下來(lái)使用圖像對(duì)其進(jìn)行測(cè)試,如圖18所示,該模型均準(zhǔn)確地將導(dǎo)彈編號(hào)識(shí)別出來(lái)。
圖18 模型測(cè)試
因此,本課題改進(jìn)的CRNN模型在合成的航空導(dǎo)彈編號(hào)數(shù)據(jù)集上訓(xùn)練能夠得到性能較好的模型,在實(shí)際圖片測(cè)試中均可將導(dǎo)彈編號(hào)準(zhǔn)確的識(shí)別出來(lái),說(shuō)明本課題對(duì)航空導(dǎo)彈編號(hào)識(shí)別的研究是可行的。
文章首先分析了文本識(shí)別模型在航空導(dǎo)彈業(yè)務(wù)應(yīng)用中的地位,介紹了AA-CRNN模型。由于缺乏航空導(dǎo)彈編號(hào)數(shù)據(jù)集,因此對(duì)照實(shí)際編號(hào)進(jìn)行人工合成數(shù)據(jù)集。通過(guò)訓(xùn)練對(duì)比,發(fā)現(xiàn)AA-CRNN的模型性能能夠由于當(dāng)前較為優(yōu)秀的深度學(xué)習(xí)模型,且實(shí)際測(cè)試均正確識(shí)別出航空導(dǎo)彈編號(hào),因此AA-CRNN模型應(yīng)用于航空導(dǎo)彈編號(hào)識(shí)別應(yīng)用中可行且優(yōu)秀。
但是同樣存在巨大的繼續(xù)研究的空間,因?yàn)楣ぷ魅藛T需手持?jǐn)z像頭對(duì)準(zhǔn)導(dǎo)彈編號(hào)進(jìn)行操作。在未來(lái)的時(shí)間里,筆者將研究檢測(cè)與識(shí)別結(jié)合,且是端到端的訓(xùn)練,而非文本檢測(cè)與識(shí)別分開(kāi),如此使得模型運(yùn)行速度更快,且進(jìn)一步減輕彈庫(kù)工作人員的工作量。