姜華 孫勇
摘? 要: 隨著機(jī)器視覺技術(shù)發(fā)展,對(duì)識(shí)別速度、準(zhǔn)確率和項(xiàng)目開發(fā)周期等方面都提出了更高的要求。人工智能無疑是較好的解決方式,而以往從底層編程搭建深度學(xué)習(xí)框架在技術(shù)和項(xiàng)目進(jìn)度上都很難滿足要求。為了滿足圖像識(shí)別要求,選擇專用的圖像處理服務(wù)器進(jìn)行訓(xùn)練與識(shí)別,并對(duì)其主要部件進(jìn)行選型。對(duì)SSD模型結(jié)構(gòu)進(jìn)行了分析,根據(jù)各層次結(jié)構(gòu)計(jì)算了一次訓(xùn)練與前向運(yùn)算過程中所需計(jì)算的參數(shù)及內(nèi)存要求。通過開源的深度學(xué)習(xí)框架TensorFLow、SSD識(shí)別模型,在Python環(huán)境下設(shè)計(jì)圖像格式轉(zhuǎn)換、圖像識(shí)別和定位程序。并在VOT2016標(biāo)準(zhǔn)數(shù)據(jù)集中進(jìn)行測試。測試結(jié)果顯示,在速度和識(shí)別成功率上都符合預(yù)期要求。
關(guān)鍵詞: 機(jī)器視覺; 深度學(xué)習(xí); TensorFLow; SSD; 定位
中圖分類號(hào):TP391.4? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? 文章編號(hào):1006-8228(2019)06-71-05
Abstract: With the development of machine vision technology, higher requirements are put forward for recognition speed, accuracy and project development cycle. Artificial intelligence is undoubtedly a better solution, but in the past, building a deep learning framework from the bottom programming is difficult to meet the technical and project progress requirements. In order to meet the requirements of image recognition, a special image processing server is selected for training and recognition, and its main components are selected. The structure of SSD model is analyzed, and the parameters and memory requirements for training and forward operation are calculated according to the hierarchical structure. Using SSD recognition model of machine learning framework TensorFLow, the program of image format conversion, image recognition and localization is designed with Python. It is tested on VOT 2016 standard data set; the test results show that the expected requirements in terms of speed and recognition success rate are achieved.
Key words: machine vision; deep learning; TensorFLow; location
0 引言
主流圖像識(shí)別和定位的方法大概可以兩類,其一是基于濾波的圖像特征提取,常用的濾波算法有小波變換[1],傅里葉變換[2],加博變換[3]等;其二是基于人工智能類的學(xué)習(xí)算法,通過對(duì)已有的圖像特征學(xué)習(xí)來完成圖像識(shí)別,常用算法有SVM(支持向量機(jī))[4]和深度學(xué)習(xí)[5-6]。
從實(shí)現(xiàn)效果上來看,針對(duì)不同的識(shí)別領(lǐng)域,兩大方法會(huì)呈現(xiàn)不同的識(shí)別準(zhǔn)確率。一般而言,基于濾波的圖像識(shí)別算法更適合于識(shí)別物體特征單一和識(shí)別背景相對(duì)簡單的環(huán)境,如指定環(huán)境的某一工件識(shí)別等。而人工智能類的識(shí)別算法,更適用于識(shí)別物品可能發(fā)生一定變化,識(shí)別背景相對(duì)復(fù)雜的情況,如人臉識(shí)別,人的姿勢、表情識(shí)別等。
TensorFlow是眾多人工智能框架中最具代表性的一個(gè),本文以此為圖像識(shí)別深度學(xué)習(xí)框架,進(jìn)行指定圖像的識(shí)別與定位研究。
1 深度學(xué)習(xí)基礎(chǔ)
1.1 卷積神經(jīng)網(wǎng)絡(luò)的組成
卷積神經(jīng)網(wǎng)絡(luò)屬于神經(jīng)網(wǎng)絡(luò)的一種,是深度學(xué)習(xí)最常用的網(wǎng)絡(luò)之一,已廣泛地應(yīng)用于機(jī)器視覺、文字處理和數(shù)值分析等領(lǐng)域。而深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的最重要的一個(gè)分支,在很多領(lǐng)域已經(jīng)達(dá)到了原有機(jī)器學(xué)習(xí)未能實(shí)現(xiàn)的高度。因此,卷積神經(jīng)網(wǎng)絡(luò)可以看作當(dāng)前主流人工智能實(shí)現(xiàn)方式的一個(gè)代表[7]。
應(yīng)用于機(jī)器視覺方面的卷積神經(jīng)網(wǎng)絡(luò)一般包括:數(shù)據(jù)輸入、卷積層、池化層、激勵(lì)層、全連接層等,具體如圖1所示。
其中,數(shù)據(jù)輸入層除了接收和向下一層級(jí)傳輸圖片外,但需要進(jìn)行去均值、歸一化以及降維等工作。卷積層是把輸入圖片在一定步長和一定尺寸的卷積核進(jìn)行卷積運(yùn)算,而后得出的圖片作為輸出,步長就是卷積核在原圖片上滑動(dòng)間隔的步距,卷積核的尺寸一般可以選3*3或者5*5,卷積層中卷積核的數(shù)量與卷積后輸出的圖片數(shù)量相等。池化層往往在卷積層的后面,有時(shí)和卷積層一并被當(dāng)作同一個(gè)層級(jí)。它通過最大池化運(yùn)算或者平均池化運(yùn)算壓縮圖片數(shù)據(jù)。
一般采用2*2的最大池化壓縮方法,每次池化后數(shù)據(jù)量僅為原有的1/4。激勵(lì)層是把之前各層運(yùn)算結(jié)構(gòu)轉(zhuǎn)換成標(biāo)準(zhǔn)化的非線性映射,常見的激勵(lì)函數(shù)如Sigmoid、ReLU和Tanh等。卷積神經(jīng)網(wǎng)絡(luò)有時(shí)也會(huì)包含全連接層,經(jīng)常出現(xiàn)在網(wǎng)絡(luò)的末端。而目前的卷積神經(jīng)網(wǎng)絡(luò)往往沒有全連接層,很可能是以一個(gè)1*1的卷積層代替。分類層一般采用SoftMax分類器,識(shí)別出圖片中所包含物體的類別。
1.2 卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn)
相對(duì)于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)具有如下幾個(gè)特點(diǎn)。
⑴ 隨機(jī)激活與關(guān)斷部分神經(jīng)元
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)和訓(xùn)練的過程中,經(jīng)常會(huì)出現(xiàn)過擬合現(xiàn)象,也就是由于過于詳細(xì)的關(guān)注每個(gè)樣本的細(xì)節(jié)而忽略了物體原有的變化過濾,過多學(xué)習(xí)了噪聲等干擾。而卷積神經(jīng)網(wǎng)絡(luò)采用隨機(jī)激活和關(guān)斷部分神經(jīng)元的方法,使得神經(jīng)網(wǎng)絡(luò)在訓(xùn)練的過程中無需詳細(xì)的保存圖片的每條細(xì)節(jié),泛化部分特點(diǎn),反而能夠更容易抓住物品的特征進(jìn)行識(shí)別。具體地結(jié)構(gòu)變化如圖2所示,左圖為一般神經(jīng)網(wǎng)絡(luò),右圖為卷積神經(jīng)網(wǎng)絡(luò)。
⑵ 參數(shù)共享機(jī)制
卷積神經(jīng)網(wǎng)絡(luò)中,每層之間或者說每個(gè)神經(jīng)元之間的權(quán)重是不變的。也就是說連接同一個(gè)圖片中的神經(jīng)元,假定其為3*3矩陣,那么卷積神經(jīng)網(wǎng)絡(luò)中這個(gè)9個(gè)數(shù)在前向運(yùn)算中是不變的。
從神經(jīng)或者生物學(xué)角度來講,這使得每個(gè)神經(jīng)元所關(guān)注的特征是唯一的。這也使得卷積神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)訓(xùn)練所需的計(jì)算量變得可以實(shí)現(xiàn),例如,以AlexNet框架的網(wǎng)絡(luò)深度為例,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)訓(xùn)練的過程中需要計(jì)算的權(quán)重參數(shù)由1億降至3.5萬。
⑶ 交叉熵?fù)p失函數(shù)計(jì)算
卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和運(yùn)行整體上來說采用反向傳播和鏈?zhǔn)椒▌t。而找出之前構(gòu)建模型參數(shù)中的錯(cuò)誤就需要交叉熵計(jì)算了。交叉熵是通過概率論的方法,把模型得出屬于某一被識(shí)別出的物品的概率進(jìn)行歸一化,以便了解與真實(shí)結(jié)果的差異。
交叉熵計(jì)算如公式⑴,其中xi為圖片樣本中的第i張圖片矩陣,fyi表示在W激勵(lì)作用下的運(yùn)算結(jié)果,Li為交叉熵結(jié)構(gòu)。
而計(jì)算機(jī)程序計(jì)算時(shí),往往會(huì)采用公式⑵
1.3 SSD計(jì)算模型
常規(guī)的卷積神經(jīng)網(wǎng)絡(luò)的確可以對(duì)目標(biāo)圖像是否包含指定物體,但無法實(shí)現(xiàn)物品對(duì)圖像中的位置定位。若圖像中物體位置定位只能通過在圖片中進(jìn)行一定規(guī)律的矩形分割識(shí)別搜索,例如把原有圖像分成2000個(gè),這樣即便是目前最先進(jìn)的服務(wù)器也較難完成,因?yàn)楣ぷ髁吭黾恿私?000倍。
SSD的結(jié)構(gòu)如圖3所示,它的矩形識(shí)別框都算出一個(gè)各自的檢測值,與以往運(yùn)算模型不同的有兩點(diǎn)。其一是常規(guī)的得出每個(gè)矩形識(shí)別框和圖片背景的歸類評(píng)分,其二以矩形識(shí)別框的中心X、Y坐標(biāo),高度和寬度,相當(dāng)于建立起這個(gè)四個(gè)參數(shù)與檢測值的函數(shù)。
矩形識(shí)別框的匹配原則分為兩個(gè)步驟,其一是在被識(shí)別圖片中的真實(shí)目標(biāo),都找到一個(gè)對(duì)應(yīng)物體準(zhǔn)確度最高的矩形識(shí)別框,其二是首輪未匹配到的對(duì)大于一定閾值的矩形識(shí)別框進(jìn)行第二次選擇匹配。
2 圖像識(shí)別平臺(tái)的搭建
本文操作系統(tǒng)為Windows 10,Windows系列是TensorFlow在支持linux和MAC之后的第三個(gè)操作系統(tǒng)。軟件開發(fā)語言選擇更適合于數(shù)值計(jì)算,而且與TensorFlow平臺(tái)使用資料較為豐富的Python。為了安裝TensorFlow方便,選擇Python插件工具包Anaconda4.3,在此基礎(chǔ)上安裝TensorFlow1.12,并把Python版本降至3.5,以便支持TensorFlow1.12。Anaconda安裝后,Python的編譯環(huán)境為Spyder3.2.3。
為了縮短訓(xùn)練時(shí)間,圖像處理選擇支持GPU運(yùn)算的服務(wù)器。服務(wù)器的主要配置如表1所示。為了追求深度學(xué)習(xí)的運(yùn)算速度,顯卡為四個(gè)英偉達(dá)的Titan XP并聯(lián)。
單張圖片進(jìn)行前向運(yùn)算所需要內(nèi)存約為28*4=112M,單張圖片需要確認(rèn)參數(shù)約為21M個(gè)。如果與VGG相比的話,相對(duì)比VGG的224*224像素圖像的93M和138M比,無疑是節(jié)約了很多內(nèi)存空間和運(yùn)算時(shí)間。而且在識(shí)別的功能性上,也由識(shí)別圖像內(nèi)是否包含物體變成物體定位。計(jì)算內(nèi)存占用量和參數(shù)計(jì)算有助于了解訓(xùn)練和前向運(yùn)算時(shí)所需要的服務(wù)器顯卡資源。訓(xùn)練是需要一次獲取若干張圖片的,例如32張,那么需要的內(nèi)存就至少是一張的32倍。
計(jì)算的層次順序不完全按照SSD進(jìn)行排序的,由于它前面與VGG一致,所以層次的計(jì)算順序是先是VGG部分,而后是SSD增加部分。
4 基于SSD模型的程序設(shè)計(jì)
4.1 卷積層參數(shù)訓(xùn)練
參數(shù)訓(xùn)練部分主要代碼如下:
4.2 在已有參數(shù)基礎(chǔ)上進(jìn)行微調(diào)
為了更快的訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的參數(shù),也可以下載一些已經(jīng)訓(xùn)練好的數(shù)據(jù),并在此基礎(chǔ)上進(jìn)行微調(diào)得到這類圖片的訓(xùn)練結(jié)果。例如可以在GitHub中下載TensorFlow-SSD數(shù)據(jù)包,保存參數(shù)的文件名為:ssd_300_vgg.ckpt.data-00000-of-00001,以此作為參數(shù)基礎(chǔ)。微調(diào)的主要部分程序如下所示:
5 實(shí)驗(yàn)結(jié)果與對(duì)比
5.1 實(shí)驗(yàn)結(jié)果
在VOT2016中選擇蝴蝶作為實(shí)驗(yàn)對(duì)象,這類圖片共計(jì)150張,取后130張作為訓(xùn)練樣本,前20張作為測試樣本。通過變換把原圖像轉(zhuǎn)換到300*300像素再轉(zhuǎn)換到TF數(shù)據(jù)集格式,每次迭代訓(xùn)練16張圖片,反復(fù)訓(xùn)練500次后測試出識(shí)別結(jié)果。其中,訓(xùn)練速度平均在8張圖片/秒左右。實(shí)驗(yàn)結(jié)果如圖4所示。
5.2 實(shí)驗(yàn)過程數(shù)據(jù)
分別采用在新建模型重新訓(xùn)練和在下載數(shù)據(jù)中進(jìn)行微調(diào)做測試對(duì)比,對(duì)比結(jié)果如圖5所示??梢娢⒄{(diào)的實(shí)際測試中收斂速度更快。
6 結(jié)束語
隨著TensorFlow的開源發(fā)布,基于卷積神經(jīng)網(wǎng)絡(luò)的圖像識(shí)別資源已經(jīng)逐漸向此方向傾斜。例如SSD最初是在Caffe框架下設(shè)計(jì)的,目前不僅可以較為方便的下載TensorFlow的學(xué)習(xí)模型框架,而且也有越來越多的人在使用它進(jìn)行研究和應(yīng)用。
本文采用SSD和TensorFlow相結(jié)合,在圖像處理服務(wù)器中對(duì)VOT2016的蝴蝶樣本進(jìn)行訓(xùn)練和測試,在訓(xùn)練速度和識(shí)別成功率在都取得了較好的結(jié)果。
參考文獻(xiàn)(References):
[1] 石巖.基于二維不可分形態(tài)小波變換的多光譜圖像全色銳化方法[J].北京交通大學(xué)學(xué)報(bào),2018.42(5):116-122
[2] 朗俊,付香雪,郭盼.分?jǐn)?shù)傅里葉變換域的彩色圖像非對(duì)稱光學(xué)壓縮加密[J].光電工程,2018.45(6):124-133
[3] 姚瓊,徐翔,鄒昆.基于3D Gabor多視圖主動(dòng)學(xué)習(xí)的高光譜圖像分類[J].計(jì)算機(jī)工程與應(yīng)用,2018.54(22):197-204
[4] 李紅麗,許春香,馬耀鋒.基于多核學(xué)習(xí)SVM的圖像分類識(shí)別算法[J].計(jì)算機(jī)科學(xué)與應(yīng)用,2018.41(6):50-52
[5] 李勝旺,韓倩.基于深度學(xué)習(xí)的圖像處理技術(shù)[J].數(shù)字技術(shù)與應(yīng)用,2018.36(9):65-66
[6] 李永剛,王朝暉,萬曉依等.基于深度殘差雙單向DLSTM的時(shí)空一致視頻事件識(shí)別[J].計(jì)算機(jī)學(xué)報(bào),2018.41(12):2853-2864
[7] 劉忠利,陳光,單志勇等.基于深度學(xué)習(xí)的脊柱 CT 圖像分割[J].計(jì)算機(jī)應(yīng)用與軟件,2018.35(10):200-204
[8] LIU W,ANGUELOV D, ERHAN D, et al.SSD: single shot?multi-box detector,2016[C].Berlin: ECCV,2016:21-37
[9] Simonyan, K., Zisserman, A.: Very deep convolutional?networks for large-scale image recognition,2015[C]. Montreal :NIPS.(2015)
收稿日期:2019-02-25
*基金項(xiàng)目:浙江省2018年度重點(diǎn)研發(fā)計(jì)劃項(xiàng)目(2018C01111)
作者簡介:姜華(1976-),男,浙江杭州人,碩士,高級(jí)工程師,主要研究方向:圖像識(shí)別與大數(shù)據(jù)。