周逸博,馬毓?jié)w艷茹,
(1.西北農(nóng)林科技大學(xué)機械與電子工程學(xué)院,陜西 楊凌 712100;2.農(nóng)業(yè)農(nóng)村部農(nóng)業(yè)物聯(lián)網(wǎng)重點實驗室/陜西省農(nóng)業(yè)信息感知與智能服務(wù)重點實驗室,陜西 楊凌 712100)
【研究意義】蘋果產(chǎn)業(yè)在我國國民經(jīng)濟中占重要地位,生產(chǎn)高品質(zhì)蘋果是發(fā)展蘋果產(chǎn)業(yè)的關(guān)鍵。蘋果樹皮病害是造成我國蘋果單產(chǎn)水平不良的制約因素之一[1]。及時、精準(zhǔn)地進行蘋果樹皮病害診斷,有助于病害的早期對癥治療以及果園的精準(zhǔn)管理。因此,開發(fā)隨時可以進行樹皮病害識別的手機APP 系統(tǒng),有助于果農(nóng)快速識別果樹病害,進而采取有效防治措施,對蘋果產(chǎn)業(yè)保質(zhì)增產(chǎn)具有重要意義。
【前人研究進展】目前果樹的病害檢測主要依賴人工感官判定和生物測定[2]。人工感官判定多通過目測判斷果樹病害情況,費時費力,且需在病害癥狀明顯時進行判斷,易造成誤判[3]。生物測定法如聚合酶鏈?zhǔn)椒磻?yīng)(PCR)、酶聯(lián)免疫吸附試驗技術(shù)(ELISA)等,可以直接檢測出病原物種類,準(zhǔn)確度高,但操作復(fù)雜、成本高,還具有破壞性,難以大范圍推廣[4-8]。因此,尋找一種快速、準(zhǔn)確、無損且推廣性強的果樹病害檢測方法很有必要。機器視覺在農(nóng)業(yè)病害識別領(lǐng)域應(yīng)用非常廣泛,主要依賴于圖像處理方法得到相應(yīng)結(jié)果[9]。但傳統(tǒng)圖像處理方法相對較為明顯,例如,對動態(tài)目標(biāo)識別能力差,智能化程度仍不夠高,需要人工輔助等[10]。通過機器學(xué)習(xí)算法進行病害識別需按照單一病害特征進行人為數(shù)值設(shè)定后做相應(yīng)識別,無法進行多種病害同時檢測[11],且對移動端配置要求高,占用資源多。與機器學(xué)習(xí)相比,深度學(xué)習(xí)網(wǎng)絡(luò)算法精確度更高,在數(shù)據(jù)集訓(xùn)練過程中準(zhǔn)確率不斷提升且趨于飽和,方便客戶使用。Krizhevsky等[12]在2012年首次將深層卷積神經(jīng)網(wǎng)絡(luò)Alex Net[13]應(yīng)用于大規(guī)模圖像分類中。近年來深度學(xué)習(xí)網(wǎng)絡(luò)模型在植物病害研究中逐漸深入,它能夠?qū)χ参锊『Φ臏\層圖像特征進行更深層的挖掘,提取出“高層”特征,并進行模型構(gòu)建實現(xiàn)植物病害的檢測分類[14]。王宏樂等[15]使用RestNeSt-50、VGG-16 和RestNet-50 3 種網(wǎng)絡(luò)結(jié)構(gòu)進行測試,通過調(diào)節(jié)訓(xùn)練集中實驗室場景圖片與田間場景圖片的分布,使深度學(xué)習(xí)模型對柑橘黃龍病、蘋果黑星病、芒果細(xì)菌性斑點病識別準(zhǔn)確率均達(dá)到90%以上。Redmon等[16]于2016 年提出的YOLO 系列算法已經(jīng)在目標(biāo)檢測領(lǐng)域得到了較為廣泛的應(yīng)用,YOLO 算法系列經(jīng)歷了從v1 到v5 的發(fā)展,其中YOLO v5 深度學(xué)習(xí)網(wǎng)絡(luò)模型具有體積小、速度快、精度高等優(yōu)點,可以在生態(tài)成熟的PyTorch 中實現(xiàn),網(wǎng)絡(luò)訓(xùn)練及部署較該系列之前的模型更為簡單,方便用戶對自己需要的網(wǎng)絡(luò)模型自行訓(xùn)練。YOLO v5 借鑒了Cut Mix 方法[17],采用Mosaic數(shù)據(jù)增強方式有效解決了模型訓(xùn)練中最頭疼的“小對象問題”。而YOLOv5s 是YOLO v5 模型中體積最小的網(wǎng)絡(luò)模型,其權(quán)重僅27 MB,可以實現(xiàn)實時識別的功能,體積較小可以完成Android端的相應(yīng)部署。
【本研究切入點】以往研究只能對某種特定蘋果樹皮病害進行單一識別,且由于深度學(xué)習(xí)網(wǎng)絡(luò)模型較大而很難實現(xiàn)移動端的部署。本文使用的YOLOv5s 模型是輕量級深度學(xué)習(xí)網(wǎng)絡(luò)模型,可以有效實現(xiàn)Android 端的部署,嵌入Android 端的同時不會影響蘋果樹皮病害識別模型的正常運行,且可以同時對3種蘋果樹皮病害進行識別?!緮M解決的關(guān)鍵問題】本設(shè)計選擇YOLOv5s 作為蘋果樹皮病害的識別網(wǎng)絡(luò)模型,并在Android 端進行部署,實現(xiàn)對蘋果樹皮主要病害:輪紋病、干腐病和腐爛病的準(zhǔn)確快速識別。
YOLOv5s 網(wǎng)絡(luò)結(jié)構(gòu)由輸入端、Backbone(主干網(wǎng)絡(luò))、Neck 網(wǎng)絡(luò)和Prediction(輸出端)四部分組成。各部分的主要功能和網(wǎng)絡(luò)結(jié)構(gòu)如下[18]:
(1)輸入端:Mosaic 數(shù)據(jù)增強模塊、自適應(yīng)錨框計算模塊,自適應(yīng)圖片縮放。
(2)主干網(wǎng)絡(luò):Focus 結(jié)構(gòu)和CSP 結(jié)構(gòu)。
(3)Neck 網(wǎng)絡(luò):FPN+PAN 結(jié)構(gòu)。
(4)輸出端:GIOU_Loss。
整體網(wǎng)絡(luò)結(jié)構(gòu)如圖1[19]所示:
圖1 YOLOv5s 網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 YOLOv5s network structure
1.1.1 Mosaic 數(shù)據(jù)增強 輸入端使用Mosaic 數(shù)據(jù)增強方式對整體數(shù)據(jù)集合進行隨機縮放、隨機剪裁以及隨機排布,得到輸入端相應(yīng)數(shù)據(jù)[20]。
1.1.2 自適應(yīng)錨框計算 在YOLO 系列檢測算法中,系統(tǒng)會在初始階段設(shè)定好默認(rèn)的錨框尺寸,并在輸入不同圖像進行訓(xùn)練時,輸出與默認(rèn)錨框尺寸相應(yīng)的預(yù)測框,將人為標(biāo)注得到的真實框和訓(xùn)練過程得到的預(yù)測框進行對比,計算兩者的偏差,之后再進行反向更新,迭代網(wǎng)絡(luò)結(jié)構(gòu)中的參數(shù)。YOLOv3、YOLOv4 需要通過單獨運行特定程序計算初始錨框值,而YOLOv5s 將該功能嵌入到相應(yīng)的算法結(jié)構(gòu)中,實現(xiàn)了對于不同訓(xùn)練集進行錨框計算的自適應(yīng)性。
1.1.3 自適應(yīng)圖片縮放 YOLOv5s 算法對原始圖像進行縮放操作時,可以根據(jù)輸入圖片的不同尺寸,自適應(yīng)添加最少黑邊,使計算量得到一定程度的減少,從而進一步提高該網(wǎng)絡(luò)的目標(biāo)檢測速度[21]。
1.2.1 Focus 結(jié)構(gòu) Focus 結(jié)構(gòu)可進行切片操作[22],YOLOv5s 網(wǎng)絡(luò)中的Focus 結(jié)構(gòu)使用了較少的32 個卷積核,能夠?qū)⒊叽鐬?40×640×3像素的三通道圖像經(jīng)相應(yīng)的切片操作變成320×320×12 像素的特征圖,并通過32 個卷積核的卷積操作,最終變成320×320×32 像素的特征圖。
1.2.2 CSP 結(jié)構(gòu) YOLOv5s 中的CSP 有兩種結(jié)構(gòu),一種為主干網(wǎng)絡(luò)中的CSP1_X 結(jié)構(gòu),另一種為位于Neck 中的CSP2_X 結(jié)構(gòu)。CSP 模塊中所含有的卷積核大小均為3×3,步進值為2,若輸入的圖像尺寸為640×640 像素,那么它的特征圖尺寸變化規(guī)律是:640×640 -> 320×320 -> 160×160-> 80×80 -> 40×40 -> 20×20,最終得到一個20×20 像素大小的特征圖。
FPN 是自上而下通過上采樣操作,將高層的特征信息和低層的特征信息進行融合,進而計算出預(yù)測的特征圖[23-24]。YOLOv5s 網(wǎng)絡(luò)結(jié)構(gòu)中在FPN 層后面還添加1 個特征金字塔,該金字塔結(jié)構(gòu)自下向上,其中有2 個PAN 結(jié)構(gòu),通過下采樣操作,將低層的特征信息與高層特征進行融合,輸出預(yù)測的特征圖。
目標(biāo)檢測算法的損失函數(shù)一般由Classificition Loss(分類損失函數(shù))和Bounding Box Regeression Loss(回歸損失函數(shù))兩大部分組成。其中回歸損失函數(shù)近幾年的發(fā)展過程為:Smooth L1 Loss ->IOU_Loss(2016)-> GIOU_Loss(2019)->DIOU_Loss(2020)-> CIOU_Loss(2020)。GIOU_Loss損失函數(shù)為:
式中,Δ為最小外接矩形與預(yù)設(shè)框差值;C為最小外接矩形。
GIOU_Loss函數(shù)增加了相交尺度的衡量方式,有利于解決邊界框有時不重合的問題。
輸入端將輸入圖片進行縮放裁剪得到相應(yīng)預(yù)測框,并自適應(yīng)添加最少黑邊。主干網(wǎng)絡(luò)將輸入端的圖片進行切片處理完成卷積操作,得到特征圖。Neck 網(wǎng)絡(luò)通過上采樣下采樣操作,將低層和高層特征進行融合得到預(yù)測特征圖。最后通過輸出端的損失函數(shù)完成所訓(xùn)練的網(wǎng)絡(luò)模型評估。
蘋果樹皮原始數(shù)據(jù)集部分采集于西北農(nóng)林科技大學(xué)南校區(qū),部分為網(wǎng)絡(luò)已有蘋果樹皮病害照片,共獲得蘋果樹表皮圖片470 張,其中包含干腐病151 張、腐爛病160 張、輪紋病159 張。3種待測病害如圖2 所示。
圖2 所需識別的3 種蘋果樹皮病害Fig.2 Three apple bark diseases to be recognized
本設(shè)計使用LabelImg 軟件對所采集的蘋果樹皮患病部位進行人為標(biāo)注,其中使用的三類標(biāo)簽名分別為canker(腐爛?。?、ring rot(輪紋?。?、dry rot(干腐?。?,如圖3 所示。標(biāo)注完圖片后得到相應(yīng)的xml 文件,構(gòu)成所需數(shù)據(jù)集。
圖3 使用LabelImg 標(biāo)注樹皮患病部位Fig.3 Using LabelImg to mark the diseased part of bark
為滿足深度學(xué)習(xí)要求,盡可能豐富數(shù)據(jù)集,將采集的病害圖片進行左右翻轉(zhuǎn)以及飽和度、對比度、明暗度調(diào)整,完成數(shù)據(jù)集的擴增??傮w擴增8倍后的數(shù)據(jù)集共有圖片3 697 張,該組圖片即為本設(shè)計的使用數(shù)據(jù)集。為保證訓(xùn)練的數(shù)據(jù)盡可能的多以及測試集的普遍性,將訓(xùn)練集與測試集按照8 ∶2 比例進行劃分。
使用的網(wǎng)絡(luò)訓(xùn)練環(huán)境配置為:Geforce GTX 1650 GPU;Intel(R) Core(TM) i7-9750H CPU;內(nèi)存8G;CUDA 11.6。Android 端調(diào)試機型為:OPPO R15 機型,運行內(nèi)存6G,CPU 型號為聯(lián)發(fā)科Helio P60。
采用的模型評估指標(biāo)主要包括:準(zhǔn)確率、召回率、調(diào)和均值以及平均精度均值。準(zhǔn)確率和召回率越高,樹皮病害識別效果越好,準(zhǔn)確率與召回率為負(fù)相關(guān)關(guān)系。調(diào)和均值和平均精度均值是需要同時考慮準(zhǔn)確率和召回率的量化指標(biāo),調(diào)和均值和平均精度均值越大,則代表樹皮病害識別效果好。
使用PyTorch 將制作好的數(shù)據(jù)集放入YOLOv5s 模型中,劃分測試集和訓(xùn)練集,開始相應(yīng)模型訓(xùn)練,隨機選擇測試圖片帶入訓(xùn)練好的模型中進行測試,結(jié)果如圖4、圖5、圖6 所示。左側(cè)圖片為未進行識別的測試圖片,右側(cè)圖片為測試結(jié)果。
圖4 干腐病模型識別測試Fig.4 Recognitiion test of dry rot disease model
圖5 輪紋病模型識別測試Fig.5 Recognitiion test of ring rot disease model
圖6 腐爛病模型識別測試Fig.6 Recognitiion test of canker disease model
將深度學(xué)習(xí)網(wǎng)絡(luò)模型部署到Android 端需要借助第三方框架。騰訊公司推出的ncnn 是針對移動平臺優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)推理計算框架。ncnn 沒有第三方依賴項,是跨平臺的,在手機CPU 上運行速度比所有已知的開源框架都快,開發(fā)者可以通過高效的ncnn 實現(xiàn),輕松將深度學(xué)習(xí)算法模型部署到移動平臺,打造智能APP。使用ncnn 框架在Android 端部署模型需要將.pth 文件格式的模型轉(zhuǎn)換為ncnn 框架所特有的ncnn 格式模型(.bin 和.param)。首先將.pth 格式模型去掉后處理導(dǎo)出為.onnx 格式模型,修改工程目錄下的train.py 文件中的evalimage 函數(shù)。修改.py 文件的布爾型變量use_jit 為False,禁用JIT,保證能導(dǎo)出onnx。用onnx-simplifier 對模型進行簡化。在YOLO 環(huán)境下安裝onnx、onnxruntime 和onnxsim 庫,在控制臺使用命令對onnx 模型進行簡化。
使用daquexian 開發(fā)的一鍵轉(zhuǎn)換工具,在瀏覽器本地上傳簡化后的onnx 模型,使用onnx optimizer 和ncnnoptimize 優(yōu)化模型,輸出目標(biāo)格式的ncnn 模型(.bin 和.param)。
將簡化完成的.param 文件進行參數(shù)修改,將框架中默認(rèn)的YOLOv5s 網(wǎng)絡(luò)模型替換為可識別蘋果樹皮病害的網(wǎng)絡(luò)模型,完成Android 端部署。
點擊設(shè)置完成的APP 圖標(biāo)打開APP。進入APP 主頁面,點擊“選擇圖片”進入本地圖片選擇(圖7),待測圖片可以選擇進行CPU 識別或GPU 識別,選擇圖片并完成識別(圖8、圖9)。
圖7 待測圖片選擇頁面Fig.7 Image selection page to be tested
圖8 選擇待測圖片F(xiàn)ig.8 Select the picture to be detected
圖9 待測圖片患病情況識別結(jié)果Fig.9 Disease recognition results of picture to be tested
用于蘋果樹皮病害識別的YOLOv5s 網(wǎng)絡(luò)訓(xùn)練400 個epoch 后,按照2.3 所述指標(biāo)對訓(xùn)練好的模型進行相應(yīng)評估,結(jié)果見圖10。由圖10 可知,訓(xùn)練后得到的深度學(xué)習(xí)網(wǎng)絡(luò)模型測試結(jié)果良好,經(jīng)過400 輪訓(xùn)練后模型達(dá)到收斂狀態(tài)。在訓(xùn)練過程中準(zhǔn)確率和召回率的提升過程較為穩(wěn)定,準(zhǔn)確率穩(wěn)定在88.7%,召回率穩(wěn)定在85.8%,平均精度值也處于較高水平狀態(tài),穩(wěn)定在87.2%附近。其中識別效果最好的腐爛病準(zhǔn)確率為93.5%,識別效果最差的輪紋病準(zhǔn)確率為84.3%。
圖10 YOLOv5s 網(wǎng)絡(luò)訓(xùn)練結(jié)果Fig.10 YOLOv5s network training results
對手機APP 進行功能測試,輸入50 張不同類型的蘋果樹皮病害圖片進行檢測,每張病害圖片處理時間均小于1 s,檢測置信度為87.954%。檢測時間較快,可以在移動端正常使用,測試效果如圖11 所示。
圖11 手機APP 病害識別測試效果Fig.11 Effect of mobile APP disease recognition test
為快速且同時檢測腐爛病、輪紋病、干腐病3 種蘋果樹皮病害的問題,本研究使用YOLOv5s深度學(xué)習(xí)網(wǎng)絡(luò)模型,設(shè)計了基于Android 的蘋果樹皮病害識別系統(tǒng)。在深度學(xué)習(xí)網(wǎng)絡(luò)發(fā)展成為圖像檢測主流前,病害圖像主要采用機器學(xué)習(xí)進行識別。機器學(xué)習(xí)視覺信息的處理技術(shù)主要依賴于圖像處理方法,對圖像進行復(fù)原、分割、增強、特征提取等一系列操作,從而進行圖像處理識別,得到相應(yīng)結(jié)果。機器學(xué)習(xí)通過人工分析圖片特征,經(jīng)過圖像算法提取特征,并通過特征的數(shù)值進行圖像分類,在分析圖片過程中不需要大量圖片,只需要較為典型的圖片和兩種類別臨界點的圖片進行人工分析。與本文所使用的深度學(xué)習(xí)網(wǎng)絡(luò)檢測方式相比較,機器學(xué)習(xí)進行病害識別需按照單一病害特征進行人為數(shù)值設(shè)定后做相應(yīng)識別,從而無法進行3 種病害同時檢測,而本文使用深度學(xué)習(xí)網(wǎng)絡(luò)則可以完成3 種病害數(shù)據(jù)集的同時訓(xùn)練,其最終對3 種病害的識別準(zhǔn)確率穩(wěn)定在88.7%,召回率穩(wěn)定在85.8%,平均精度值穩(wěn)定在87.2%,且可以在訓(xùn)練中獨立學(xué)習(xí)相關(guān)屬性,得到更好的效果。
深度學(xué)習(xí)網(wǎng)絡(luò)模型由于參 數(shù)多、體量大,較難在小型移動設(shè)備上部署,本文使用的YOLO v5深度學(xué)習(xí)網(wǎng)絡(luò)模型,由Ultralytics 公司在2020 年推出,包括YOLOv5s、YOLO v5m、YOLO v5l、YOLO v5x 4 個模型,其中YOLOv5s 是4 種模型中體積最小的網(wǎng)絡(luò)模型,其權(quán)重僅僅27MB,能夠降低對移動端配置的需求,本文將其在Android端部署后。經(jīng)測試每張病害圖片處理時間均小于1 s,檢測致信度為87.954%,檢測時間較快,可以在移動端正常使用。
測試結(jié)果反映出訓(xùn)練完成的網(wǎng)絡(luò)模型準(zhǔn)確率、召回率、平均精度仍有待提高。果園環(huán)境的復(fù)雜性在一定程度上影響手機 APP 的圖像識別。移動終端使用測試方面,通過 Android 端的測試,該 APP 使用輕量級的深度學(xué)習(xí)網(wǎng)絡(luò)YOLOv5s 可以適應(yīng)當(dāng)前市場中的大部分機,降低了硬件需求,可以滿足果農(nóng)需要。針對上述問題,可以考慮以下改進措施:(1)圖像拍攝時盡可能直接拍攝待檢測枝干部位,減少非必要影響因素的出現(xiàn);(2)繼續(xù)收集不同環(huán)境和不同病發(fā)階段的 3 種類型病害圖片,增強數(shù)據(jù)集后繼續(xù)訓(xùn)練,不斷提升網(wǎng)絡(luò)模型的識別效果;(3)針對病害的早期階段圖像進行訓(xùn)練,以期實現(xiàn)蘋果樹皮病害的早期快速診斷。
針對果農(nóng)需要對蘋果樹皮病害進行實時拍照檢測的問題,本研究設(shè)計了一種基于Android 系統(tǒng)以及YOLOv5s 深度學(xué)習(xí)網(wǎng)絡(luò)模型的手機APP蘋果樹皮病害識別系統(tǒng)。本設(shè)計以輪紋病、腐爛病、干腐病3 種蘋果樹皮病害為研究對象,使用YOLOv5s 深度學(xué)習(xí)網(wǎng)絡(luò)模型對目標(biāo)圖片進行圖像識別,得出相應(yīng)結(jié)果。實驗結(jié)果表明:該手機APP 對手機配置要求較低,可滿足絕大多數(shù)果農(nóng)的手機配置;使用輕量級深度學(xué)習(xí)網(wǎng)絡(luò)YOLOv5s,網(wǎng)絡(luò)模型小,所占資源少,可以良好地在Android 端進行部署。本設(shè)計可以在一定程度上幫助果農(nóng)完成蘋果樹皮病害的識別,進而進行果園的精準(zhǔn)管理,對蘋果產(chǎn)業(yè)的發(fā)展具有推動作用。