李曉紅,吳仲華,劉海秋,馬慧敏
(安徽農(nóng)業(yè)大學(xué)信息與計(jì)算機(jī)學(xué)院,安徽 合肥 230036)
能夠?qū)⒍嗳庵参镎_分類是研究多肉植物的基礎(chǔ)和前提,對(duì)探索多肉植物系統(tǒng)進(jìn)化規(guī)律和保護(hù)多肉植物多樣性具有深遠(yuǎn)的意義和影響。基于機(jī)器視覺(jué)技術(shù),利用傳統(tǒng)的圖像特征對(duì)植物葉片進(jìn)行分類已有很多的研究,如2014年董紅霞等人[1]利用形狀與紋理特征對(duì)植物葉片進(jìn)行分類;2017年吳笑鑫等人[2]以支持向量機(jī)(SVM)算法為基礎(chǔ)構(gòu)建分類器,基于多特征融合研究花卉種類識(shí)別。傳統(tǒng)的分類方法比較復(fù)雜,大都依靠人為地選取特征,很難得出高精確度。
近幾年,涌現(xiàn)出了許許多多圖像識(shí)別效果非常好的深度神經(jīng)網(wǎng)絡(luò)模型,比如VGG Net[3]、GoogLeNet[4]、ResNet[5]等,它們?cè)贗LSVRC比賽中都具有超高的識(shí)別精度。卷積神經(jīng)網(wǎng)絡(luò)已廣泛應(yīng)用于手寫(xiě)漢字識(shí)別[6]、人臉識(shí)別[7]、語(yǔ)音識(shí)別[8]等領(lǐng)域。目前,隨著機(jī)器學(xué)習(xí)技術(shù)不斷成熟與完善,深度學(xué)習(xí)技術(shù)在圖像識(shí)別方面得到了很好的應(yīng)用,利用深度學(xué)習(xí)技術(shù)對(duì)植物和花卉的特征自動(dòng)提取與分類已經(jīng)逐步展開(kāi)。劉德建[9]將深度學(xué)習(xí)技術(shù)引入花卉識(shí)別應(yīng)用領(lǐng)域,針對(duì)收集的116類花卉圖像,總共79544張圖片,利用LeNet網(wǎng)絡(luò)進(jìn)行訓(xùn)練和測(cè)試,得到了約80%的Top5識(shí)別精度。傅弘等[10]利用神經(jīng)網(wǎng)絡(luò)準(zhǔn)確地識(shí)別出葉脈圖像。沈萍等[11]用含有多個(gè)隱層的深度卷積神經(jīng)網(wǎng)絡(luò)識(shí)別花卉,結(jié)果與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)相比提升了10%以上的準(zhǔn)確率。深度學(xué)習(xí)技術(shù)在花卉與植物葉片識(shí)別方面已經(jīng)有很好的效果,然而在多肉植物種類的識(shí)別方面缺少相關(guān)的研究。對(duì)于在外形上具有極大相似性的多肉植物,人眼區(qū)分尚且具有一定的難度,傳統(tǒng)的分類方法更是不易。本文分別以蓮科和具有高相似度的玉露科各4個(gè)品種為對(duì)象,研究基于卷積神經(jīng)網(wǎng)絡(luò)的多肉植物種類識(shí)別,以實(shí)現(xiàn)對(duì)多肉植物的快速準(zhǔn)確分類。
用相機(jī)在花卉市場(chǎng)、溫室大棚以及室內(nèi)三個(gè)場(chǎng)景對(duì)8類多肉植物進(jìn)行圖像采集,構(gòu)建數(shù)據(jù)集。每種多肉植物采集200張圖像,蓮和玉露2個(gè)數(shù)據(jù)集分別為800張。部分多肉植物圖像如圖1所示 ,圖像采集的條件包括不同的背景環(huán)境,不同的光照以及多肉植物的不同部位,使整個(gè)圖像數(shù)據(jù)集更加充分完備,防止訓(xùn)練中過(guò)擬合現(xiàn)象的發(fā)生。
圖1 8種多肉植物圖像
利用CNN模型對(duì)多肉植物進(jìn)行類型識(shí)別,最大的優(yōu)點(diǎn)就是可以自動(dòng)提取特征,不需要人工手動(dòng)提取。但是CNN模型需要大量的數(shù)據(jù)集進(jìn)行特征的自動(dòng)學(xué)習(xí),所以需要進(jìn)行圖像增強(qiáng),擴(kuò)充數(shù)據(jù)集。數(shù)據(jù)集擴(kuò)充有助于增加數(shù)據(jù)的多樣性,增強(qiáng)CNN模型的魯棒性,避免過(guò)擬合現(xiàn)象的發(fā)生。
圖像增強(qiáng)的方法主要是分別對(duì)相機(jī)拍攝的800張圖片隨機(jī)進(jìn)行上下翻轉(zhuǎn)、左右翻轉(zhuǎn)以及圖像亮度的調(diào)整。首先使用tf.image.decode_jpeg()函數(shù)對(duì)原始圖像進(jìn)行解碼操作,而后使用tf.image.random_flip_left_right()函數(shù)對(duì)上述解碼圖像隨機(jī)左右翻轉(zhuǎn)。因大量輸出會(huì)產(chǎn)生過(guò)多相同圖片,產(chǎn)生過(guò)擬合現(xiàn)象,影響測(cè)試精度,所以圖像少量輸出。使用tf.image.random_flip_up_down()函數(shù)對(duì)上述解碼圖像隨機(jī)上下翻轉(zhuǎn),同樣圖像少量輸出。使用tf.image.random_brightness()函數(shù)對(duì)解碼圖像以及上述翻轉(zhuǎn)后的圖像進(jìn)行隨機(jī)亮度調(diào)整,max_delta=0.4,輸出圖像。最終兩數(shù)據(jù)集分別擴(kuò)充為2400張圖像,圖2為選取的草玉露圖像擴(kuò)充過(guò)程。同時(shí),為了增加計(jì)算機(jī)的計(jì)算速度,將圖像大小進(jìn)行歸一化處理,作為CNN模型的輸入。
圖2 草玉露圖像擴(kuò)充過(guò)程
本研究采用的CNN模型基本結(jié)構(gòu)如圖3所示。卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)由輸入層、卷積層和池化層、全連接層及輸出層組成。
圖3 CNN模型基本結(jié)構(gòu)
2.1.1 輸入層。本項(xiàng)目原始圖像為3通道RGB圖像,為了加快計(jì)算速度,將圖像大小做歸一化處理,輸入到網(wǎng)絡(luò)中。
2.1.2 卷積層。卷積操作是用預(yù)先設(shè)置好大小的卷積核與特征圖進(jìn)行卷積求和,達(dá)到特征提取的作用。卷積層的計(jì)算公式為[12]:
yl=f(wl?xl-1+bl)
(1)
其中yl為當(dāng)前層輸出特征圖,f(·)表示激活函數(shù),wl表示當(dāng)前層與上一層輸出特征圖的卷積核;xl-1為上一層輸出特征圖;bl為當(dāng)前層的偏置。試驗(yàn)中采用ReLu函數(shù),可增加網(wǎng)絡(luò)的稀疏性,加速網(wǎng)絡(luò)收斂,其表達(dá)式為:
f(x)=max(0,x)
(2)
2.1.3 池化層。池化層分為平均池化與最大池化兩種,池化操作的主要目的是降低整個(gè)區(qū)域中的參數(shù),將某個(gè)區(qū)域內(nèi)的統(tǒng)計(jì)特征作為該區(qū)域特征的代表,同時(shí)該參數(shù)還能夠表示該區(qū)域的具體特征。池化過(guò)程計(jì)算公式為[12]:
al=f(βldown(yl-1)+bl)
(3)
al為當(dāng)前層池化層輸出,f(·)表示ReLu激活函數(shù),βl為乘性偏置,down(·)表示下采樣函數(shù),yl-1為上一層卷積層輸出,bl為加性偏置。
2.1.4 全連接層。將之前池化層的輸出轉(zhuǎn)化成一維數(shù)組,具有分類作用,便于后面的輸出。全連接層每個(gè)神經(jīng)元的輸出為:
h(x)=f(wTx+b)
(4)
h(x)表示神經(jīng)元的輸出值,f(·)表示ReLu激活函數(shù),w表示權(quán)值向量,x表示輸入特征向量,b表示偏置。
2.1.5 輸出層。在本實(shí)驗(yàn)中最終輸出4個(gè)分類結(jié)果。
本實(shí)驗(yàn)在卷積神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練中采用隨機(jī)梯度下降算法,通過(guò)不斷降低損失函數(shù)的函數(shù)值來(lái)學(xué)習(xí)建立后的所述卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)[12]。
其中損失函數(shù)表示為:
(1-yi)log(1-y_predictedi))
(5)
式中,yi為真實(shí)的標(biāo)簽值,y-predictedi為預(yù)測(cè)的標(biāo)簽值。
訓(xùn)練準(zhǔn)確率表示為:
(6)
式中,n為正確的預(yù)測(cè)數(shù),N為訓(xùn)練樣本總數(shù)。
卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練時(shí)采用的隨機(jī)梯度下降法是指每一次迭代中使用所述樣本進(jìn)行學(xué)習(xí)參數(shù)和更新,每一代的學(xué)習(xí)參數(shù)和更新可表示為:
Wt+1=Wt-ηtgt
(7)
gt=ΔJis(Wt;X(is);X(is)),is∈{1,2,…,n}
(8)
式中,t為迭代的次數(shù),Wt為t時(shí)刻的模型參數(shù),ηt為學(xué)習(xí)率,J(W)為代價(jià)函數(shù),is表示隨機(jī)選擇的一個(gè)梯度方向。
本實(shí)驗(yàn)中設(shè)計(jì)了兩種卷積神經(jīng)網(wǎng)絡(luò)模型:模型M1與模型M2,分別對(duì)兩種數(shù)據(jù)集進(jìn)行訓(xùn)練并且測(cè)試。
模型M1總體架構(gòu)為(卷積層+最大池化層)×2+全連接層×2+分類輸出。卷積層C1使用64個(gè)3×3×3的卷積核與64×64×3的原始圖像進(jìn)行卷積操作,卷積核步長(zhǎng)為1,填充為“same”,激活函數(shù)ReLU(),產(chǎn)生64×64×64的圖像,經(jīng)過(guò)3×3最大池化,步長(zhǎng)為2,填充為“same”,得到64×64×64的圖像。卷積層C2使用16個(gè)3×3×64的卷積核與64×64×64的圖像進(jìn)行卷積操作,卷積核步長(zhǎng)為1,填充為“same”,激活函數(shù)ReLU(),產(chǎn)生64×64×16的圖像,經(jīng)過(guò)3×3最大池化,步長(zhǎng)為1,填充為“same”,得到64×64×16的圖像。全連接層FC3,用128個(gè)神經(jīng)元將池化層的輸出轉(zhuǎn)化成一行,并通過(guò)激活函數(shù)ReLU(),全連接層FC4也為128個(gè)神經(jīng)元,最后Softmax回歸輸出4類。表1為模型M1的參數(shù)變化過(guò)程。
表1 M1參數(shù)變化過(guò)程
模型M2總體架構(gòu)為(卷積層+最大池化層)×4+全連接層×3+分類輸出。卷積層C1使用32個(gè)5×5×3的卷積核與100×100×3的原始圖像進(jìn)行卷積操作,卷積核步長(zhǎng)為1,填充為“same”,激活函數(shù)ReLU(),產(chǎn)生100×100×32的圖像,經(jīng)過(guò)2×2最大池化,步長(zhǎng)為2,填充為“valid”,得到50×50×32的圖像。卷積層C2使用64個(gè)5×5×32的卷積核與50×50×32的圖像進(jìn)行卷積操作,卷積核步長(zhǎng)為1,填充為“same”,激活函數(shù)ReLU(),產(chǎn)生50×50×64的圖像,經(jīng)過(guò)2×2最大池化,步長(zhǎng)為2,填充為“valid”,得到25×25×64的圖像。卷積層C3使用128個(gè)3×3×64的卷積核與25×25×64的圖像進(jìn)行卷積操作,卷積核步長(zhǎng)為1,填充為“same”,激活函數(shù)ReLU(),產(chǎn)生25×25×128的圖像,經(jīng)過(guò)2×2最大池化,步長(zhǎng)為2,填充為“valid”,得到12×12×128的圖像。卷積層C4使用128個(gè)3×3×128的卷積核與12×12×128的圖像進(jìn)行卷積操作,卷積核步長(zhǎng)為1,填充為“same”,激活函數(shù)ReLU(),產(chǎn)生12×12×128的圖像,經(jīng)過(guò)2×2最大池化,步長(zhǎng)為2,填充為“valid”,得到6×6×128的圖像。全連接層FC5用1024個(gè)神經(jīng)元將池化層的輸出轉(zhuǎn)化成一行,全連接層FC6為512個(gè)神經(jīng)元,全連接層FC7為4個(gè)神經(jīng)元,最終分類輸出4類。表2 為模型M2的參數(shù)變化過(guò)程。
表2 M2參數(shù)變化過(guò)程
實(shí)驗(yàn)中有兩種數(shù)據(jù)集,分別為蓮與玉露。經(jīng)圖像增強(qiáng)后,兩種數(shù)據(jù)集各有4類,每類為600張圖像,共2400張圖像。實(shí)驗(yàn)過(guò)程中將數(shù)據(jù)集按4∶1分為訓(xùn)練集與測(cè)試集,表3與表4分別為兩種數(shù)據(jù)集具體分布情況。
表3 蓮數(shù)據(jù)集分布
表4 玉露數(shù)據(jù)集分布
實(shí)驗(yàn)中設(shè)置兩模型的最佳學(xué)習(xí)率,M1學(xué)習(xí)率為0.0001,M2學(xué)習(xí)率為0.001。用兩模型分別對(duì)蓮與玉露數(shù)據(jù)集訓(xùn)練2000步,每隔10步記錄一次損失值與訓(xùn)練精度,CNN網(wǎng)絡(luò)中具體計(jì)算為公式(5)、公式(6),將得到的數(shù)據(jù)用origin軟件進(jìn)行處理,圖4為兩模型訓(xùn)練損失值,圖5為兩模型訓(xùn)練精度曲線。
圖4 訓(xùn)練損失值變化曲線
圖5 訓(xùn)練精度變化曲線
從圖4和圖5可以看出,對(duì)于蓮和玉露兩個(gè)品種,在M1和M2模型中,蓮的損失值比玉露更快衰減到0,蓮的訓(xùn)練精度比玉露更快接近1。由于玉露品種具有更高的相似性,因此比蓮品種更難達(dá)到穩(wěn)定狀態(tài)。對(duì)比M1和M2兩個(gè)模型,由于M2比M1多了兩層卷積層和一層全連接層,能夠更好地提取圖像特征,因此M2比M1具有更好的收斂性,且狀態(tài)更穩(wěn)定,不容易產(chǎn)生波動(dòng)。
實(shí)驗(yàn)中得出M1和M2在測(cè)試集上最終的測(cè)試精度如表5所示,由于玉露品種具有更高的相似性,因此在兩模型中的測(cè)試精度要低于蓮。同時(shí),由于M2具有更深的卷積層數(shù),能夠更好地提取圖像特征,因此在兩數(shù)據(jù)集上的測(cè)試精度要高于M1。
表5 測(cè)試精度
本實(shí)驗(yàn)中設(shè)置了兩種卷積神經(jīng)網(wǎng)絡(luò)模型M1與M2,對(duì)多肉植物蓮與玉露的兩種數(shù)據(jù)集,都具有較高的訓(xùn)練與測(cè)試精度,符合常規(guī)的圖像識(shí)別要求。卷積神經(jīng)網(wǎng)絡(luò)自動(dòng)識(shí)別圖像特征,避免了傳統(tǒng)手動(dòng)標(biāo)記復(fù)雜、耗時(shí)等缺點(diǎn),具有較大的優(yōu)越性。同時(shí)得出結(jié)論:對(duì)于多肉植物,較深的網(wǎng)絡(luò)具有更好的圖像識(shí)別效果。由于本實(shí)驗(yàn)中數(shù)據(jù)集數(shù)量的限制,測(cè)試精度依然有待提高。下一步筆者將采集更多的多肉植物圖像,加快CNN模型訓(xùn)練速度,提高測(cè)試精度,同時(shí)實(shí)現(xiàn)更多多肉植物種類的識(shí)別。