李 博,江朝暉,2,謝 軍,饒 元,2,張 武,2
(1安徽農(nóng)業(yè)大學(xué)信息與計(jì)算機(jī)學(xué)院,合肥230036;2智慧農(nóng)業(yè)技術(shù)與裝備安徽省重點(diǎn)實(shí)驗(yàn)室,合肥230036)
受全球氣候和環(huán)境問(wèn)題的影響,植物發(fā)生的病害愈加復(fù)雜,對(duì)植物病害進(jìn)行識(shí)別和防治越來(lái)越重要[1]。隨著計(jì)算機(jī)技術(shù)的發(fā)展,深度學(xué)習(xí)被應(yīng)用到植物病害識(shí)別,其可縮短病害識(shí)別時(shí)間,極大減輕了農(nóng)戶(hù)的工作量。
近年來(lái),越來(lái)越多的國(guó)內(nèi)外研究者嘗試將卷積神經(jīng)網(wǎng)絡(luò)用到植物病害識(shí)別上[2-3]。孫俊等[4]提出了改進(jìn)AlexNet網(wǎng)絡(luò)對(duì)多種植物葉片病害識(shí)別方法,識(shí)別14種不同植物共26類(lèi)病害,劉永波等[5]提出了一種在自然環(huán)境條件下基于深度卷積神經(jīng)網(wǎng)絡(luò)的玉米病害識(shí)別方法。DeChant Chad等[6]集成多個(gè)卷積神經(jīng)網(wǎng)絡(luò),識(shí)別玉米大斑病。為進(jìn)一步提高植物病害識(shí)別準(zhǔn)確率,減少模型訓(xùn)練需要的樣本量[7],更深層的卷積神經(jīng)網(wǎng)絡(luò)和遷移學(xué)習(xí)[8]被應(yīng)用到植物病害識(shí)別。陳娟等[9]通過(guò)改進(jìn)ResNet,提出了改進(jìn)殘差網(wǎng)絡(luò)的園林害蟲(chóng)圖像識(shí)別方法。許景輝等[10]提出基于遷移學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)玉米病害圖像識(shí)別方法。
在將植物識(shí)別模型運(yùn)用到實(shí)際過(guò)程中,楊林楠等[11]設(shè)計(jì)了甜玉米病蟲(chóng)害的樹(shù)型圖和推理機(jī)等,基于Android系統(tǒng)手機(jī)的甜玉米病蟲(chóng)害智能診斷系統(tǒng)。然而其在識(shí)別病害過(guò)程中需要用戶(hù)手動(dòng)根據(jù)葉、穗、莖、籽等部位特征進(jìn)行一系列配置,操作不方便。劉洋等[12]提出了將MobileNet移植到智能手機(jī)直接在手機(jī)端進(jìn)行植物病害識(shí)別,減少了圖片上傳到網(wǎng)絡(luò)的時(shí)間,對(duì)網(wǎng)絡(luò)依賴(lài)性不強(qiáng)。這種方式雖然十分方便,卻對(duì)用戶(hù)設(shè)備有一定要求,不同設(shè)備識(shí)別時(shí)間不同,同時(shí)使用輕量級(jí)模型難以滿(mǎn)足用戶(hù)對(duì)作物病害高精度識(shí)別的需求。
筆者通過(guò)對(duì)深度學(xué)習(xí)在作物病害識(shí)別方面的研究[13-14],綜合考慮模型大小、識(shí)別準(zhǔn)確率和識(shí)別時(shí)間,設(shè)計(jì)分別使用ResNet18、ResNet50和ResNet152模型進(jìn)行遷移學(xué)習(xí)訓(xùn)練,然后通過(guò)Flask將訓(xùn)練好的園藝作物葉部病害識(shí)別模型部署到云服務(wù)器上的方案。提供園藝作物葉部病害識(shí)別Web服務(wù),旨在盡可能滿(mǎn)足農(nóng)戶(hù)實(shí)際使用過(guò)程對(duì)病害識(shí)別時(shí)間和識(shí)別準(zhǔn)確率的需求,降低病害識(shí)別對(duì)農(nóng)戶(hù)設(shè)備要求。
筆者使用的PlantVillage數(shù)據(jù)集[12]包含14類(lèi)園藝作物,分別是蘋(píng)果、藍(lán)莓、櫻桃、玉米、葡萄、柑橘、桃、辣椒、馬鈴薯、樹(shù)莓、大豆、南瓜、草莓、番茄。其中有26種病害葉片、12種健康葉片,共38個(gè)類(lèi)別的樣本圖像。根據(jù)ResNet的輸入尺寸,將圖像的大小尺寸調(diào)整為224×224像素進(jìn)行訓(xùn)練和測(cè)試。
由于PlantVillage數(shù)據(jù)集的圖像是在實(shí)驗(yàn)室中拍攝的,背景很干凈。然而實(shí)際應(yīng)用場(chǎng)景圖片清晰度可能比較低,為了盡可能提高實(shí)際使用過(guò)程中園藝作物葉部病害識(shí)別的準(zhǔn)確率,對(duì)PlantVillage數(shù)據(jù)集里的所有圖片,隨機(jī)使用3種不同的圖像處理技術(shù)中的1種或者不采取任何處理方式處理。其中3種不同的圖像處理技術(shù)包括圖像伽馬校正(Gamma correction)、噪聲注入(noise injection)、PCA顏色增強(qiáng)[15](PCA color augmentation)。同時(shí),為解決實(shí)際使用中存在檢測(cè)不到園藝作物葉部的情況,利用爬蟲(chóng)技術(shù)在互聯(lián)網(wǎng)上隨機(jī)爬取一些作物生長(zhǎng)環(huán)境圖片,并將這些圖片標(biāo)記為無(wú)葉片背景標(biāo)簽。
最終實(shí)驗(yàn)數(shù)據(jù)集共61486幅圖像,通過(guò)統(tǒng)計(jì)圖片數(shù)目以及類(lèi)別樣本的分布情況,隨機(jī)抽取70%的數(shù)據(jù)集作為訓(xùn)練集,20%作為驗(yàn)證集,剩余10%作為測(cè)試集。為方便模型訓(xùn)練,將數(shù)據(jù)集中的39類(lèi)圖片按0~38編號(hào)(如表1所示)制作為訓(xùn)練標(biāo)簽,每個(gè)編號(hào)分別代表一類(lèi)圖片。
表1 實(shí)驗(yàn)數(shù)據(jù)集分類(lèi)
1.2.1 模型選擇 使用何凱明等提出的ResNet[16]作為基準(zhǔn)模型。ResNet通過(guò)在網(wǎng)絡(luò)中增加恒等映射來(lái)解決神經(jīng)網(wǎng)絡(luò)中的梯度消失問(wèn)題,通過(guò)配置不同的通道數(shù)和模塊里的殘差塊(residual block)[16]數(shù)(圖1)可以得到不同的ResNet模型。綜合考慮網(wǎng)絡(luò)層數(shù)以及計(jì)算量,分別使用ResNet18、ResNet50、ResNet152在數(shù)據(jù)集上進(jìn)行訓(xùn)練,并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比分析,結(jié)合實(shí)際使用情況選擇合適的模型。
圖1 殘差模塊
1.2.2 遷移學(xué)習(xí) 遷移學(xué)習(xí)[17]可以加快網(wǎng)絡(luò)收斂速度,減少網(wǎng)絡(luò)訓(xùn)練需要的樣本數(shù)量和時(shí)間。利用遷移學(xué)習(xí)(transfer learning),將 ResNet18、ResNet50、ResNet152預(yù)訓(xùn)練模型從ImageNet數(shù)據(jù)集學(xué)到的通用圖像特征遷移到本實(shí)驗(yàn)數(shù)據(jù)集上,實(shí)現(xiàn)對(duì)園藝作物病害識(shí)別。遷移學(xué)習(xí)常用的方法有特征遷移和模型遷移2種[18]。本研究使用的是模型遷移的方法(表2),重新初始化3個(gè)預(yù)訓(xùn)練模型最后一層參數(shù),其他層直接使用預(yù)訓(xùn)練網(wǎng)絡(luò)的權(quán)重參數(shù)并且凍結(jié),然后再利用實(shí)驗(yàn)數(shù)據(jù)集重新訓(xùn)練整個(gè)模型。
表2 模型參數(shù)
實(shí)驗(yàn)平臺(tái)是基于Ubuntu 18.04系統(tǒng)的服務(wù)器,硬件配置CPU是Intel(R)Xeon(R)CPU E5-2630 v4@2.20 GHz,GPU是Tesla P100-PCIe 16 G英偉達(dá)顯卡。軟件環(huán)境為 CUDA 9.6、CUDNN V7.6.3、Python 3.7、PyTorch 1.4。
將實(shí)驗(yàn)數(shù)據(jù)集按照7:2:1的比例分成訓(xùn)練集、驗(yàn)證集和測(cè)試集。使用訓(xùn)練集分別對(duì)ResNet18、ResNet50、ResNet152進(jìn)行遷移訓(xùn)練,獲得3種分類(lèi)模型。訓(xùn)練中采用批量訓(xùn)練的方法將訓(xùn)練集、驗(yàn)證集和測(cè)試集分為多個(gè)批次(batch),每個(gè)批次中數(shù)據(jù)集圖片數(shù)量(batch size)設(shè)為64,訓(xùn)練集和驗(yàn)證集全部圖片通過(guò)模型作為1個(gè)周期(epoch),共迭代100個(gè)周期,學(xué)習(xí)率設(shè)置為0.001,模型優(yōu)化使用Adam[19]優(yōu)化算法實(shí)現(xiàn)。
模型識(shí)別的準(zhǔn)確率(accuracy)[12]計(jì)算如式(1),交叉熵(cross entropy)[20]計(jì)算如式(2),交叉熵?fù)p失函數(shù)[18]計(jì)算如式(3)。
式中,Nr是識(shí)別正確的預(yù)測(cè)數(shù),n表示數(shù)據(jù)集中樣本總數(shù)。y(i)代表真實(shí)的標(biāo)簽概率分布向量表達(dá)式,代表預(yù)測(cè)概率分布向量表達(dá)式,向量元素非0即1,yj(i)是向量y(i)的元素,是向量的元素。n為訓(xùn)練集的樣本數(shù),θ為模型參數(shù)。
ResNet18、ResNet50、ResNet152模型訓(xùn)練過(guò)程的Loss曲線和準(zhǔn)確率變化如圖2~3所示。從曲線中可以看出,ResNet152準(zhǔn)確率上升與Loss曲線下降速度較快,ResNet50最初準(zhǔn)確率上升與Loss曲線下降速度都比ResNet18慢,直到ResNet18曲線逐漸收斂后才開(kāi)始超過(guò)ResNet18。
圖2 訓(xùn)練過(guò)程Loss曲線
圖3 訓(xùn)練過(guò)程準(zhǔn)確率曲線
表3記錄了ResNet18、ResNet50和ResNet152模型在實(shí)驗(yàn)數(shù)據(jù)集上使用遷移學(xué)習(xí)訓(xùn)練,測(cè)得在訓(xùn)練集、驗(yàn)證集和測(cè)試集上的準(zhǔn)確率。3個(gè)模型的訓(xùn)練集準(zhǔn)確率均小于測(cè)試集的準(zhǔn)確率,未出現(xiàn)過(guò)擬合和欠擬合現(xiàn)象。隨著神經(jīng)網(wǎng)絡(luò)層數(shù)增加,3個(gè)模型在訓(xùn)練集、驗(yàn)證集和測(cè)試集上識(shí)別準(zhǔn)確率逐漸提高。
表3 不同模型訓(xùn)練結(jié)果 %
Flask[21]是Armin Ronacher使用Python編寫(xiě)的一個(gè)輕量級(jí)Web框架,它之所以被歸類(lèi)為輕量級(jí)Web框架,是因?yàn)槠浔旧硐喈?dāng)于一個(gè)內(nèi)核,不需要特定的工具或庫(kù),使用Flask-extension來(lái)管理各種擴(kuò)展[22]。Flask很容易使用,簡(jiǎn)單幾行代碼就可以搭建一個(gè)穩(wěn)定Web應(yīng)用。由于模型訓(xùn)練的代碼同樣使用Python編寫(xiě),所以安裝好Flask后可以直接使用模型訓(xùn)練過(guò)程的軟件環(huán)境部署訓(xùn)練好的模型,降低了模型部署的難度。
筆者在Linux操作系統(tǒng)下進(jìn)行開(kāi)發(fā),硬件配置CPU和GPU與模型訓(xùn)練一樣。軟件環(huán)境在模型訓(xùn)練過(guò)程中使用的軟件環(huán)境基礎(chǔ)上,通過(guò)Python的包安裝程序pip安裝Flask,然后創(chuàng)建code和models文件夾分別保存源代碼和訓(xùn)練好的3個(gè)模型。開(kāi)發(fā)IDE使用微軟開(kāi)發(fā)的免費(fèi)跨平臺(tái)編輯器Visual Studio Code,通過(guò)安裝擴(kuò)展支持不同的編程語(yǔ)言開(kāi)發(fā)。
訓(xùn)練好的ResNet18、ResNet50、ResNet152的模型大小分別是43.3、92.0、224.6 MB。在GPU上測(cè)試結(jié)果表明模型加載時(shí)間分別是48.2、81.3、160 ms,識(shí)別單張圖像的時(shí)間分別是10.9、17.9、33.7 ms。綜合考慮模型大小、識(shí)別準(zhǔn)確率及識(shí)別時(shí)間對(duì)識(shí)別結(jié)果的影響設(shè)計(jì)了快速、標(biāo)準(zhǔn)和準(zhǔn)確3種識(shí)別模式,3種識(shí)別模式分別使用訓(xùn)練好的ResNet18、ResNet50、ResNet152模型。
其中快速模式由于識(shí)別時(shí)間最快可以最快得到結(jié)果,適合網(wǎng)絡(luò)速度慢時(shí)使用;準(zhǔn)確模式識(shí)別精確度最高,適合網(wǎng)絡(luò)速度快時(shí)使用;標(biāo)準(zhǔn)模式平衡了識(shí)別精確度和識(shí)別時(shí)間是默認(rèn)識(shí)別模式。農(nóng)戶(hù)可根據(jù)實(shí)際使用過(guò)程中的網(wǎng)絡(luò)情況選擇相應(yīng)的識(shí)別模式,減少網(wǎng)絡(luò)對(duì)應(yīng)用的影響。
應(yīng)用開(kāi)發(fā)的軟件是Visual Studio Code,分為前端和后端開(kāi)發(fā)。前端使用HTML和JavaScript編寫(xiě),由于PyTorch訓(xùn)練模型的代碼和Flask開(kāi)發(fā)網(wǎng)頁(yè)后臺(tái)的代碼同樣使用Python編寫(xiě),因此后端使用Python編寫(xiě),降低了開(kāi)發(fā)難度,程序工作流程圖如圖4所示。
圖4 病害識(shí)別程序流程圖
園藝作物病害識(shí)別網(wǎng)頁(yè)應(yīng)用案例如圖5所示,分別有選擇圖片按鈕、模式選擇3個(gè)復(fù)選框和識(shí)別按鈕。用手機(jī)或者數(shù)碼相機(jī)采集屬于PlantVillage數(shù)據(jù)集中的14類(lèi)園藝作物葉部病害圖像,點(diǎn)擊選擇圖片并且選擇采集的圖片;根據(jù)實(shí)際使用中網(wǎng)絡(luò)速度和對(duì)準(zhǔn)確率的需求選擇相應(yīng)的識(shí)別模式;然后點(diǎn)擊識(shí)別按鈕后,自動(dòng)將圖片壓縮成WebP格式[23-24]再上傳到服務(wù)器上,并對(duì)圖片進(jìn)行處理,包括將圖像的大小尺寸調(diào)整為224×224像素、圖像濾波等操作;然后在服務(wù)器端利用GPU加速[25]模型推理,最后輸出識(shí)別結(jié)果并且顯示在網(wǎng)頁(yè)上。
圖5 病害識(shí)別網(wǎng)頁(yè)應(yīng)用例子
筆者對(duì)PlantVillage數(shù)據(jù)集進(jìn)行預(yù)處理和擴(kuò)充得到實(shí)驗(yàn)數(shù)據(jù)集,分別使用ResNet18、ResNet50和ResNet152 3種預(yù)訓(xùn)練模型在實(shí)驗(yàn)數(shù)據(jù)集上進(jìn)行遷移學(xué)習(xí)訓(xùn)練,得到3種園藝作物葉部病害識(shí)別模型,設(shè)計(jì)快速、標(biāo)準(zhǔn)和準(zhǔn)確3種識(shí)別模式,并開(kāi)發(fā)園藝作物葉部病害識(shí)別網(wǎng)頁(yè)應(yīng)用,可識(shí)別14類(lèi)園藝作物的26種葉部病害。
(1)不同深度模型大小、識(shí)別準(zhǔn)確率、識(shí)別時(shí)間不同,將深度模型部署到實(shí)際生產(chǎn)中應(yīng)綜合考慮模型特點(diǎn)和用戶(hù)期望。
(2)3種預(yù)訓(xùn)練模型對(duì)原始的PlantVillage數(shù)據(jù)集進(jìn)行遷移學(xué)習(xí)訓(xùn)練,平均識(shí)別準(zhǔn)確率分別是95.50%、96.06%、96.68%,經(jīng)過(guò)預(yù)處理的數(shù)據(jù)集上訓(xùn)練的模型具有更高的精度,同時(shí)在PlantVillage數(shù)據(jù)集原有分類(lèi)基礎(chǔ)上增加了無(wú)葉片背景的分類(lèi),在實(shí)際使用過(guò)程具有更高的魯棒性。
(3)園藝作物葉部病害識(shí)別在服務(wù)器端進(jìn)行,基于Flask框架開(kāi)發(fā)的Web應(yīng)用具有很好的穩(wěn)定性,可滿(mǎn)足多個(gè)用戶(hù)同時(shí)使用,對(duì)用戶(hù)設(shè)備要求較低,無(wú)需安裝額外應(yīng)用,簡(jiǎn)單易用。
筆者結(jié)合農(nóng)戶(hù)實(shí)際使用情況,通過(guò)對(duì)原始的PlantVillage數(shù)據(jù)集進(jìn)行數(shù)據(jù)增強(qiáng),使用多個(gè)模型作為預(yù)訓(xùn)練模型進(jìn)行遷移學(xué)習(xí)訓(xùn)練,得到不同的園藝作物病害識(shí)別模型,解決病害訓(xùn)練樣本不足的問(wèn)題[5]。綜合比較模型大小、識(shí)別準(zhǔn)確率和識(shí)別時(shí)間設(shè)計(jì)了快速、標(biāo)準(zhǔn)和準(zhǔn)確3種病害識(shí)別模式,提供了病害識(shí)別Web服務(wù)。滿(mǎn)足實(shí)際使用過(guò)程農(nóng)戶(hù)對(duì)病害識(shí)別時(shí)間和識(shí)別準(zhǔn)確率的需求,降低了病害識(shí)別對(duì)農(nóng)戶(hù)設(shè)備要求[12],為農(nóng)戶(hù)提供更加方便、精確和廉價(jià)地園藝作物葉部病害識(shí)別服務(wù)。但是由于PlantVillage數(shù)據(jù)集提供的園藝作物種類(lèi)以及病害種類(lèi)有限,很多病害還無(wú)法識(shí)別,同時(shí)作物在不同生長(zhǎng)階段病害呈現(xiàn)的特征也不同,因此還需要進(jìn)一步補(bǔ)充數(shù)據(jù)集,這也是筆者后期研究工作的重點(diǎn)。