趙春霞
(青島職業(yè)技術學院,山東 青島 266555)
本文基于卷積神經(jīng)網(wǎng)絡的農(nóng)作物番茄葉片多種類病蟲害識別和診斷,提出一種對病害種類準確識別的卷積神經(jīng)網(wǎng)絡模型,用于對于不同的番茄葉片病害分類,實現(xiàn)番茄葉片病害自動診斷和識別。
深度學習是研究和解決在深度神經(jīng)網(wǎng)絡中表達數(shù)據(jù)特征的一種機器學習方法,其被廣泛應用于圖像分類和識別中,尤其在海量圖像的高級抽象特征自動提取方面效果很好,分類的精度和準確度都有所提升。
深度神經(jīng)網(wǎng)絡的內部網(wǎng)絡結構如圖1所示,Input layout表示輸入層、Hidden layout表示隱藏層、Out layout表示輸出層,其中小圓圈表示神經(jīng)元,每條直線代表上下層之間2個神經(jīng)元之間的連接,并且上一層與下一層之間是全部連接的,即數(shù)據(jù)從上一層的每個神經(jīng)元經(jīng)過加權運算后都輸出到下一層神經(jīng)元,上一層數(shù)據(jù)作為下一層的輸入。對于圖像而言,每個像素點就是輸入,每張圖像的寬度和高度的乘積,就是輸入的神經(jīng)元的個數(shù),這種全連接的方法在圖像分類上表現(xiàn)的數(shù)據(jù)量非常的大,訓練的速度慢,成本高,效率很低,并且圖像在計算過程中很難保留原有的特征,導致圖像分類和識別的準確率不高[1]。
圖1 DNN的基本結構
一個典型的卷積神經(jīng)網(wǎng)絡結構如圖2所示,主要包括輸入層、執(zhí)行卷積運算的卷積層、執(zhí)行池化采樣運算的池化層、全連接層和輸出結果層5部分。圖像分類中關注的是圖片中各個部分的邊緣和輪廓,而邊緣和輪廓只與相臨近的像素有關。卷積神經(jīng)網(wǎng)絡CNN通過卷積計算可以將復雜問題簡化,可以提取圖片的邊緣和輪廓,把大量參數(shù)降維成少量參數(shù),即使當圖像做旋轉,翻轉或者變形,截取部分圖片時,也能準確地識別出來是類似的圖像[2]。
圖2 典型的卷積神經(jīng)網(wǎng)絡基本結構
1.2.1 基本概念
1.2.1.1 卷積核(Kernel)
又稱濾波器,在對圖像數(shù)據(jù)進行卷積運算時,需要對圖像數(shù)據(jù)某個局部矩形區(qū)域進行加權求和,以獲取圖像的邊緣核輪廓特征,其中的權值就是卷積核。
1.2.1.2 卷積核大小(Kernel Size)
卷積核的矩形區(qū)域大小稱為卷積的大小,卷積核大小一般為奇數(shù)。如,一般使用二維卷積核3×3。
1.2.1.3 步長(Stride)
當進行卷積運算時,卷積核每次向右或向下移動的像素稱為步長,一般用Stride表示。如,Stride=2,表示進行卷積運算時,卷積核每次移動2個像素。
1.2.1.4 填充(Padding)
為了防止邊緣信息丟失,在卷積運算之前,在原圖像或圖像特征數(shù)據(jù)四周邊緣上填充一層或多層0像素。
1.2.1.5 卷積過程
卷積過程是把卷積核中的k×k個元素依次和圖像中相同區(qū)域對應的像素進行相乘求和運算后作為對應位置新的特征值,然后把該卷積核沿著圖像向右或向下平移步長Stride個像素,繼續(xù)計算新的特征值,直至完成整個圖像的計算[3]。
1.2.2 圖像的卷積運算
對于有顏色的RGB圖像,包含R、G、B 3個大小相同的圖層(通道),若卷積核為k×k,則卷積核的大小可表示為3×k×k,其中3表示3個通道。RGB圖像卷積運算方法是在圖像的R、G、B 3個通道上分別使用對應的k×k的加權相加得到結果再相加,得到一個二維卷積輸出結果。若有多個卷積核,可得到多個二維卷積輸出結果。2個通道的卷積運算過程如圖3所示。如,輸出56=(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)。
圖3 2個通道的卷積運算過程
目前卷積神經(jīng)網(wǎng)絡的典型架構有LeNet-5、AlexNet-8、VGG16-19、ResNet等。本文采用ResNet模型結構使用Pytorch框架構建ResNet18模型,并對農(nóng)作物番茄葉病蟲害類型數(shù)據(jù)集進行訓練,實現(xiàn)農(nóng)作物病蟲害自動診斷。
數(shù)據(jù)清洗是整個項目實施過程中第一個環(huán)節(jié),也是非常重要和不可缺少的環(huán)節(jié),模型訓練的效果和數(shù)據(jù)清洗的結果質量密切相關。數(shù)據(jù)清洗包括將命名不規(guī)范的圖像名,重構規(guī)范成統(tǒng)一的格式,如隨機字符串__類別名__圖像號.圖像格式;刪除尺寸不匹配的圖像;篩選噪聲圖像,將圖像像素全為0的噪聲圖像刪除;將同類別的圖像整理到同一文件夾下。
圖4 數(shù)據(jù)集清洗后的部分數(shù)據(jù)
對訓練集和測試集分別進行圖像預處理,主要包括圖片大小調整,將圖片的大小統(tǒng)一調整到ResNet模型架構的要求的尺寸,224×224;圖像增強例技術,如縮放、拉伸、翻轉、平移、對比對調整、加入噪點等,主要目的是讓圖像數(shù)據(jù)更適合AI模型進行處理,并擴充數(shù)據(jù)集,可以使用Pytorch中有一系列的數(shù)據(jù)增強函數(shù)來實現(xiàn);圖像歸一化處理,將圖像變化為模型能夠接受的數(shù)據(jù)類型及格式,實現(xiàn)歸一化,并且歸一化至[0.0,1.0]之間的值,只對訓練集進行歸一化處理;圖像標準化處理,對訓練集的圖像數(shù)據(jù)使用均值MEAN=[0.485,0.456,0.406]、標準差STD=[0.229,0.224,0.225],先減去均值再除以標準差進行標準化運算,通過標準化后,使數(shù)據(jù)更符合數(shù)據(jù)中心化分布規(guī)律,能增加模型的泛化能力[4]。
利用Pytorch中的ImageFolder方法加載數(shù)據(jù)集,加載訓練集將訓練集路徑和預處理及增強的方法作參數(shù)輸入,加載測試集并將測試集路徑和預處理方法作為參數(shù)輸入。
利用Pytorch中的DataLoader方法將加載好的訓練和測試數(shù)據(jù)集轉變成便于模型計算的數(shù)據(jù)類型Pytorch DataLoader。
2.4.1 ResNet18模型結構
具體見圖5,其中,“3×3conv,64”表示3×3大小的卷積核,深度為64。
圖5 ResNet18模型結構
2.4.2 模型設計結構說明
圖6 Basic Block殘差網(wǎng)絡結構
2.4.3 創(chuàng)建模型,保存參數(shù)
根據(jù)ResNet模型架構,使用Pytorch框架創(chuàng)建模型,并保存訓練模型的參數(shù)。
本文使用10000條訓練數(shù)據(jù)和10000條測試數(shù)據(jù)進行訓練和測試,進行10種分類。
2.5.1 模型訓練
整個模型的訓練過程包括2個階段。向前傳播階段。數(shù)據(jù)從模型的輸入層開始,從低層次向高層次依次計算的過程;在前向傳播過程中,輸入的圖形數(shù)據(jù)經(jīng)過模型處理后得出分類的結果,并通過損失函數(shù)計算輸出的結果與真實值之間的損失值。反向傳播階段。當模型的輸出結果與實際的預期值誤差較大時,則進行向后反向傳播。
具體流程:加載訓練數(shù)據(jù)集;遍歷數(shù)據(jù)集獲取圖像數(shù)據(jù)和對應的標簽;梯度歸零;前向傳播,使用模型計算輸出;計算損失率;反向傳播:將誤差從高層次向低層次依次返回,識別每個參數(shù)對誤差的影響程度,然后進行參數(shù)更新;更新參數(shù);保存損失值,便于統(tǒng)計每一個周期的損失值。
2.5.2 模型測試
訓練完訓練集后,用生成的模型Model參數(shù)來測試樣本。在測試之前,需要調用Model.eval()的方法,不改變網(wǎng)絡參數(shù)的權值,并且梯度不歸零,不進行反向傳播,使用生成的模型進行前向傳播計算出輸出值和預期值的損失值,根據(jù)損失值的變化來驗證模型的有效性,同時計算測試集中測試結果的準確率。
2.5.3 模型評估
用訓練數(shù)據(jù)集訓練神經(jīng)網(wǎng)絡,并使用測試集進行測試,并完成不同的多周期訓練,通過繪制訓練和測試的損失值變化曲線觀察模型訓練的效果,通過計算準確率來驗證模型。
分別設置訓練周期EPOCHS的值為5、10、20對模型進行訓練,得到的損失值變化曲線如圖7~9所示,可見訓練的損失值和測試的損失值隨著訓練周期EPOCHS的增加,都在變小,不存在過擬合的現(xiàn)象。在EPOCHS=10左右時,兩者的損失值變化已不大,但EPOCHS=20時的測試的準確率比EPOCHS=10時測試的準確率高3%。
圖7 EPOCHS=5 圖8 EPOCHS=10 圖9 EPOCHS=20
表1 不同訓練周期的訓練結果
搭建網(wǎng)絡應用,利用訓練好模型和模型權重,完成指定圖片的預測根據(jù)返回預測結果,進行實際的應用。
本文使用Pytorch搭建ResNet18模型,優(yōu)化了網(wǎng)絡結構和參數(shù),提高了模型的圖像分類性能,對病害種類準確識別的卷積神經(jīng)網(wǎng)絡模型進行多次測試,在農(nóng)作物番茄葉病蟲害數(shù)據(jù)集上訓練時取得了較小的誤差,在海量圖像的高級抽象特征自動提取測試時準確率較高,用于預測時分類效果較好,模型結構穩(wěn)定,該模型以及模型參數(shù)可用于實際的農(nóng)作物病蟲害種類的診斷。