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