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