張小鋒,劉紅錚
(南昌航空大學(xué)江西省圖像處理與模式識別重點(diǎn)實(shí)驗(yàn)室,江西 南昌 330063)
隨著科技的發(fā)展,人們越來越方便地使用電子設(shè)備拍攝花朵圖片,催生了花朵識別的研究。之前人們對花朵識別的研究一直無法取得進(jìn)步,主要是因?yàn)樘卣魈崛《际且揽渴止ぬ崛 J止ぬ卣魈崛〔粌H耗費(fèi)大量的時間,還需要一定的專業(yè)知識?;ǘ渥R別作為一種細(xì)粒度圖像識別,特征的提取更為復(fù)雜。隨著卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)的發(fā)展,圖片的特征可以自動提取,花朵圖片的分類也開始利用CNN。
每一個卷積層都含有多個特征圖(feature map),卷積層中特征圖通過卷積核與上一層的特征圖構(gòu)成局部連接。如圖1所示,特征圖的尺寸大小為32×32。
圖1 卷積層過濾器結(jié)構(gòu)圖
由于卷積可以看作是2個函數(shù)的加權(quán)疊加,所以卷積過程就是卷積核與特征圖上對應(yīng)部分的矩陣進(jìn)行相乘并加上偏置。
由圖2可知原始的輸入為3×3的矩陣,卷積核為2×2的矩陣,卷積核從輸入特征圖的左上角進(jìn)行卷積得到1×(-2)+2×0+(-1)×1+0×(-1)=-3,依次計算得到其余的值。由此可以得到卷積核矩陣與輸入的卷積計算公式為:
(1)
其中n為輸入的通道數(shù),h、w為卷積核矩陣的尺寸,i為第i個卷積核,b為偏置,f為激活函數(shù)。
圖2 卷積過程
圖3 最大池化和均值池化
全連接層在整個神經(jīng)網(wǎng)絡(luò)中起分類的作用。全連接層前一層是卷積層時,全連接層可以看做是h×w的全尺寸卷積,h和w為前一層輸出的大小。如果前一層是全連接層,則轉(zhuǎn)化為卷積核為1×1的全連接。
全連接層的參數(shù)數(shù)量可以占整個網(wǎng)絡(luò)的80%以上,所以全連接會導(dǎo)致嚴(yán)重的參數(shù)冗余問題,降低訓(xùn)練速度。并且全連接層為了實(shí)現(xiàn)全連接將特征值轉(zhuǎn)化為一個多維的數(shù)組,破壞了圖像的空間結(jié)構(gòu)信息,影響分類的準(zhǔn)確率。
Softmax層作為全連接層的分類層,將輸出轉(zhuǎn)變?yōu)楦怕史植?。假設(shè)原始的神經(jīng)網(wǎng)絡(luò)輸出為y1, y2, …, yn,那么經(jīng)過Softmax層的處理后輸出變?yōu)椋?/p>
(2)
從式(2)中可以知道,Softmax的輸出總和為1,一個單元值的增加就意味著其他單元值的減小,形成了一種贏者通吃的競爭機(jī)制。
其實(shí)在最新一些GoogleNet和ResNet中全連接層已經(jīng)被改進(jìn),轉(zhuǎn)而用全局平均池化代替。本文用空間金字塔池化(Spatial Pyramid Pooling, SPP)對全連接層進(jìn)行改進(jìn)。
空間金字塔池化最初是在文獻(xiàn)[2]中提出,最早應(yīng)用在圖像檢測中,目的是為了使輸入圖片的大小變得不固定,提高檢測精度??臻g金字塔特征提取的過程如圖4所示。
圖4 圖片劃分
當(dāng)輸入一張圖片時,分別用不同大小的網(wǎng)格去劃分圖片,在圖4中用4×4、2×2和1×1這3種不同的網(wǎng)格,最后共得到16+4+1=21個不同的小塊,每一個小塊中包含多個像素點(diǎn),然后從每一個小塊中提取一個特征,得到一個21維的特征向量。
本文針對所采用的花朵數(shù)據(jù)集,提出一種CNN-SPP的網(wǎng)絡(luò)結(jié)構(gòu),共29層。CNN-SPP采用1×3和3×1的卷積核代替3×3的卷積核,同時采用全零填充,保證輸出尺寸不變。1×3和3×1的卷積核不僅減少了訓(xùn)練權(quán)值參數(shù),而且增加了卷積層數(shù),提高了最終的分類準(zhǔn)確率。由于花朵圖片的分類需要依靠花朵的花瓣、花萼和花蕊等的紋理形狀,所以本文的池化層全部采用最大池化,有利于花朵紋理特征的提取。最后用空間金字塔最大池化代替全連接層的全連接部分,空間金字塔池化不僅減少了參數(shù)的數(shù)量,而且將每一個特征圖從多個不同的角度進(jìn)行了特征提取,再聚合,一定程度上保留了空間結(jié)構(gòu)信息,提高了魯棒性和模型的精度。
水塘干涸之后,紅樹林鳉魚通過改變身體結(jié)構(gòu)和新陳代謝來應(yīng)對“水外”生活。它們的鰓會轉(zhuǎn)而用來儲存水和各種營養(yǎng)物質(zhì),將含氮的廢棄物通過皮膚排到體外。一旦回到水中,一切功能便照舊運(yùn)作。
但是由于層數(shù)的增加,容易產(chǎn)生梯度彌散的問題,因此增加了一層BN批規(guī)范化層,將輸入進(jìn)行歸一化,公式如下:
(3)
(4)
其中μ、σ2為xi的期望和偽方差,通過歸一化將輸入拉回到均值為0方差為1的標(biāo)準(zhǔn)正態(tài)分布中,落入梯度比較敏感區(qū)域,從而解決了梯度消失的問題。這樣梯度變大了,網(wǎng)絡(luò)更新快,訓(xùn)練變快了。具體表現(xiàn)就是達(dá)到相同的正確率時迭代次數(shù)更少,迭代相同次數(shù)時正確率更高。
實(shí)驗(yàn)中輸入圖像為3通道彩色花朵圖像,原始輸入圖像的大小不需要固定,可以直接輸入。CNN-SPP網(wǎng)絡(luò)為了防止輸出值小于零時落入硬飽和區(qū),導(dǎo)致權(quán)重?zé)o法更新,使用ELU函數(shù)代替了Relu函數(shù)。模型結(jié)構(gòu)如表1所示。
表1 CNN-SPP網(wǎng)絡(luò)結(jié)構(gòu)
序號Layerkernel sizestridesoutput size1Input224×2242Convolution(1×3,3×1,64)×21224×2243Max pooling2×22112×1124Convolution(1×3,3×1,128)×21112×1125Max pooling2×2256×566Convolution(1×3,3×1,256)×3156×567Max pooling2×2228×288Convolution(1×3,3×1,512)×3128×289Max pooling2×2214×1410Convolution(1×3,3×1,256)×3114×1411Max pooling2×227×712Batch normalization7×713SPP(3×3,2×2,1×1)358414Fully connected358415Output102
目前花朵數(shù)據(jù)集使用較多的有牛津大學(xué)的Oxford flowers 102和Oxford flowers 17數(shù)據(jù)集,這2種數(shù)據(jù)集分別包含102種和17種花朵,Oxford flowers 102數(shù)據(jù)集共有8189張圖片,而Oxford flowers 17數(shù)據(jù)集僅含有1336張圖片,圖片較少。本文實(shí)驗(yàn)采用的是Oxford flowers 102數(shù)據(jù)集。數(shù)據(jù)集中部分花朵圖片如圖5所示。
圖5 部分Oxford flowers 102花朵圖片
對于花朵圖像分類,由于生長環(huán)境和拍攝角度的問題,不同種花朵之間可能會非常相似,而同種花朵又可能相差很大。并且通過圖片無法觀察花朵的大小和氣味等特征,只能根據(jù)花瓣、花萼和花蕊的外形區(qū)分,在分類時需要提取大量的特征,但花朵的特征細(xì)微復(fù)雜,所以花朵的分類不僅是熱點(diǎn)更是難點(diǎn)。
由于花朵數(shù)據(jù)集圖片較少,且網(wǎng)絡(luò)較深,為了減少過擬合,本文對花朵數(shù)據(jù)集進(jìn)行預(yù)處理,對花朵圖片分類主要依靠花朵圖片的紋理形狀,對花朵圖片進(jìn)行銳度和亮度的調(diào)整,使得花朵的紋理更加明顯,同時去除高斯噪聲,減少噪聲干擾。由于每一張圖片都會包含不相關(guān)的背景,為了減少背景的干擾,對圖片進(jìn)行隨機(jī)裁剪,盡量除去背景的影響,預(yù)處理前后圖片如圖6所示。
(a) 原圖
(b) 預(yù)處理后圖
實(shí)驗(yàn)中將CNN-SPP網(wǎng)絡(luò)與傳統(tǒng)VGG16網(wǎng)絡(luò)進(jìn)行了對比。隨機(jī)將所有的花朵數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)2部分,其中測試部分占10%,訓(xùn)練中每一批次包含16張圖片,共計迭代16000步。
從表2可以看出,采用空間金字塔池化的方法雖然在準(zhǔn)確率上僅提高了約1個百分點(diǎn),但是時間卻由原來的12.35 s每步下降到7.5 s左右,下降效果非常明顯。
表2 CNN-SPP網(wǎng)絡(luò)的實(shí)驗(yàn)結(jié)果
網(wǎng)絡(luò)類型準(zhǔn)確率/%每步平均時間/sVGG1685.7912.35CNN-SPP_max86.257.43CNN-SPP_average86.897.98
由于空間金字塔池化最大池化和平均池化類似,所以圖7中僅對空間金字塔最大池化和VGG16進(jìn)行了損失值的對比。可以看出,CNN-SPP網(wǎng)絡(luò)損失值下降迅速且平穩(wěn),而VGG16網(wǎng)絡(luò)隨著迭代的增加損失值發(fā)生了波動,且有增加的趨勢。
圖7 損失值對比圖
其實(shí)早在文獻(xiàn)[3]中就已經(jīng)提出了一種CNN-NiN網(wǎng)絡(luò),使用全局平均池化(global average pooling)對全連接層進(jìn)行改進(jìn),并且已經(jīng)在GoogleNet等網(wǎng)絡(luò)中應(yīng)用,所以本文實(shí)驗(yàn)也對比了CNN-NiN網(wǎng)絡(luò)。結(jié)果如表3所示。
表3 不同卷積網(wǎng)絡(luò)結(jié)果
網(wǎng)絡(luò)類型準(zhǔn)確率/%每步平均時間/sCNN-SPP83.257.43CNN-NiN_max73.515.34CNN-NiN_avg73.835.37
本文實(shí)驗(yàn)中進(jìn)行了空間金字塔均值池化、全局平均池化和最大池化的對比。從表3與圖8可以看出,雖然CNN-NiN網(wǎng)絡(luò)的訓(xùn)練時間每步5.3 s比CNN-SPP網(wǎng)絡(luò)的每步7.4 s快了2 s左右,但是準(zhǔn)確率上相差了近10個百分點(diǎn),相差較大,所以CNN-SPP網(wǎng)絡(luò)仍然是一種更好的網(wǎng)絡(luò)。
圖8 準(zhǔn)確率對比圖
隨著CNN的發(fā)展,全連接層的參數(shù)冗余和破壞數(shù)據(jù)空間結(jié)構(gòu)的缺點(diǎn)逐漸暴露,本文實(shí)驗(yàn)也證明了全連接層的問題。在本文的實(shí)驗(yàn)中,CNN-SPP網(wǎng)絡(luò)結(jié)構(gòu)不僅大幅度縮短了訓(xùn)練的時間,而且使訓(xùn)練的準(zhǔn)確率有所提升,達(dá)到86%以上,相信如果增大迭代步數(shù)準(zhǔn)確率還會再增加。相較于全連接層,空間金字塔池化不僅使參數(shù)減少,而且在一定程度上保留了數(shù)據(jù)的原有空間結(jié)構(gòu)信息。雖然在后面的實(shí)驗(yàn)中全局池化的訓(xùn)練速度要快于空間金字塔池化,但是在準(zhǔn)確率上相差較大,所以CNN-SPP網(wǎng)絡(luò)結(jié)構(gòu)仍然不失為一種良好的改進(jìn)方法。
考慮到迭代次數(shù)少和數(shù)據(jù)集較小的原因,網(wǎng)絡(luò)容易陷入過擬合的狀態(tài),所以在以后的實(shí)驗(yàn)中還要利用更大的數(shù)據(jù)集和更深的網(wǎng)絡(luò),增加迭代步數(shù),防止梯度彌散和過擬合,提高準(zhǔn)確率。