米克熱依·迪里夏提,張?zhí)t
(新疆農(nóng)業(yè)大學 計算機與信息工程學院,新疆 烏魯木齊 830001)
近年來,突出馬品種多元化發(fā)展、豐富馬產(chǎn)業(yè)文化內(nèi)涵已成為現(xiàn)代馬產(chǎn)業(yè)發(fā)展趨勢之一。現(xiàn)代化馬產(chǎn)業(yè)體系中信息的采集、個體檔案的創(chuàng)建、執(zhí)行方案的制定以及品種溯源等,都需要對馬匹進行快速準確的品種識別[1]。馬品種的分類和識別一般以頭部形狀、別征、毛色等外貌特征為主要依據(jù)。目前,對于馬品種的識別和管理主要靠人工進行,人工識別不但費時費力、費資并效率低。與此同時一般的非專業(yè)人員識別時會容易搞混。隨著機器視覺理論研究的深入,圖像的智能識別與應用已成為人工智能領(lǐng)域的熱點。圖像識別與人工識別相比,其獨到之處是省時省力、效率高,不但能在種群生活的時間內(nèi)實現(xiàn)實時監(jiān)測,還能在不依賴人類視覺的情況下,實現(xiàn)行為的量化。當前,在對目標物體進行識別和分類的過程中,深度學習算法具有很好的效果。深度神經(jīng)網(wǎng)絡(luò)算法相較于早期依賴于先驗知識進行特征提取的算法具有更強的敏捷性和適用性,可以使訓練樣本滿足不同的網(wǎng)絡(luò)構(gòu)建特征。特別是在自動學習和圖像特征提取方向上,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)這一重要的深度學習神經(jīng)網(wǎng)絡(luò)算法具備較大的優(yōu)勢,這一算法已被應用到了圖像識別、搜索引擎等領(lǐng)域,并取得了重大突破[2]。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)是為了處理二維數(shù)據(jù)而構(gòu)造的多層次網(wǎng)絡(luò)結(jié)構(gòu)。采用卷積運算逐層提取圖片不同層次的語義,再靠數(shù)據(jù)樣本的訓練擬合調(diào)節(jié)每層卷積核的參數(shù),然后在無監(jiān)督學習下完成分類特征的提取。特征映射層和特征提取層被看作是卷積神經(jīng)網(wǎng)絡(luò)特有的神經(jīng)元層。特征映射層(卷積層)的每個神經(jīng)元的輸入與前一層局部相連,靠卷積核數(shù)對二維數(shù)據(jù)完成卷積操作,并添加偏置向,提取當前局部特征,二次特征提取和求局部敏感性是通過特征提取層(降采樣層、池化層、取樣層)完成的[3]。卷積層和池化層在卷積神經(jīng)網(wǎng)絡(luò)中是按先后順序出現(xiàn)的,并依次完成特征提取的工作。通過連續(xù)取征,使神經(jīng)網(wǎng)絡(luò)在對輸入樣本進行識別時具備較高的特征學習能力。卷積層中的特征映射是選取前一網(wǎng)絡(luò)層中特征像的各角度特征,使其擁有扭轉(zhuǎn)、位移不變的特性[4]。得益于CNN的權(quán)值共享能力,因而在不同的平面間的映射可以理解為卷積的過程,計算公式如下:
(1)
其中,n表示網(wǎng)絡(luò)層數(shù);K表示卷積核;Mj表示一種輸入特征圖的組合方式;b表示所有輸出特征圖必須具備的偏置項[5]。需要特別注意的是,因為一個輸出特征圖可能關(guān)聯(lián)一個或多個輸入特征圖,如果關(guān)聯(lián)多個輸入特征圖時,這些輸入特征圖需要對應各自的卷積核。池化層的任務(wù)是在上一層相似特征互相疊加的基礎(chǔ)上,完成第二次特征提取,從而達到降低隱含層空間分辨率的目的。其次,它主要作用于圖片中不重疊的區(qū)域,神經(jīng)元X的計算公式如下:
(2)
其中,down()函數(shù)是一種下采樣函數(shù),依據(jù)池化操作計算方式的區(qū)別分為平均池化和最大池化[6]。
由于卷積神經(jīng)網(wǎng)絡(luò)通過卷積、池化等操作獲取的特征值來計算損失差,并且使用反向傳播算法更新網(wǎng)絡(luò)參數(shù),再通過分類器分類并得出識別結(jié)果,因此可否提取有效的特征值對于識別率的提高至關(guān)重要。而池化算法決定亞采樣的結(jié)果,通過對該特征提取過程進行優(yōu)化,對于識別率的提高意義重大。
圖像池化從屬于特征提取的質(zhì)量,而提取的圖像特征對識別率有很大的影響,常見的平均池化和最大池化模型都屬于經(jīng)典池化模型[7]。在池化操作中,平均池化模型先是對池化域中的所有值求和取平均,再把平均后的值作為子采樣的特征值;而最大池化模型是取池化域內(nèi)元素值最大的,并把它作為子采樣特征值。最大池化計算公式如下:
(3)
其中,Rij表示池化值;公式第一項表示在大小為a×a的池化域中取最大值,a表示池化邊長;b表示偏置[8]。
由于最大值池化僅對池化域中的元素取最大值,因此并不總會獲取到有效信息。如圖1所示,在2×2的池化域中a3為最大值,在a1,a2未知的環(huán)境下,池化域的特征值用最大值代替時會影響圖片特征提取的精確度,從而影響到后期的分類工作。
圖1 最大池化域示意
針對馬品種圖像,由于其品種間差異大、圖像背景豐富,再加上馬體別征的多樣性和馬體姿勢的多變性,使得經(jīng)典的池化方法難以獲取有用的特征值。為了最大限度提高模型的識別率,因此,在最大池化算法的基礎(chǔ)上,用插值法建立數(shù)學模型并進行函數(shù)模擬[9]。其算法如下:
(4)
其中,μ表示池化因子,其原理是用μ改進最大池化算法。優(yōu)化后的算法能夠更精確地獲取特征[10]。μ的計算公式如下:
(5)
其中,c表示池化域中除最大值之外元素的平均值;vmax表示池化域中的最大值;δ表示糾正誤差項;θ表示特征系數(shù)[11],計算公式如下:
(6)
其中,nepoch為訓練次數(shù),通過特征系數(shù)和池化域內(nèi)各項值決定池化因子μ的值。池化因子在池化域大小已定以及迭代周期保持不變的情況下,是靠池化域的不同自適應取值;池化因子面臨同一個池化域時,會根據(jù)迭代輪數(shù)的不同,動態(tài)調(diào)整并達到最優(yōu)。池化因子μ∈(0,1),這樣既能在處理最大值特征明顯的池化域時不失去精度,又能減小最大池化對其他池化域的影響,從而幫助卷積神經(jīng)網(wǎng)絡(luò)在不同次數(shù)的迭代下對不同池化域時可以獲取到更加精準的特征,使自適應池化層提取到的特征值能夠最大程度地反映原始輸入圖像。
卷積神經(jīng)網(wǎng)絡(luò)的卷積和池化過程都是在原始圖像或者特征圖像上經(jīng)過從上到下、從左到右等滑窗操作實現(xiàn)的,因此可以用卷積完成自適應池化。由圖2(a)所示,輸入的特征像尺寸為3×3,卷積核尺寸為2×2,以步長為1進行卷積后的特征像尺寸為3×3,以步長為2進行池化后得到的特征像尺寸為2×2。由該過程可知,卷積結(jié)果相對于池化結(jié)果是從第2行第2列開始的偶數(shù)坐標值累加,而圖2(b)表示,將卷積結(jié)果從第2行第2列開始的偶數(shù)坐標值進行刪除操作即可得到池化結(jié)果[12]。
圖2 卷積池化操作
圖2(a)是大小為4×4的特征圖,現(xiàn)有四個大小為2×2的卷積核分別為:
完成卷積計算后提取到4個大小為3×3的特征圖,將其合并成4×3×3的多維矩陣,定義為T1,對該空間矩陣求取對應位置的最大值即可得到1×3×3的矩陣T2,對T2進行如上所述刪除操作即可得到最大池化的結(jié)果[13]。
自適應池化是在卷積的基礎(chǔ)上實現(xiàn)的,在得到T1后,在4個二維矩陣上進行對應位置的求和運算得到T3,再計算T3-T2,求剩余元素個數(shù)的平均值,即可得到式3中c的取值,根據(jù)式4以及c值即可求出池化因子μ值,由此可得自適應池化的結(jié)果。由自適應池化算法及實現(xiàn)過程可知,自適應池化是根據(jù)卷積與原經(jīng)典池化的方式實現(xiàn)的,并未引進其他需要訓練的變量,從而沒有影響神經(jīng)網(wǎng)絡(luò)的反向傳播算法更新參數(shù)的過程。
3.1.1 數(shù)據(jù)集來源
文中數(shù)據(jù)集是由新疆伊寧市新源縣馬場和昭蘇馬場提供,部分數(shù)據(jù)是通過網(wǎng)絡(luò)收集得來的。數(shù)據(jù)集中馬品種圖片都是RGB的、高分辨率的,其分辨率約為2 355×1 828像素。通過對拍攝和下載得到的圖片進行研究和整理,將圖像分成8個品種。如表1所示。
表1 自適應池化
3.1.2 圖片歸一化
在原始圖像的采集過程中,由于圖像來源于不同的拍攝設(shè)備,圖像的尺度和焦點并不一致。由于卷積神經(jīng)網(wǎng)絡(luò)卷積過程對圖像尺寸沒有嚴格要求,因此輸入圖像經(jīng)過卷積層后生成的特征圖譜的大小會不一樣,如果隱藏層直接與全連接層連接,則要訓練的連接權(quán)值矩陣的大小會隨輸入圖像的大小而改變,導致無法在同一個網(wǎng)絡(luò)結(jié)構(gòu)中用BP反向傳播算法完成訓練[14]。因此,將文中用到的所有馬品種圖像都歸一化到224×224像素。為了保證縮放后的圖像不失真,在縮放圖像之前用resize-image函數(shù)對圖像四邊進行了一次判斷,根據(jù)判斷結(jié)果再通過增加黑色邊框的方式把圖像變成正方形,確保了圖像的不失真。圖3是吉普賽馬圖像縮放后的示例。
圖3 圖像歸一化
3.1.3 數(shù)據(jù)擴增
通過深度學習進行圖像分類時,需要具備足夠的樣本數(shù)據(jù)進行訓練和驗證,而當遇到樣本數(shù)據(jù)量不足的情況時,必須通過數(shù)據(jù)擴增來彌補數(shù)據(jù)量不足的問題。對樣本數(shù)據(jù)采用平移、旋轉(zhuǎn)等方法,生成一定數(shù)量的子圖像,由于這些圖像是通過原圖像產(chǎn)生的,也具備一定的可分類性[15]。除此之外,通過數(shù)據(jù)擴增可以解決一定程度上數(shù)據(jù)樣本不均衡的問題。圖4是阿克哈-塔克馬(Akhal-Teke)用圖像數(shù)據(jù)擴充后的案例,圖4(a)為原圖像,圖4(b)是原圖像經(jīng)過水平移動、旋轉(zhuǎn)、水平反轉(zhuǎn)后獲得的圖像(M=10)。水平移動有利于改善特征定位在極小的面部挪動的條件下的魯棒性;旋轉(zhuǎn)使得模型可以學習適應復雜的姿勢變化,從而解決了數(shù)據(jù)樣本不平衡和少的問題。
圖4 數(shù)據(jù)擴增
文中模仿Alex Net網(wǎng)絡(luò)框架,設(shè)計了11層的卷積網(wǎng)絡(luò)結(jié)構(gòu),包括3個卷積層、3個池化層、2個dropout層和1個全連接層以及輸入輸出層。首先輸入層的圖像為224×224像素的RGB圖像;卷積層conv1到conv3的卷積核數(shù)目分別是32、32、64,全部卷積核大小為5×5,對所有卷積都使用非線性激活函數(shù)ReLU,采用輸入輸出大小一致的方法把padding均設(shè)為1;池化層類型均為自適應池化(DA-pooling),核大小均為2×2;Dropout層需確定一個參數(shù)表示舍棄激活層神經(jīng)元值的比例,文中Dropout層舍棄比例分別為0.25、0.5,從而避免訓練集復用造成的過擬合現(xiàn)象。為了便于理解,在圖5中主要繪制了特征映射層、特征提取層和全連接層這三層網(wǎng)絡(luò)。預處理圖像后傳入到網(wǎng)絡(luò)中,主要通過特征映射層(卷積層、Conv)和特征提取層(自適應池化,DA-Pooling)交替疊加生成,全連接層(Fc)在Pool3之后。隱含層具備參數(shù)量少的優(yōu)點,因為各層之間是通過局部相連和權(quán)值共享的方式建立連接。最后通過SoftMax函數(shù)對全連接層輸出特征分類,并輸出分類結(jié)果。
圖5 Horse Net網(wǎng)絡(luò)結(jié)構(gòu)
實驗是通過Keras框架完成的。采用上文描述的CNN結(jié)構(gòu),通過輸入規(guī)定格式的訓練集樣本數(shù)據(jù)進行參數(shù)訓練,采用高斯分布作為網(wǎng)絡(luò)初始權(quán)重的初始化方法,選取高斯分布標準差為0.01,均值為0。每次批量訓練用8張圖片。訓練集中所有圖片遍歷一次看作是一次迭代(epoch)的過程,一共迭代1 000次。優(yōu)化模型采用的是隨機梯度下降優(yōu)化算法(stochastic gradient descent,SGD),算法動量因子設(shè)置為0.9。設(shè)置權(quán)重參數(shù)的初始學習速率為0.001。用“accuracy”方法評估模型性能,即為準確率。按照8∶1∶1比例在原始數(shù)據(jù)集上做分層取樣,其中1 861個樣本用于訓練集,186個樣本用于驗證集,187個樣本用于測試集。
不斷使用驗證集在訓練過程中實時評測模型的預測性能,進而優(yōu)化模型,將驗證集預測的準確率最高的一輪訓練結(jié)果選取為最終模型,并用于預測測試集數(shù)據(jù)。在上文為網(wǎng)絡(luò)訓練設(shè)置的參數(shù)不變的情況下,分別對使用最大池化、自適應池化以及數(shù)據(jù)擴增的卷積神經(jīng)網(wǎng)絡(luò)進行訓練,并在測試集上測試模型準確率和誤差。文中一共做了三組實驗。實驗一是在無數(shù)據(jù)擴增、無自適應池化的條件下搭建最初的網(wǎng)絡(luò)并進行學習。由圖6(a)可得,沒有數(shù)據(jù)擴增、無自適應池化的網(wǎng)絡(luò)在訓練次數(shù)超過300后,驗證集損失值(Validation Loss)開始不斷上升,模型出現(xiàn)了較為嚴重的過擬合現(xiàn)象。這種嚴重的過擬合現(xiàn)象影響了模型的準確率,由表2第一行可見,模型在各數(shù)據(jù)集上的準確率較低、損失值偏高,測試集上的準確率也只有71.09%。為了改善模型,以實驗一中搭建的卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ),只在數(shù)據(jù)預處理中添加數(shù)據(jù)擴增一項,并再次學習;實驗二訓練結(jié)果由表2第二行可見。與實驗一結(jié)果相比,用數(shù)據(jù)擴增學習后的模型測試集上的準確率比實驗一高出9.59個百分點。由圖6(b)和圖6(a)相比,增加預處理項后的網(wǎng)絡(luò)在一定程度上緩解了驗證集損失值逐步上升的現(xiàn)象,但依然沒有很好地解決模型過擬合以及準確率較低的問題。為了試著解決模型所遇到的頸瓶,在數(shù)據(jù)擴增的同時,對網(wǎng)絡(luò)結(jié)構(gòu)進行了改造,把原有的最大池化層替換成自適應池化層,并再度學習。由圖6(c)和6(d)可得,用自適應池化學習后的模型驗證集損失值與訓練集保持同步下降、準確率則是保持同步上升,損失值最低達到0.46以下,準確率最高達到87%以上。由表2第三行可見,用自適應池化學習后的模型在各數(shù)據(jù)集上的準確率比前兩次有明顯的提高。而測試集上的準確率也達到了88.24%。
可見,自適應池化算法在避免模型出現(xiàn)過擬合現(xiàn)象的同時提高了模型的準確率,而且并沒有消耗更多的時間。實驗三模型的混淆矩陣如表3所示,模型的分類結(jié)果大都集中在混淆矩陣的對角線區(qū)域,表明模型具有一定的分類能力。其中模型對吉普賽馬、哈福林格馬、弗里西亞馬的識別準確率較高,而對伊犁馬、阿拉伯馬的識別準確率較低。
表2 不同網(wǎng)絡(luò)結(jié)構(gòu)模型的準確率
圖6 損失函數(shù)值變化曲線與準確率曲線 表3 模型分類結(jié)果
品種編號01234567準確率/%027003000281.02102503004080.76200280500086.01304016028269.84400502700082.07500030291084.71603070019170700030042073.4
文中提出了一種用于馬品種識別的基于自適應池化的卷積神經(jīng)網(wǎng)絡(luò)模型。由實驗結(jié)果可得,自適應池化算法在提高神經(jīng)網(wǎng)絡(luò)對馬品種識別能力時效果最為明顯,試著改善了網(wǎng)絡(luò)擬合以及識別能力低的問題,改善了模型的收斂性和魯棒性。與此同時,使模型擁有了不錯的分類能力。由此可見,該自適應池化模型適合用于卷積神經(jīng)網(wǎng)絡(luò)處理二維圖像的深度學習算法。