姜華 孫勇



摘? 要: 隨著機器視覺技術(shù)發(fā)展,對識別速度、準確率和項目開發(fā)周期等方面都提出了更高的要求。人工智能無疑是較好的解決方式,而以往從底層編程搭建深度學(xué)習(xí)框架在技術(shù)和項目進度上都很難滿足要求。為了滿足圖像識別要求,選擇專用的圖像處理服務(wù)器進行訓(xùn)練與識別,并對其主要部件進行選型。對SSD模型結(jié)構(gòu)進行了分析,根據(jù)各層次結(jié)構(gòu)計算了一次訓(xùn)練與前向運算過程中所需計算的參數(shù)及內(nèi)存要求。通過開源的深度學(xué)習(xí)框架TensorFLow、SSD識別模型,在Python環(huán)境下設(shè)計圖像格式轉(zhuǎn)換、圖像識別和定位程序。并在VOT2016標準數(shù)據(jù)集中進行測試。測試結(jié)果顯示,在速度和識別成功率上都符合預(yù)期要求。
關(guān)鍵詞: 機器視覺; 深度學(xué)習(xí); TensorFLow; SSD; 定位
中圖分類號:TP391.4? ? ? ? ? 文獻標志碼:A? ? 文章編號: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 引言
主流圖像識別和定位的方法大概可以兩類,其一是基于濾波的圖像特征提取,常用的濾波算法有小波變換[1],傅里葉變換[2],加博變換[3]等;其二是基于人工智能類的學(xué)習(xí)算法,通過對已有的圖像特征學(xué)習(xí)來完成圖像識別,常用算法有SVM(支持向量機)[4]和深度學(xué)習(xí)[5-6]。
從實現(xiàn)效果上來看,針對不同的識別領(lǐng)域,兩大方法會呈現(xiàn)不同的識別準確率。一般而言,基于濾波的圖像識別算法更適合于識別物體特征單一和識別背景相對簡單的環(huán)境,如指定環(huán)境的某一工件識別等。而人工智能類的識別算法,更適用于識別物品可能發(fā)生一定變化,識別背景相對復(fù)雜的情況,如人臉識別,人的姿勢、表情識別等。
TensorFlow是眾多人工智能框架中最具代表性的一個,本文以此為圖像識別深度學(xué)習(xí)框架,進行指定圖像的識別與定位研究。
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)用于機器視覺、文字處理和數(shù)值分析等領(lǐng)域。而深度學(xué)習(xí)是機器學(xué)習(xí)的最重要的一個分支,在很多領(lǐng)域已經(jīng)達到了原有機器學(xué)習(xí)未能實現(xiàn)的高度。因此,卷積神經(jīng)網(wǎng)絡(luò)可以看作當(dāng)前主流人工智能實現(xiàn)方式的一個代表[7]。
應(yīng)用于機器視覺方面的卷積神經(jīng)網(wǎng)絡(luò)一般包括:數(shù)據(jù)輸入、卷積層、池化層、激勵層、全連接層等,具體如圖1所示。
其中,數(shù)據(jù)輸入層除了接收和向下一層級傳輸圖片外,但需要進行去均值、歸一化以及降維等工作。卷積層是把輸入圖片在一定步長和一定尺寸的卷積核進行卷積運算,而后得出的圖片作為輸出,步長就是卷積核在原圖片上滑動間隔的步距,卷積核的尺寸一般可以選3*3或者5*5,卷積層中卷積核的數(shù)量與卷積后輸出的圖片數(shù)量相等。池化層往往在卷積層的后面,有時和卷積層一并被當(dāng)作同一個層級。它通過最大池化運算或者平均池化運算壓縮圖片數(shù)據(jù)。
一般采用2*2的最大池化壓縮方法,每次池化后數(shù)據(jù)量僅為原有的1/4。激勵層是把之前各層運算結(jié)構(gòu)轉(zhuǎn)換成標準化的非線性映射,常見的激勵函數(shù)如Sigmoid、ReLU和Tanh等。卷積神經(jīng)網(wǎng)絡(luò)有時也會包含全連接層,經(jīng)常出現(xiàn)在網(wǎng)絡(luò)的末端。而目前的卷積神經(jīng)網(wǎng)絡(luò)往往沒有全連接層,很可能是以一個1*1的卷積層代替。分類層一般采用SoftMax分類器,識別出圖片中所包含物體的類別。
1.2 卷積神經(jīng)網(wǎng)絡(luò)的特點
相對于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)具有如下幾個特點。
⑴ 隨機激活與關(guān)斷部分神經(jīng)元
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)和訓(xùn)練的過程中,經(jīng)常會出現(xiàn)過擬合現(xiàn)象,也就是由于過于詳細的關(guān)注每個樣本的細節(jié)而忽略了物體原有的變化過濾,過多學(xué)習(xí)了噪聲等干擾。而卷積神經(jīng)網(wǎng)絡(luò)采用隨機激活和關(guān)斷部分神經(jīng)元的方法,使得神經(jīng)網(wǎng)絡(luò)在訓(xùn)練的過程中無需詳細的保存圖片的每條細節(jié),泛化部分特點,反而能夠更容易抓住物品的特征進行識別。具體地結(jié)構(gòu)變化如圖2所示,左圖為一般神經(jīng)網(wǎng)絡(luò),右圖為卷積神經(jīng)網(wǎng)絡(luò)。
⑵ 參數(shù)共享機制
卷積神經(jīng)網(wǎng)絡(luò)中,每層之間或者說每個神經(jīng)元之間的權(quán)重是不變的。也就是說連接同一個圖片中的神經(jīng)元,假定其為3*3矩陣,那么卷積神經(jīng)網(wǎng)絡(luò)中這個9個數(shù)在前向運算中是不變的。
從神經(jīng)或者生物學(xué)角度來講,這使得每個神經(jīng)元所關(guān)注的特征是唯一的。這也使得卷積神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)訓(xùn)練所需的計算量變得可以實現(xiàn),例如,以AlexNet框架的網(wǎng)絡(luò)深度為例,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)訓(xùn)練的過程中需要計算的權(quán)重參數(shù)由1億降至3.5萬。
⑶ 交叉熵損失函數(shù)計算
卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和運行整體上來說采用反向傳播和鏈式法則。而找出之前構(gòu)建模型參數(shù)中的錯誤就需要交叉熵計算了。交叉熵是通過概率論的方法,把模型得出屬于某一被識別出的物品的概率進行歸一化,以便了解與真實結(jié)果的差異。
交叉熵計算如公式⑴,其中xi為圖片樣本中的第i張圖片矩陣,fyi表示在W激勵作用下的運算結(jié)果,Li為交叉熵結(jié)構(gòu)。
而計算機程序計算時,往往會采用公式⑵
1.3 SSD計算模型
常規(guī)的卷積神經(jīng)網(wǎng)絡(luò)的確可以對目標圖像是否包含指定物體,但無法實現(xiàn)物品對圖像中的位置定位。若圖像中物體位置定位只能通過在圖片中進行一定規(guī)律的矩形分割識別搜索,例如把原有圖像分成2000個,這樣即便是目前最先進的服務(wù)器也較難完成,因為工作量增加了近2000倍。
SSD的結(jié)構(gòu)如圖3所示,它的矩形識別框都算出一個各自的檢測值,與以往運算模型不同的有兩點。其一是常規(guī)的得出每個矩形識別框和圖片背景的歸類評分,其二以矩形識別框的中心X、Y坐標,高度和寬度,相當(dāng)于建立起這個四個參數(shù)與檢測值的函數(shù)。
矩形識別框的匹配原則分為兩個步驟,其一是在被識別圖片中的真實目標,都找到一個對應(yīng)物體準確度最高的矩形識別框,其二是首輪未匹配到的對大于一定閾值的矩形識別框進行第二次選擇匹配。
2 圖像識別平臺的搭建
本文操作系統(tǒng)為Windows 10,Windows系列是TensorFlow在支持linux和MAC之后的第三個操作系統(tǒng)。軟件開發(fā)語言選擇更適合于數(shù)值計算,而且與TensorFlow平臺使用資料較為豐富的Python。為了安裝TensorFlow方便,選擇Python插件工具包Anaconda4.3,在此基礎(chǔ)上安裝TensorFlow1.12,并把Python版本降至3.5,以便支持TensorFlow1.12。Anaconda安裝后,Python的編譯環(huán)境為Spyder3.2.3。
為了縮短訓(xùn)練時間,圖像處理選擇支持GPU運算的服務(wù)器。服務(wù)器的主要配置如表1所示。為了追求深度學(xué)習(xí)的運算速度,顯卡為四個英偉達的Titan XP并聯(lián)。
單張圖片進行前向運算所需要內(nèi)存約為28*4=112M,單張圖片需要確認參數(shù)約為21M個。如果與VGG相比的話,相對比VGG的224*224像素圖像的93M和138M比,無疑是節(jié)約了很多內(nèi)存空間和運算時間。而且在識別的功能性上,也由識別圖像內(nèi)是否包含物體變成物體定位。計算內(nèi)存占用量和參數(shù)計算有助于了解訓(xùn)練和前向運算時所需要的服務(wù)器顯卡資源。訓(xùn)練是需要一次獲取若干張圖片的,例如32張,那么需要的內(nèi)存就至少是一張的32倍。
計算的層次順序不完全按照SSD進行排序的,由于它前面與VGG一致,所以層次的計算順序是先是VGG部分,而后是SSD增加部分。
4 基于SSD模型的程序設(shè)計
4.1 卷積層參數(shù)訓(xùn)練
參數(shù)訓(xùn)練部分主要代碼如下:
4.2 在已有參數(shù)基礎(chǔ)上進行微調(diào)
為了更快的訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的參數(shù),也可以下載一些已經(jīng)訓(xùn)練好的數(shù)據(jù),并在此基礎(chǔ)上進行微調(diào)得到這類圖片的訓(xùn)練結(jié)果。例如可以在GitHub中下載TensorFlow-SSD數(shù)據(jù)包,保存參數(shù)的文件名為:ssd_300_vgg.ckpt.data-00000-of-00001,以此作為參數(shù)基礎(chǔ)。微調(diào)的主要部分程序如下所示:
5 實驗結(jié)果與對比
5.1 實驗結(jié)果
在VOT2016中選擇蝴蝶作為實驗對象,這類圖片共計150張,取后130張作為訓(xùn)練樣本,前20張作為測試樣本。通過變換把原圖像轉(zhuǎn)換到300*300像素再轉(zhuǎn)換到TF數(shù)據(jù)集格式,每次迭代訓(xùn)練16張圖片,反復(fù)訓(xùn)練500次后測試出識別結(jié)果。其中,訓(xùn)練速度平均在8張圖片/秒左右。實驗結(jié)果如圖4所示。
5.2 實驗過程數(shù)據(jù)
分別采用在新建模型重新訓(xùn)練和在下載數(shù)據(jù)中進行微調(diào)做測試對比,對比結(jié)果如圖5所示。可見微調(diào)的實際測試中收斂速度更快。
6 結(jié)束語
隨著TensorFlow的開源發(fā)布,基于卷積神經(jīng)網(wǎng)絡(luò)的圖像識別資源已經(jīng)逐漸向此方向傾斜。例如SSD最初是在Caffe框架下設(shè)計的,目前不僅可以較為方便的下載TensorFlow的學(xué)習(xí)模型框架,而且也有越來越多的人在使用它進行研究和應(yīng)用。
本文采用SSD和TensorFlow相結(jié)合,在圖像處理服務(wù)器中對VOT2016的蝴蝶樣本進行訓(xùn)練和測試,在訓(xùn)練速度和識別成功率在都取得了較好的結(jié)果。
參考文獻(References):
[1] 石巖.基于二維不可分形態(tài)小波變換的多光譜圖像全色銳化方法[J].北京交通大學(xué)學(xué)報,2018.42(5):116-122
[2] 朗俊,付香雪,郭盼.分數(shù)傅里葉變換域的彩色圖像非對稱光學(xué)壓縮加密[J].光電工程,2018.45(6):124-133
[3] 姚瓊,徐翔,鄒昆.基于3D Gabor多視圖主動學(xué)習(xí)的高光譜圖像分類[J].計算機工程與應(yīng)用,2018.54(22):197-204
[4] 李紅麗,許春香,馬耀鋒.基于多核學(xué)習(xí)SVM的圖像分類識別算法[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的時空一致視頻事件識別[J].計算機學(xué)報,2018.41(12):2853-2864
[7] 劉忠利,陳光,單志勇等.基于深度學(xué)習(xí)的脊柱 CT 圖像分割[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
*基金項目:浙江省2018年度重點研發(fā)計劃項目(2018C01111)
作者簡介:姜華(1976-),男,浙江杭州人,碩士,高級工程師,主要研究方向:圖像識別與大數(shù)據(jù)。