李哲 潘維 張赟
(江蘇同德信息有限公司 江蘇省連云港市 210000)
過去農民通常依靠視覺判斷和一些肉眼可見的癥狀來判斷作物是否生病,例如看葉片是否枯萎、發黃發褐等呈現一定的規律,但是當作物出現上述顯著的癥狀時,通常意味著疾病已經發生;而且病蟲害種類繁多、情況復雜,即便人類專家也難以覆蓋全部情況。基于深度卷積神經網絡的圖像識別能力和泛化性,本文設計了一套深度卷積神經網絡來實現針對中草藥飲片圖像的品類識別。
在圖像識別領域,CNN(卷積神經網絡)已經成為一種高準確率的識別方法,可以提取圖像的高層次表達。同時基于端到端(end-to-end)的卷積神經學習避免了人工規則的中間步驟,不再需求傳統特征工程提取圖像特征和進行特定的特征選取。基于端到端的方法以圖片直接作為輸入,圖片中的每個像素都直接作為輸入值,不再局限于特定的應用和繁瑣的特征工程,可以快速方便的訓練成應用模型。
采集真實世界的10 多種植物共38 多種常見病蟲害情況下植物葉子的原始圖像,通過不同角度、光線針對不同藥材飲片進行大量的拍攝以及線上爬蟲搜索的方式得到大量原始圖片,然后每種藥材飲片根據檢索及篩去重復,每張圖片中包含飲片的數量、背景復雜程度、分辨度、大小不限。
對圖片使用隨機剪裁、翻轉(左右上下)、顏色抖動(color jitter)、旋轉、平移、縮放等方式,對圖片進行不同維度的修改。將這些圖像增強后的植物病蟲害圖片歸納整理,本系統中建立了數量為20 萬多的圖片數據集。
3.2.1 卷積層
通過卷積操作對輸入圖像進行降維和特征抽取,卷積運算是線性操作,而神經網絡要擬合的是非線性的函數,因此需要加上激活函數。前部卷積層可以捕捉圖像局部、細節信息,即輸出圖像的每個像素(Activation 激活值)只是感受到輸入圖像很小范圍數值進行計算的結果。后面的卷積層感受野逐層加大,用于捕獲圖像更復雜,更抽象的信息。經過多個卷積層的運算,最后得到圖像在各個不同尺度的抽象表示。同時“不全連接,參數共享”的特點大大降低了網絡參數,保證了網絡的稀疏性,防止過擬合。
3.2.2 池化層
池化的做法是對圖像的某一個區域用一個值代替,如最大值或平均值。如果采用最大值,叫做 max 池化;如果采用均值,叫做均值池化。通過池化層降維,縮減模型大小,提高計算速度,同時降低過擬合概率,提升特征提取魯棒性。
3.2.3 全連接層
全連接就是個矩陣乘法,相當于一個特征空間變換,可以把前面所有有用的信息提取整合。再加上激活函數的非線性映射,多層全連接層理論上可以模擬任何非線性變換。全連接可以把高維變到低維,同時把有用的信息保留下來。損失函數

圖1
3.2.4 優化器
優化器是通過訓練優化參數,來最小化(最大化)損失函數。損失函數是用來計算測試集中目標值Y 的真實值和預測值的偏差程度。為了使模型輸出逼近或達到最優值,我們需要用各種優化策略和算法,來更新和計算影響模型訓練和模型輸出的網絡參數。在本系統中采用AdamOptimizer 來進行優化,具體公式如下:

3.2.5 隨機失活(Dropout)
隨機失活(dropout)是對具有神經網絡進行優化的方法,在學習過程中通過將隱含層的部分權重隨機歸零,讓某個神經元的激活值以一定的概率p 停止工作,這樣可以使模型泛化性更強,因為它不會太依賴某些局部的特征。Dropout 可以比較有效的緩解過擬合的發生。
3.2.6 初始化
初始化會對深度神經網絡模型的訓練時間和收斂性產生重大影響。簡單的初始化方法可以加速訓練,為了使網絡中的信息更好的傳遞,每一層的特征的方差應該盡可能相等。
初始化值過大會導致每層的輸入快速增長。如果每個權重的初始化值都比單位矩陣稍大,即:

表1:準確率 accuracy

表2

當這些激活用于向后傳播時,會導致結果爆炸。
初始化值過小會導致每層的輸入快速消失。如果每個權重的初始化值都比單位矩陣稍小,即:

當這些激活用于后向傳播時,可能會導致結果消失。
總而言之,使用大小不合適的值對權重進行將導致神經網絡的發散或訓練速度下降。因此有效的初始化對構建模型至關重要。本系統中將主要采用以下方法進行訓練:
(1)truncated normal init: 截斷正態分布將隨機變量界定一一個確定的范圍內(a,b);
(2)xavier normal init(glorot normal): 使用高斯分布初始化,參數為

(3)he_normal init: 使用高斯分布初始化,參數為
本系統中采用GoogLeNet Inception v3 和Resnet-50 兩種架構進行機器學習的訓練。
訓練集(train set):用于訓練模型擬合的數據樣本。
驗證集(development set):是模型訓練過程中單獨留出的樣本集,它可以用于調整模型的超參數和用于對模型的能力進行初步評估。
測試集(test set):用來評估模最終模型的泛化能力。但不能作為調參、選擇特征等算法相關的選擇的依據。
本系統把數據集隨機分為訓練集,驗證集和測試集,然后用訓練集訓練不同的模型,用驗證集驗證模型,根據情況不斷調整模型,選擇出其中最好的模型,最后用測試集評估最終的模型。
將本系統中的所有圖片數據集分為訓練集、驗證集和測試集,按照96%-2%-2%的比例劃分。本系統采用的圖片數據集當中,20萬多張左右訓練集,4 千多張作為驗證集,4 千多張以上作為測試集,保證訓練集樣本充足的前提下,也確保驗證集和測試集的數量不過少。
本系統中采用Mini-Batch Gradient Descent 的方法進行訓練。將數量為m 的訓練集數據分成(m-1)/n+1 份,每份數量為n(最后一份數量除外,1 運算GoogLeNet 和Resnet 兩種模型,放入訓練集數據進行訓練,我們將batch size 設為32,隨著訓練的進行,損耗函數cost 在下降,訓練集的的準確值accuracy 也在提升。得到兩個模型的訓練集準確率分別為:100%、100%。訓練完成后,我們將驗證集放入訓練好的模型中,得到的tp、fp、fn、tn 值。 然后計算模型的precision、recall 和f1 score,其中 同時計算兩個模型的驗證集accuracy,得到為96.5% 和97.6%,結合accuray 和f1 score,我們選取GoogLeNet 模型再放入測試集進行測試,得到的結果如表1 所示。 其中,品類編號如表2 所示。 模型識別準確率非常高。將模型放入實際場景中進行識別,得到如圖1 所示的分布概率圖,正確命中到病蟲害分類。 綜上可見,本文中的植物病蟲害圖片識別技術通過這種卷積神經網絡方法進行數據處理、模型訓練、模型選擇,最后應用于病蟲害識別,非常快速、準確。本方法中通過數據增強的方式有效防止算法過擬合;訓練時候采用Adam 優化器可以更加快速逼近最小損失從而大量減少訓練時間;在算法中增加了隨機失活(dropout),讓某個神經元的激活值以一定的概率p 停止工作,有效的緩解過擬合的發生,使模型泛化性更強;通過搭建GoogLeNet Inception V3、ResNet-50 等不同框架,采用訓練集在不同服務器上進行訓練,訓練完成后采用驗證集進行驗證,既可以有效選擇更合適的神經網絡框架也可以調節超參數,選擇最合適的框架后再采用測試集進行測試,測試驗證完整算法,三個數據集完全獨立,防止發生過擬合,使得模型更加泛化,最終得到有效的識別模型。后續通過在實際環境中不斷提供新的數據,持續完善植物病蟲害識別模型。4 計算和結果
