王 庚,孫 盛
(1.廣州鐵路職業(yè)技術(shù)學院,廣東 廣州 510430;2.廣東工業(yè)大學 計算機學院,廣東 廣州 510000)
菜心為十字花科蕓薹屬,一、二年生草本植物,在長江以南的地區(qū)被廣泛種植和食用[1]。菜心是廣東省栽培面積最大的蔬菜品種,亦是出口港澳及東南亞國家的主要蔬菜品種[2]。作為廣泛種植的蔬菜,一旦發(fā)生病蟲害,就會給種植戶造成巨大的損失。病蟲害嚴重影響著作物的產(chǎn)量和質(zhì)量,病蟲害程度檢測可以在發(fā)生大規(guī)模蟲害前提供預警信息,可以為相關(guān)部門提前采取措施提供決策支持。
近年來,越來越多圖像分類算法技術(shù)應用于農(nóng)作物病蟲害的程度檢測中。如:吳華瑞提出了一種基于深度殘差網(wǎng)絡的番茄葉片病害識別方法[3],馬浚誠等設(shè)計了一種溫室黃瓜霜霉病診斷系統(tǒng)[4],丁小奇針對大白菜和馬鈴薯葉片,構(gòu)建了基于特征檢測的蔬菜葉片病蟲害識別模型[5]。在圖像分類的算法中,比較經(jīng)典的算法有k 最近鄰算法(KNN)、支持向量機(SVM)、BP 神經(jīng)網(wǎng)絡[6]。但是,隨著近年來深度學習及遷移學習等新的技術(shù)的迅速發(fā)展;深度學習模型,例如:卷積神經(jīng)網(wǎng)路,在分類任務中具備更加優(yōu)異的性能。因此,本文采用LeNet-5 分類網(wǎng)絡設(shè)計并實現(xiàn)一個菜心病害程度識別算法。
通過前期調(diào)研和向蔬菜基地農(nóng)民的咨詢,于2019 年3 月至12 月期間,進行了3 次集中圖像采集。共采集了1 200 張圖像;采集設(shè)備相關(guān)信息見表1。
表1 菜心圖像采集信息
在數(shù)據(jù)集中存在的病害因素基本上都是蟲害。根據(jù)與農(nóng)民的咨詢,按菜心的蟲害程度分為三類,分別是輕度(mild,包括無?。?、中度(moderate)和重度(severe)。輕度:葉片蟲洞低于10 個或者沒有;中度:葉片蟲洞低于20 個但大于10 個;或葉片蟲洞大于10 個,但蟲洞面積占葉片面積比重略大。重度:葉片蟲洞大于20 個;或葉片蟲洞小于20個,但蟲洞面積占葉片面積比重較大;或葉片蟲洞面積占葉片面積比重特別大。病害程度分類示意圖見圖1。
圖1 菜心病害程度分類(輕度、中度、重度)示意圖
通過人工判別制作數(shù)據(jù)集,同時,為了降低計算復雜度,將圖像數(shù)據(jù)從2 448*2 448 裁剪成256*256。輕度病害圖像樣本共計400 個,見圖2。
圖2 菜心病害圖像(輕度)數(shù)據(jù)集
步驟1:圖像裁剪。在拍攝的圖像中,有很多圖像樣本包含過多葉片,會影響數(shù)據(jù)有效特征的數(shù)量,因此,需要人工進行裁剪,如圖3。
圖3 圖像樣本裁剪
步驟2:訓練集分批。本文算法是基于TensorFlow平臺實現(xiàn),而在TensorFlow 中,數(shù)據(jù)的計算格式是以批(batch)的形式進行訓練,而批的大?。╞atch_size)可以自由定義。在TensorFlow 中,整合數(shù)據(jù)的方式大概有兩種,一種是將數(shù)據(jù)處理并打包成tfrecord 格式,另一種將數(shù)據(jù)處理并打包成Dataset 類的格式。前者是整理成一個文件,并放置在硬盤中,后者則是在訓練的過程中生成Dataset 類的實例,所以后者整合的數(shù)據(jù)是存放在內(nèi)存中的。因此,如果數(shù)據(jù)集龐大的話,應該運用tfrecord 的方式,如果數(shù)據(jù)集不大的話,可用Dataset 的實例。由于本文數(shù)據(jù)集規(guī)模較小,因此采用Dataset 實例。
同時,還可調(diào)用tf.image.per image standardization()方法對圖像像素數(shù)值進行標準化處理。當數(shù)據(jù)集被整合成Dataset 的實例后,可以對其進行順序隨機處理,然后再讀取生成的Dataset,并分批送進模型進行訓練。
步驟3:數(shù)據(jù)擴增。在深度學習模型的訓練過程中,通常會采用數(shù)據(jù)擴增策略,完成數(shù)據(jù)集的樣本數(shù)量擴充,使得模型的擬合性能更好。常用的方式有:翻轉(zhuǎn)、旋轉(zhuǎn)、縮放比例、裁剪和對比度調(diào)整等。本文采用隨機調(diào)整圖片對比度的方式來擴充數(shù)據(jù)集。
在基于卷積神經(jīng)網(wǎng)絡模型的分類算法中,最經(jīng)典的模型有LeNet-5、VGG-16、GoogLeNet 等。VGG-16 和GoogLeNet 是ImageNet 挑 戰(zhàn) 賽(ILSVRC14)的第一名和第二名。VGG-16 網(wǎng)絡的一大特點是通過3×3 濾波器的組合與堆疊,在輸入域內(nèi)提取出更多細小的特征。通過構(gòu)建和組合多個3×3 卷積核,可以獲得5×5 或7×7 卷積核一樣的計算效果,連續(xù)幾個結(jié)構(gòu)較小的卷積核比單個結(jié)構(gòu)大的卷積核可能具有更好的非線性效果[7]。GoogLeNet 的網(wǎng)絡深度有22 層,但模型參數(shù)比AlexNet 和VGG 小很多,GoogleNet 參數(shù)為500 萬個,該模型在AlexNet 的基礎(chǔ)上引入 Inception 結(jié)構(gòu)代替了單純的卷積+激活的經(jīng)典組合模式。全連接層全部替換為簡單的全局平均 pooling,使得網(wǎng)絡參數(shù)量更少。升網(wǎng)絡性能最直接的辦法就是增加網(wǎng)絡深度和寬度,深度指網(wǎng)絡層次數(shù)量、寬度指神經(jīng)元數(shù)量[8]。在實際應用中,VGG-16 和GoogLeNet 有以下特點:1)參數(shù)過多,在模型的訓練容易產(chǎn)生過擬合;2)巨大的網(wǎng)絡參數(shù)量,對于計算和存儲資源要求較高,給用戶帶來較大的硬件投入成本負擔;3)較深的網(wǎng)絡層數(shù)容易出現(xiàn)梯度彌散。而LeNet-5 網(wǎng)絡大約僅有6 萬個參數(shù),屬于規(guī)模較小的網(wǎng)絡,其訓練過程的復雜度遠遠低于VGG-16 和GoogLeNet,已經(jīng)足夠處理本文待解決的問題,因此采用了LeNet-5 網(wǎng)絡模型完成菜心病害程度分類任務[9]。
根據(jù)LeNet-5 的原始模型,首先實現(xiàn)一個簡單的分類網(wǎng)絡,包含兩組卷積和池化組合,兩層全連接層和一個softmax 分類層。如果輸入為[n,256,256,3]的圖像矩陣,其中n是batch size,256 表示訓練樣本像素為256×256,3 表示數(shù)據(jù)是三通道的rgb 圖像;第一個卷積層含有64 個大小為3×3×3 的濾波器,步長為1,padding 對邊緣補0,該層產(chǎn)生的輸出為[n,256,256,64]的矩陣。接著,此卷積層的輸出進入第一個池化層(kernel 為3×3,步長為2,padding也對邊緣補0)后,產(chǎn)生新的輸出為[n,128,128,64]。同理,再經(jīng)過一次卷積(32 個3×3×64 的濾波器,步長為1,padding 取0)和池化后,可以得到輸出為[n,64,64,32]的矩陣。隨后,矩陣數(shù)據(jù)進入第一次全連接層,權(quán)重的維度為單個像素矩陣平整化的大小,此處即為[131 072,128],矩陣數(shù)據(jù)將平整化,從而得到[n,128]的矩陣。再經(jīng)歷一次全連接層[128,64]進行降維,得到[n,64]的矩陣。最后,通過softmax 層實現(xiàn)線性回歸,計算出每一類的得分,根據(jù)菜心的病害程度有三個分類,所以這個層輸出為[n,3],即輸出為n個三種類別的概率分布。網(wǎng)絡的細節(jié)見圖4。在這個架構(gòu)中,dropout 的概率為0.5,學習率為0.000 1,激活函數(shù)為ReLU 函數(shù),同時在池化后執(zhí)行l(wèi)rn()操作,優(yōu)化器使用的Adam,訓練集的batch size 為25。網(wǎng)絡模型結(jié)構(gòu)見圖4。
圖4 LeNet-5 網(wǎng)絡結(jié)構(gòu)模型
同時采用局部響應歸一化(LRN,Local Response Normalization)技術(shù),對局部神經(jīng)元的活動創(chuàng)建競爭機制,使其中響應比較大的數(shù)值變得相對更大,通過抑制其他反饋較小的神經(jīng)元,增強模型的泛化能力。ReLU 函數(shù)所具有的線性及非線性性質(zhì)使得不需要輸入歸一化來防止達到飽和,但是,局部歸一化方案可提高網(wǎng)絡的泛化能力[10]。在上述參數(shù)設(shè)定的情況下,將網(wǎng)絡模型結(jié)構(gòu)記為Model1,分類的精確度可以從0.35 左右升至0.50~0.55 之間,但是訓練很快就出現(xiàn)了過擬合的現(xiàn)象,如圖5a 所示。
為了減弱過擬合現(xiàn)象,必須對網(wǎng)絡模型進行調(diào)優(yōu)。不同的網(wǎng)絡結(jié)構(gòu)在訓練中可能產(chǎn)生不同的過擬合,如果采取取平均操作,可能讓一些“相反的”擬合現(xiàn)象抵消。本文采取了Dropout 策略來減弱過擬合,整個dropout 過程,本質(zhì)上相當于對很多個不同的網(wǎng)絡結(jié)構(gòu)取平均。在訓練數(shù)據(jù)的過程中,本文設(shè)定的dropout 概率為0.5,將一部分中間層的單元暫時從網(wǎng)絡中關(guān)閉,通過把該單元的輸出設(shè)置為0,使其不工作,來避免擬合。DropConnect 與Dropout 不同的地方,是在訓練神經(jīng)網(wǎng)絡模型過程中,它不是改變隱層節(jié)點的輸出數(shù)值,而是將節(jié)點中的輸入值,這種策略會將每個與節(jié)點相連的輸入權(quán)值以1-p 的概率變成0。DropConnect 實質(zhì)上可以去除復雜模型中的大量冗余結(jié)構(gòu),會增強模型的泛化能力。
此外,學習率作為另外一個重要的超參數(shù),控制了網(wǎng)絡模型訓練和優(yōu)化的速度。如果學習率數(shù)值太小,梯度下降的速度會變得很慢,使得模型收斂的時間變長;但是,如果學習率過大,梯度下降的步長太大,又可能會導致模型訓練跳過最優(yōu)解。在梯度下降的過程中,優(yōu)化器可以改變學習率,同時也可以人為的設(shè)定學習率。因此,有必要對原始模型參數(shù)進行調(diào)整,通過改變學習率和網(wǎng)絡層數(shù),得到一個新的網(wǎng)絡:記為Model2。Model2 是在Model1的基礎(chǔ)上,增加了兩組卷積和池化層,即四組卷積和池化層。通過改變網(wǎng)絡結(jié)構(gòu),分類的精度從0.35左右逐步升至0.60~0.65 之間,驗證精度有較大提升,見圖5b 所示。
圖5 LeNet-5 網(wǎng)絡模型訓練過程
系統(tǒng)開發(fā)采用了Python 語言,網(wǎng)絡模型的搭建和預測都是基于TensorFlow。保存訓練模型有兩種方式,分別是pb 文件或ckpt 文件。由于pb 文件具有語言獨立性,因此采用pb 文件作為模型的保存方式。此外,其他語言和深度學習框架都可以讀取pb文件,訓練好的pb 文件還可以遷移到其他框架。以pb 文件形式保存的模型參數(shù),其相關(guān)變量為固定的,模型體積得到了大幅的縮小。
界面開發(fā)采用的是跨平臺GUI 工具包PyQt。PyQT 開發(fā)的界面可以在Qt 支持的各個平臺上運行,包括三大桌面系統(tǒng)Windows,Mac OS 和Linux 以及兩個移動系統(tǒng)iOS 和Android[10]。因而,本系統(tǒng)界面可以在多種操作系統(tǒng)環(huán)境下運行。
通過讀取待預測的菜心圖像,選擇已保存的訓練好的模型的pb 文件進行預測,返回分類的結(jié)果和對應概率分布。用戶選擇任意的菜心圖像后,可以自行選擇已訓練好的網(wǎng)絡模型,然后提交給pb 文件對應的網(wǎng)絡模型中進行預測;為了方便用戶靈活選擇和實驗,系統(tǒng)預先設(shè)置了4 種模型參數(shù)配置:pb_1,pb_2,pb_3,pb_4;同時,也可以支持用戶進行二次開發(fā),根據(jù)需求自行訓練模型。預測結(jié)束后,顯示結(jié)果以及各分類的概率,對應概率最大的那個類別就是菜心樣本對應的病害程度。詳細過程見圖6。在圖6 中,用戶選擇的樣本為一個病害程度嚴重的菜心圖像,預測結(jié)果severe 的概率最大,為99.029 3%,因此該菜心的病害程度為嚴重。
圖6 系統(tǒng)預測界面及結(jié)果輸出
運用卷積神經(jīng)網(wǎng)絡的模型,構(gòu)建一個小規(guī)模的菜心圖像訓練集,將菜心病害程度劃分成三個類別。針對收集數(shù)據(jù)樣本有限的問題,采用數(shù)據(jù)擴增技術(shù)完成訓練集的擴充。在得到初步結(jié)果后,完成模型訓練和參數(shù)調(diào)優(yōu);最后,結(jié)合PyQT 技術(shù)完成一個跨平臺的用戶界面。由于時間和經(jīng)濟成本的限制,圖像樣本訓練集數(shù)量仍有待進一步擴增;后續(xù)研究中,可以繼續(xù)擴充圖像樣本庫;同時,結(jié)合農(nóng)業(yè)專家的知識,在移動互聯(lián)網(wǎng)環(huán)境下,給菜心種植農(nóng)戶提供精確的病害鑒別服務,可以較早的采取病害處理措施,降低病害導致的經(jīng)濟損失。