叢林虎 何偉鑫
(海軍航空大學(xué)岸防兵學(xué)院 煙臺(tái) 264001)
隨著智能化時(shí)代的發(fā)展,大多數(shù)行業(yè)均向著人工智能化方面發(fā)展。部隊(duì)也在積極尋求著人工智能方面的應(yīng)用。海航彈藥技術(shù)保障大隊(duì)任務(wù)繁忙,彈庫裝備出入庫次數(shù)較多,但當(dāng)前的出入庫數(shù)據(jù)登記仍然使用手工登記的方式,這不僅浪費(fèi)了時(shí)間與人力,同時(shí)與我軍的發(fā)展目標(biāo)大相徑庭。而每一火工品上都有其獨(dú)一無二的編號(hào),可以唯一標(biāo)識(shí)該裝備,深度學(xué)習(xí)算法的革新使得識(shí)別該編號(hào),實(shí)現(xiàn)自動(dòng)登記成為了可能[1~4]。
文字識(shí)別指從圖片中定位并識(shí)別到文字,由于存在光照的變化以及圖像的復(fù)雜背景以及文字存在的多角度、多維、多長度,因此文字識(shí)別是難度系數(shù)較大的任務(wù)[5~8]。
傳統(tǒng)文本識(shí)別方法準(zhǔn)確率較低,如模板匹配法在身份證號(hào)碼識(shí)別等應(yīng)用中結(jié)果較差,該算法只有在字體統(tǒng)一清晰的阿拉伯?dāng)?shù)字的識(shí)別應(yīng)用中有所建樹,較復(fù)雜的場(chǎng)景中就無法滿足需求。而OCR的通用方法:設(shè)計(jì)特征,提取特征而后進(jìn)行分類,得出最終的識(shí)別結(jié)果,但效果也很難達(dá)到應(yīng)用需求。針對(duì)傳統(tǒng)OCR的不足,使得基于深度學(xué)習(xí)的OCR大放異彩[9~12]。
基于深度學(xué)習(xí)的文字識(shí)別算法使文字識(shí)別技術(shù)落地成為了可能,其準(zhǔn)確率有了較大突破,且無需花大量精力用以設(shè)計(jì)字符特征。在OCR系統(tǒng)中,神經(jīng)網(wǎng)絡(luò)對(duì)特征進(jìn)行提取和分類,字符圖像輸入到網(wǎng)絡(luò),得到識(shí)別結(jié)果。在各項(xiàng)基于深度學(xué)習(xí)的文本識(shí)別算法中,CRNN以期優(yōu)越的性能一度成為各項(xiàng)應(yīng)用的首選,文獻(xiàn)[13]展示了其在多個(gè)數(shù)據(jù)集中的識(shí)別準(zhǔn)確率均優(yōu)于其他算法,同時(shí)CRNN能夠識(shí)別多方向的文本,對(duì)多種場(chǎng)景下也擁有較高的識(shí)別率。因此,彈目編號(hào)識(shí)別系統(tǒng)將使用CRNN作為識(shí)別算法。
CRNN是一種卷積循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),用于解決基于圖像的序列識(shí)別問題,特別是場(chǎng)景文字識(shí)別問題。CRNN的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,其由三個(gè)部分組成,從上到下分別為卷積層、遞歸層和轉(zhuǎn)錄層。
圖1 CRNN結(jié)構(gòu)圖
在卷積循環(huán)神經(jīng)網(wǎng)絡(luò)的起始,圖像輸入到CNN層中而后得到特征序列[14]。RNN層預(yù)測(cè)特征序列的每一幀。卷積循環(huán)神經(jīng)網(wǎng)絡(luò)的翻譯層將RNN輸出的預(yù)測(cè)轉(zhuǎn)換為標(biāo)簽序列。雖然卷積循環(huán)神經(jīng)網(wǎng)絡(luò)由不一樣的網(wǎng)絡(luò)構(gòu)成,但可用一個(gè)損失函數(shù)聯(lián)合訓(xùn)練CNN和RNN。
2.1.1 CNN結(jié)構(gòu)
CNN采用的是VGG的結(jié)構(gòu),并且對(duì)VGG網(wǎng)絡(luò)做了一些微調(diào),如圖所2示。
圖2 CNN網(wǎng)絡(luò)結(jié)構(gòu)圖
從圖2可以看出,對(duì)VGG的調(diào)整如下:為了能將CNN提取的特征作為輸入,輸入到RNN網(wǎng)絡(luò)中,將第三和第四個(gè)maxpooling的步長從2×2改為了1×2,如此可使特征圖的寬度被更好的保留。同時(shí)在第五和第六個(gè)卷積層后面加上了BN層[15]以提升訓(xùn)練速度。
該網(wǎng)絡(luò)的輸入為W×32單通道灰度圖,即輸入圖片的寬度無需固定,但其高度需調(diào)整為32。如包含10個(gè)字符的圖片大小為100×32,經(jīng)該網(wǎng)絡(luò)后將獲得的特征尺度大小為25×1,獲得一個(gè)特征序列,每一列特征與原圖的一個(gè)矩形區(qū)域(如下圖所示)互相對(duì)應(yīng),這樣就很方便作為RNN的輸入進(jìn)行下一步的計(jì)算了,而且每個(gè)特征與輸入有一個(gè)一對(duì)一的對(duì)應(yīng)關(guān)系,而且改變后的池化層的步長能夠產(chǎn)生長寬比較大的感受野[16],使得網(wǎng)絡(luò)對(duì)寬度窄的文本識(shí)別更加容易如“1”。
圖3 CNN輸出圖
2.1.2 RNN結(jié)構(gòu)
在卷積層的頂部建立了一個(gè)深度雙向LSTM網(wǎng)絡(luò)。循環(huán)層對(duì)每個(gè)幀xt都預(yù)測(cè)一個(gè)標(biāo)簽的概率分布yt[16~17]。RNN單元在其輸入層和輸出層之間有一個(gè)自連接的隱藏層。每次接收序列中的幀xt時(shí),其均用一個(gè)非線性函數(shù)來更新其內(nèi)部狀態(tài)ht,該函數(shù)同時(shí)以當(dāng)前輸入xt和過去狀態(tài)ht-1作為輸入:ht=g(xt,ht-1),接著ht對(duì)當(dāng)前幀yt做出預(yù)測(cè)。所以yt值由之前的輸入以及當(dāng)前的共同決定,所以當(dāng)前幀同時(shí)利用前文信息。
LSTM(圖4)由內(nèi)存單元和輸入門、輸出門以及忘記門組成。內(nèi)存單元存儲(chǔ)歷史上下文信息,輸入和輸出門使單元格存儲(chǔ)較長一段時(shí)間的上下文。同時(shí),細(xì)胞中的內(nèi)存ct可以通過忘記門進(jìn)行更新。LSTM的特殊設(shè)計(jì)使它能夠在多次訓(xùn)練中保持穩(wěn)定,從而能獲得長距離的上下文[18~21]。
圖4 LSTM結(jié)構(gòu)圖
2.1.3 翻譯層
翻譯層是將RNN所做的每幀預(yù)測(cè)轉(zhuǎn)換成標(biāo)簽序列的過程。從數(shù)學(xué)上講,翻譯層是根據(jù)每幀預(yù)測(cè)找到概率最高的標(biāo)簽序列,其共有兩種翻譯模式,即無字典和基于詞庫的翻譯[22]。在無字典模式下,預(yù)測(cè)是在沒有任何詞庫的情況下進(jìn)行的。在基于字典的模式下,通過選擇后驗(yàn)概率最高的標(biāo)簽序列進(jìn)行預(yù)測(cè)。CRNN標(biāo)簽序列概率采用Graves等提出的連接時(shí)續(xù)分類(CTC)進(jìn)行計(jì)算[23]。
Django是基于python的web開源框架。過往進(jìn)行web開發(fā)的時(shí)候可能進(jìn)程緩慢、效率低下以及數(shù)據(jù)庫切換不便捷,為克服此類問題,Django進(jìn)行了很好的設(shè)計(jì)[24]。
Django框架利用MVC設(shè)計(jì)模式,即模型,模板以及視圖,如圖5所示。
圖5 Django框架
1)模型主要處理數(shù)據(jù)相關(guān)事務(wù),其與數(shù)據(jù)存取層對(duì)應(yīng);
2)模板主要處理相關(guān)決定,其與業(yè)務(wù)邏輯層對(duì)應(yīng);
3)視圖主要用于調(diào)用、存儲(chǔ)模型與相應(yīng)邏輯,其與表面層對(duì)應(yīng)。
數(shù)據(jù)模型層以及前端視圖層、業(yè)務(wù)邏輯層在本框架具備高內(nèi)聚低耦合的特點(diǎn),方便開發(fā)者更快速使用。同時(shí),本框架采取ORM對(duì)象關(guān)系映射,可以更加方便地對(duì)數(shù)據(jù)模型進(jìn)行設(shè)計(jì)以及交互,能夠提供表單模型以及傳統(tǒng)SQL語句的運(yùn)行,豐富了數(shù)據(jù)庫的選擇性。本系統(tǒng)使用SQL server數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的存取和管理。系統(tǒng)采用Django框架進(jìn)行搭建。
文章所用數(shù)據(jù)集為實(shí)地在海航某部彈藥技術(shù)保障大隊(duì)所拍攝數(shù)據(jù)集。研究發(fā)現(xiàn),同一型號(hào)裝備的編號(hào)字體大小等均相同,而不同型號(hào)裝備之間的字體型號(hào)之間均存在著差別。于是每種型號(hào)之間均拍攝編號(hào)圖像若干,且文本圖像非嚴(yán)格的水平狀態(tài),或多或少存在一定角度的傾斜,這是由于實(shí)際使用時(shí),工作人員在進(jìn)行文字識(shí)別的時(shí)候不可能隨時(shí)嚴(yán)格正對(duì)導(dǎo)彈編號(hào)。
對(duì)于所拍攝的數(shù)據(jù)集,訓(xùn)練深度卷積神經(jīng)網(wǎng)絡(luò)顯然是數(shù)據(jù)集遠(yuǎn)遠(yuǎn)不夠,且該數(shù)據(jù)集無法像普通圖像分類人物一樣進(jìn)行數(shù)據(jù)增強(qiáng)。因?yàn)槲谋咀R(shí)別任務(wù)中文本無法進(jìn)行旋轉(zhuǎn)、鏡像等方式的處理。因此,如果僅用提取的數(shù)據(jù)集進(jìn)行訓(xùn)練,容易造成過擬合,對(duì)驗(yàn)證機(jī)的識(shí)別結(jié)果也會(huì)較差。因此需要合成新的文本數(shù)據(jù)集。
圖6 原始數(shù)據(jù)集樣式
具體步驟如下:
1)確定不同裝備的外觀背景所需圖片數(shù)量,這里我們選取六種背景圖,每種背景圖生成圖片20000張;
2)生成目標(biāo)文本的同時(shí),每個(gè)目標(biāo)文本的字體均隨機(jī)選擇,并在一定的范圍內(nèi)隨機(jī)設(shè)置文本的彎曲程度;
3)隨機(jī)從文本數(shù)據(jù)中獲取內(nèi)容,長度4~10隨機(jī),作為要填充的文本內(nèi)容,這里文本數(shù)據(jù)為阿拉伯?dāng)?shù)字0~9,小寫字母a~z,大寫字母A~Z以及特殊字符“—”。
4)將文本背景融合,并且將區(qū)域進(jìn)行一定角度的旋轉(zhuǎn);
5)對(duì)文本目標(biāo)區(qū)域添加噪聲和顏色信息等。
文本合成的步驟就是以上五步,通過合成產(chǎn)生120000張圖片保證后續(xù)文本識(shí)別模型的訓(xùn)練。生成的圖片數(shù)據(jù)集如圖7所示。
圖7 人工合成數(shù)據(jù)集樣式
本文實(shí)驗(yàn)在Ubuntu16.04系統(tǒng)下進(jìn)行,CPU:酷睿 i5-8400 2.80GHz,顯卡為 GTX1060,顯存為6GB,計(jì)算機(jī)內(nèi)存為16G;python 3.6,配套OpenCV、numpy等庫支持使用,使用的深度學(xué)習(xí)框架為ten?sorflow。使用Adam優(yōu)化器進(jìn)行優(yōu)化,初始學(xué)習(xí)率為0.0001。圖片大小設(shè)定為W*32,迭代次數(shù)到510次后,準(zhǔn)確率達(dá)到了要求,LOSS也降到小數(shù)點(diǎn)后兩位。
圖8 CRNN訓(xùn)練圖
從圖可以看出LOSS以及Accrucy已經(jīng)達(dá)到要求,所以模型達(dá)到一個(gè)較好的性能,且使用測(cè)試圖片可以看出模型對(duì)陌生圖片的測(cè)試也全部準(zhǔn)確。因此,使用訓(xùn)練好的模型,設(shè)計(jì)實(shí)現(xiàn)導(dǎo)彈編號(hào)識(shí)別系統(tǒng)可以替代人工對(duì)出入庫導(dǎo)彈的登記。
B/S模式是一種網(wǎng)絡(luò)結(jié)構(gòu)模式,該模式使得客戶端得到了統(tǒng)一,將所要實(shí)現(xiàn)的功能核心集中到服務(wù)器上,如此便可減少了系統(tǒng)開發(fā)以及維護(hù)的開銷;用戶電腦只需安裝一個(gè)browser,server上安裝SQL server等相應(yīng)數(shù)據(jù)庫;browser通過Web Server與數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互[25]。
根據(jù)第三節(jié)訓(xùn)練以及測(cè)試好的CRNN模型,設(shè)計(jì)實(shí)現(xiàn)基于CRNN的導(dǎo)彈編號(hào)識(shí)別系統(tǒng),調(diào)用OpenCV庫進(jìn)行文本區(qū)域的切割。
圖9為導(dǎo)彈出入庫管理系統(tǒng)的工作主界面,通過調(diào)用攝像頭,獲取圖像導(dǎo)彈編號(hào)的圖像,而后OpenCV將具有編號(hào)的部分具體提取出來。訓(xùn)練好的CRNN模型根據(jù)OpenCV提取出來的文字部分進(jìn)行識(shí)別,得到最終的導(dǎo)彈編號(hào),工作人員可據(jù)此進(jìn)行操作。目前,本系統(tǒng)已在海航某部彈庫進(jìn)行實(shí)地調(diào)試,可以滿足彈庫的工作需求。
圖9 系統(tǒng)界面圖
海航某部彈庫日常工作繁忙然而用人工登統(tǒng)計(jì)的方式進(jìn)行工作導(dǎo)致人力以及時(shí)間的浪費(fèi),為克服此不足,設(shè)計(jì)實(shí)現(xiàn)了基于深度學(xué)習(xí)的導(dǎo)彈編號(hào)識(shí)別系統(tǒng),實(shí)現(xiàn)導(dǎo)彈出入庫的自動(dòng)化登統(tǒng)計(jì)。根據(jù)實(shí)地所拍攝的數(shù)據(jù)集,對(duì)照進(jìn)行文本識(shí)別數(shù)據(jù)集的合成,而后利用合成的數(shù)據(jù)集進(jìn)行CRNN模型的訓(xùn)練。經(jīng)過測(cè)試,模型滿足識(shí)別要求。
利用訓(xùn)練測(cè)試好的CRNN模型,在Django框架上設(shè)計(jì)實(shí)現(xiàn)導(dǎo)彈編號(hào)識(shí)別系統(tǒng),經(jīng)過在海航某部彈庫的測(cè)試,設(shè)計(jì)的導(dǎo)彈編號(hào)識(shí)別系統(tǒng)能夠滿足要求,代替人力進(jìn)行導(dǎo)彈出入庫的自動(dòng)登記。