李哲 潘維 張赟
(江蘇同德信息有限公司 江蘇省連云港市 210000)
過去農(nóng)民通常依靠視覺判斷和一些肉眼可見的癥狀來判斷作物是否生病,例如看葉片是否枯萎、發(fā)黃發(fā)褐等呈現(xiàn)一定的規(guī)律,但是當(dāng)作物出現(xiàn)上述顯著的癥狀時(shí),通常意味著疾病已經(jīng)發(fā)生;而且病蟲害種類繁多、情況復(fù)雜,即便人類專家也難以覆蓋全部情況?;谏疃染矸e神經(jīng)網(wǎng)絡(luò)的圖像識(shí)別能力和泛化性,本文設(shè)計(jì)了一套深度卷積神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)針對(duì)中草藥飲片圖像的品類識(shí)別。
在圖像識(shí)別領(lǐng)域,CNN(卷積神經(jīng)網(wǎng)絡(luò))已經(jīng)成為一種高準(zhǔn)確率的識(shí)別方法,可以提取圖像的高層次表達(dá)。同時(shí)基于端到端(end-to-end)的卷積神經(jīng)學(xué)習(xí)避免了人工規(guī)則的中間步驟,不再需求傳統(tǒng)特征工程提取圖像特征和進(jìn)行特定的特征選取?;诙说蕉说姆椒ㄒ詧D片直接作為輸入,圖片中的每個(gè)像素都直接作為輸入值,不再局限于特定的應(yīng)用和繁瑣的特征工程,可以快速方便的訓(xùn)練成應(yīng)用模型。
采集真實(shí)世界的10 多種植物共38 多種常見病蟲害情況下植物葉子的原始圖像,通過不同角度、光線針對(duì)不同藥材飲片進(jìn)行大量的拍攝以及線上爬蟲搜索的方式得到大量原始圖片,然后每種藥材飲片根據(jù)檢索及篩去重復(fù),每張圖片中包含飲片的數(shù)量、背景復(fù)雜程度、分辨度、大小不限。
對(duì)圖片使用隨機(jī)剪裁、翻轉(zhuǎn)(左右上下)、顏色抖動(dòng)(color jitter)、旋轉(zhuǎn)、平移、縮放等方式,對(duì)圖片進(jìn)行不同維度的修改。將這些圖像增強(qiáng)后的植物病蟲害圖片歸納整理,本系統(tǒng)中建立了數(shù)量為20 萬(wàn)多的圖片數(shù)據(jù)集。
3.2.1 卷積層
通過卷積操作對(duì)輸入圖像進(jìn)行降維和特征抽取,卷積運(yùn)算是線性操作,而神經(jīng)網(wǎng)絡(luò)要擬合的是非線性的函數(shù),因此需要加上激活函數(shù)。前部卷積層可以捕捉圖像局部、細(xì)節(jié)信息,即輸出圖像的每個(gè)像素(Activation 激活值)只是感受到輸入圖像很小范圍數(shù)值進(jìn)行計(jì)算的結(jié)果。后面的卷積層感受野逐層加大,用于捕獲圖像更復(fù)雜,更抽象的信息。經(jīng)過多個(gè)卷積層的運(yùn)算,最后得到圖像在各個(gè)不同尺度的抽象表示。同時(shí)“不全連接,參數(shù)共享”的特點(diǎn)大大降低了網(wǎng)絡(luò)參數(shù),保證了網(wǎng)絡(luò)的稀疏性,防止過擬合。
3.2.2 池化層
池化的做法是對(duì)圖像的某一個(gè)區(qū)域用一個(gè)值代替,如最大值或平均值。如果采用最大值,叫做 max 池化;如果采用均值,叫做均值池化。通過池化層降維,縮減模型大小,提高計(jì)算速度,同時(shí)降低過擬合概率,提升特征提取魯棒性。
3.2.3 全連接層
全連接就是個(gè)矩陣乘法,相當(dāng)于一個(gè)特征空間變換,可以把前面所有有用的信息提取整合。再加上激活函數(shù)的非線性映射,多層全連接層理論上可以模擬任何非線性變換。全連接可以把高維變到低維,同時(shí)把有用的信息保留下來。損失函數(shù)
圖1
3.2.4 優(yōu)化器
優(yōu)化器是通過訓(xùn)練優(yōu)化參數(shù),來最小化(最大化)損失函數(shù)。損失函數(shù)是用來計(jì)算測(cè)試集中目標(biāo)值Y 的真實(shí)值和預(yù)測(cè)值的偏差程度。為了使模型輸出逼近或達(dá)到最優(yōu)值,我們需要用各種優(yōu)化策略和算法,來更新和計(jì)算影響模型訓(xùn)練和模型輸出的網(wǎng)絡(luò)參數(shù)。在本系統(tǒng)中采用AdamOptimizer 來進(jìn)行優(yōu)化,具體公式如下:
3.2.5 隨機(jī)失活(Dropout)
隨機(jī)失活(dropout)是對(duì)具有神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化的方法,在學(xué)習(xí)過程中通過將隱含層的部分權(quán)重隨機(jī)歸零,讓某個(gè)神經(jīng)元的激活值以一定的概率p 停止工作,這樣可以使模型泛化性更強(qiáng),因?yàn)樗粫?huì)太依賴某些局部的特征。Dropout 可以比較有效的緩解過擬合的發(fā)生。
3.2.6 初始化
初始化會(huì)對(duì)深度神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練時(shí)間和收斂性產(chǎn)生重大影響。簡(jiǎn)單的初始化方法可以加速訓(xùn)練,為了使網(wǎng)絡(luò)中的信息更好的傳遞,每一層的特征的方差應(yīng)該盡可能相等。
初始化值過大會(huì)導(dǎo)致每層的輸入快速增長(zhǎng)。如果每個(gè)權(quán)重的初始化值都比單位矩陣稍大,即:
表1:準(zhǔn)確率 accuracy
表2
當(dāng)這些激活用于向后傳播時(shí),會(huì)導(dǎo)致結(jié)果爆炸。
初始化值過小會(huì)導(dǎo)致每層的輸入快速消失。如果每個(gè)權(quán)重的初始化值都比單位矩陣稍小,即:
當(dāng)這些激活用于后向傳播時(shí),可能會(huì)導(dǎo)致結(jié)果消失。
總而言之,使用大小不合適的值對(duì)權(quán)重進(jìn)行將導(dǎo)致神經(jīng)網(wǎng)絡(luò)的發(fā)散或訓(xùn)練速度下降。因此有效的初始化對(duì)構(gòu)建模型至關(guān)重要。本系統(tǒng)中將主要采用以下方法進(jìn)行訓(xùn)練:
(1)truncated normal init: 截?cái)嗾龖B(tài)分布將隨機(jī)變量界定一一個(gè)確定的范圍內(nèi)(a,b);
(2)xavier normal init(glorot normal): 使用高斯分布初始化,參數(shù)為
(3)he_normal init: 使用高斯分布初始化,參數(shù)為
本系統(tǒng)中采用GoogLeNet Inception v3 和Resnet-50 兩種架構(gòu)進(jìn)行機(jī)器學(xué)習(xí)的訓(xùn)練。
訓(xùn)練集(train set):用于訓(xùn)練模型擬合的數(shù)據(jù)樣本。
驗(yàn)證集(development set):是模型訓(xùn)練過程中單獨(dú)留出的樣本集,它可以用于調(diào)整模型的超參數(shù)和用于對(duì)模型的能力進(jìn)行初步評(píng)估。
測(cè)試集(test set):用來評(píng)估模最終模型的泛化能力。但不能作為調(diào)參、選擇特征等算法相關(guān)的選擇的依據(jù)。
本系統(tǒng)把數(shù)據(jù)集隨機(jī)分為訓(xùn)練集,驗(yàn)證集和測(cè)試集,然后用訓(xùn)練集訓(xùn)練不同的模型,用驗(yàn)證集驗(yàn)證模型,根據(jù)情況不斷調(diào)整模型,選擇出其中最好的模型,最后用測(cè)試集評(píng)估最終的模型。
將本系統(tǒng)中的所有圖片數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,按照96%-2%-2%的比例劃分。本系統(tǒng)采用的圖片數(shù)據(jù)集當(dāng)中,20萬(wàn)多張左右訓(xùn)練集,4 千多張作為驗(yàn)證集,4 千多張以上作為測(cè)試集,保證訓(xùn)練集樣本充足的前提下,也確保驗(yàn)證集和測(cè)試集的數(shù)量不過少。
本系統(tǒng)中采用Mini-Batch Gradient Descent 的方法進(jìn)行訓(xùn)練。將數(shù)量為m 的訓(xùn)練集數(shù)據(jù)分成(m-1)/n+1 份,每份數(shù)量為n(最后一份數(shù)量除外,1 運(yùn)算GoogLeNet 和Resnet 兩種模型,放入訓(xùn)練集數(shù)據(jù)進(jìn)行訓(xùn)練,我們將batch size 設(shè)為32,隨著訓(xùn)練的進(jìn)行,損耗函數(shù)cost 在下降,訓(xùn)練集的的準(zhǔn)確值accuracy 也在提升。得到兩個(gè)模型的訓(xùn)練集準(zhǔn)確率分別為:100%、100%。訓(xùn)練完成后,我們將驗(yàn)證集放入訓(xùn)練好的模型中,得到的tp、fp、fn、tn 值。 然后計(jì)算模型的precision、recall 和f1 score,其中 同時(shí)計(jì)算兩個(gè)模型的驗(yàn)證集accuracy,得到為96.5% 和97.6%,結(jié)合accuray 和f1 score,我們選取GoogLeNet 模型再放入測(cè)試集進(jìn)行測(cè)試,得到的結(jié)果如表1 所示。 其中,品類編號(hào)如表2 所示。 模型識(shí)別準(zhǔn)確率非常高。將模型放入實(shí)際場(chǎng)景中進(jìn)行識(shí)別,得到如圖1 所示的分布概率圖,正確命中到病蟲害分類。 綜上可見,本文中的植物病蟲害圖片識(shí)別技術(shù)通過這種卷積神經(jīng)網(wǎng)絡(luò)方法進(jìn)行數(shù)據(jù)處理、模型訓(xùn)練、模型選擇,最后應(yīng)用于病蟲害識(shí)別,非??焖?、準(zhǔn)確。本方法中通過數(shù)據(jù)增強(qiáng)的方式有效防止算法過擬合;訓(xùn)練時(shí)候采用Adam 優(yōu)化器可以更加快速逼近最小損失從而大量減少訓(xùn)練時(shí)間;在算法中增加了隨機(jī)失活(dropout),讓某個(gè)神經(jīng)元的激活值以一定的概率p 停止工作,有效的緩解過擬合的發(fā)生,使模型泛化性更強(qiáng);通過搭建GoogLeNet Inception V3、ResNet-50 等不同框架,采用訓(xùn)練集在不同服務(wù)器上進(jìn)行訓(xùn)練,訓(xùn)練完成后采用驗(yàn)證集進(jìn)行驗(yàn)證,既可以有效選擇更合適的神經(jīng)網(wǎng)絡(luò)框架也可以調(diào)節(jié)超參數(shù),選擇最合適的框架后再采用測(cè)試集進(jìn)行測(cè)試,測(cè)試驗(yàn)證完整算法,三個(gè)數(shù)據(jù)集完全獨(dú)立,防止發(fā)生過擬合,使得模型更加泛化,最終得到有效的識(shí)別模型。后續(xù)通過在實(shí)際環(huán)境中不斷提供新的數(shù)據(jù),持續(xù)完善植物病蟲害識(shí)別模型。4 計(jì)算和結(jié)果