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