許文燕
(1.廣州南洋理工職業(yè)學院智能工程學院,廣東廣州 510925; 2.華南理工大學機械與汽車工程學院,廣東廣州 510641)
目前,隨著果園葡萄種植模式不斷復雜化、精細化,葡萄樹生長過程中所遇到的病蟲害情況也越來越復雜。如何快速、準確地檢測葡萄葉部病害并采取相關(guān)防治措施及時止損[1-3],對于提高葡萄的品質(zhì)與產(chǎn)量至關(guān)重要。隨著計算機視覺技術(shù)的不斷發(fā)展,果園病蟲害檢測技術(shù)也取得了長足進步。常見的果園病蟲害檢測方法主要分為傳統(tǒng)機器視覺方法與深度學習方法兩大類。傳統(tǒng)機器視覺方法一般需要人工提取病蟲害顏色、紋理、輪廓等特征[4-7],并對這些特征進行稀疏編碼后采用特征分類器進行分類[8-9]。此類方法往往存在識別種類少、識別精度低等問題[10],因此難以大規(guī)模推廣應用。如王利偉等利用數(shù)字圖像處理提取15個葡萄病害區(qū)域形狀、紋理、顏色等特征輸入到支持向量機進行葡萄葉部病害的識別,識別準確率可達90%以上[6]。鄭建華等綜合利用RGB顏色矩、HSV顏色直方圖特征、GLCM紋理特征、HOG特征共4種特征集訓練SVM獲得了93.41%的識別準確率[7]。張梓婷等提出了一種基于k-means++聚類與圖像分塊的農(nóng)作物葉片病害異常檢測方法,對馬鈴薯、玉米、蘋果葉片檢測精度可達 89%以上[11]。傳統(tǒng)機器視覺方法識別精度非常依賴特征工程,對于相似病蟲害往往難以識別[12]。
然而,深度學習技術(shù)卻能夠自動提取相似病蟲害深度特征進行識別,識別準確率高、泛化能力強,近年來被廣泛應用在果園病蟲害識別領(lǐng)域[13]。如樊湘鵬等基于遷移學習和改進VGG16模型檢測葡萄葉部病害,并將其部署在手機APP上,平均識別精度達95.67%[14]。何欣等提出了一種基于多尺度殘差神經(jīng)網(wǎng)絡(luò)的葡萄葉片病害識別方法,使用Mask R-CNN提取葡萄葉片部位,并加入多尺度卷積等多種策略提升網(wǎng)絡(luò)特征提取能力,最終輸入到Multi-Scale ResNet中進行識別,準確率可達90.83%[15]。劉闐宇等提出了一種多角度建議區(qū)域的Faster-RCNN準確定位圖像中葡萄葉片病害部位并進行識別的方法,并在真實場景下進行檢測識別效果較好[16]。喬虹等利用Faster R-CNN算法對葡萄葉片病害進行動態(tài)檢測,檢測準確率達到了90.9%[17]。上述研究采用各自模型取得較好研究效果的同時,也存在模型網(wǎng)絡(luò)結(jié)構(gòu)復雜、參數(shù)量龐大、運算量要求高等缺點[18-21]。因此,目前迫切需要對它們進行優(yōu)化改進,以滿足在內(nèi)存、算力資源受限的嵌入式設(shè)備上運用的要求[22]。
針對SqueezeNet網(wǎng)絡(luò)結(jié)構(gòu)中Fire模塊數(shù)量過多、卷積核尺寸過大而導致模型運行效率低的問題[23-27],進行優(yōu)化改進以提高其在嵌入式設(shè)備上的運行效率,然后將改進網(wǎng)絡(luò)作為葡萄病害識別模型,擬研制一種便攜式果園葡萄病害快速識別與檢測裝置,以期為果園病蟲害信息快速獲取與智能化管理提供技術(shù)與裝備支持。
基于改進SqueezeNet的葡萄葉部病害識別與檢測技術(shù)路線如圖1所示。該路線包括數(shù)據(jù)獲取、數(shù)據(jù)預處理、數(shù)據(jù)集制作、模型設(shè)計、模型訓練以及在移動設(shè)備上進行模型部署。一般來講,采集的圖像數(shù)據(jù)中或多或少都會存在部分缺失、分布不均衡、分布異常、混有無關(guān)緊要的數(shù)據(jù)等問題[28],通常都需要對其進行數(shù)據(jù)預處理,即剔除無效數(shù)據(jù)、標準化、數(shù)據(jù)增強以及數(shù)據(jù)標注等操作,以滿足模型訓練要求。然后,將預處理過的數(shù)據(jù)按照一定比例隨機劃分數(shù)據(jù)集。在識別模型選取方面,以SqueezeNet模型為基礎(chǔ)進行輕量化改進并訓練,將訓練完成后的模型進行量化并導出部署在移動設(shè)備,最終完成深度學習模型在果園病蟲害檢測方面的落地應用。
1.2.1 數(shù)據(jù)獲取 從AI Challenger 2018農(nóng)作物病害數(shù)據(jù)集中獲取3 144張葡萄葉片樣本。其中,健康葉片336張,病害葉片2 808張(表1)??紤]到葡萄健康葉片數(shù)量過少,另外,從廣州市從化區(qū)(113.59°E,23.55°N)世外萄園中,利用飛螢8 SE相機(分辨率1 280像素×720像素)人工拍攝了366張真實環(huán)境下的葡萄健康葉片圖像(圖2),總計3 510張樣本圖像。在全部樣本圖像中,包含了健康、黑腐病、褐斑病以及輪斑病4種葡萄葉片。
表1 葡萄葉片樣本數(shù)量
1.2.2 數(shù)據(jù)增強 考慮到各類病害樣本數(shù)量分布不均,為防止模型產(chǎn)生過擬合問題,采用數(shù)據(jù)增強技術(shù)[29],對各類樣本增加水平、垂直翻轉(zhuǎn)、隨機添加噪聲等操作(圖3),將圖像樣本由原來的3 510張增加到21 060張。因數(shù)據(jù)增強前后圖像大小存在差異,使用MATLAB自編函數(shù)將其統(tǒng)一調(diào)整至224像素×224像素。
1.2.3 數(shù)據(jù)集制作 將數(shù)據(jù)增強后的樣本按 8 ∶1 ∶1 的比例隨機劃分成訓練集、驗證集以及測試集(表2)。其中,驗證集主要用于模型的交叉驗證[28],測試集則用于評估最終模型的泛化能力[30]。
表2 各數(shù)據(jù)集樣本數(shù)量
1.3.1 基礎(chǔ)模型 近年來,隨著深度學習技術(shù)的不斷發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)也由原來的8層AlexNet[18]增加到16層VGG-16[19],再到后來的22層的GoogLeNet[20]、101層的ResNet-101[31]以及201層的DenseNet-201[32]等。為了提高模型識別精度,科研人員往往采用更深的網(wǎng)絡(luò)結(jié)構(gòu)。但是這些臃腫而龐大的模型難以在算力資源受限的移動設(shè)備上運用[21-22]。為了使深度學習模型能夠真正運用到嵌入式設(shè)備上,許多科研人員也做了大量的模型輕量化研究[20-21,23,29,33-34]。例如Iandola在2016年提出了一種輕量化的神經(jīng)網(wǎng)絡(luò)模型SqueezeNet[35],其結(jié)構(gòu)見圖4。SqueezeNet模型在識別精度與AlexNet相當?shù)耐瑫r它的參數(shù)量僅僅是AlexNet的1/50。因此,本研究以經(jīng)典的SqueezeNet模型為基礎(chǔ),對其做進一步改進優(yōu)化,使得它能夠在移動嵌入式設(shè)備上擁有更好的效率與精度。
由圖4-a可知,該模型結(jié)構(gòu)主要有8個Fire模塊構(gòu)成,還含有3個最大池化層(Max Pooling Layer)和1個全局平均池化層(Global Average Pooling Layer)。SqueezeNet模型的核心在于Fire模塊,它包括Squeeze層和Expand層2個部分,其結(jié)構(gòu)見圖 4-b。通常將Fire模塊定義為Fire(M,N,E1,E2),其中M、N分別代表Squeeze層的輸入、輸出通道數(shù);E1、E2則分別代表Expand層中的1×1、3×3卷積核的數(shù)量。由圖4-a可知,每經(jīng)過一次最大池化操作,特征圖的大小變?yōu)樵瓉淼?/4,因此最大池化可以減少模型計算量。Dropout層會隨機失活一部分神經(jīng)元,從而防止模型出現(xiàn)過擬合[36]。卷積層10(Conv10)采用1×1卷積核,輸入通道數(shù)為512,輸出通道數(shù)為1 000,輸出特征圖大小為13×13。卷積層10的輸出經(jīng)過全局平均池化層(Global Average Pooling Layer)后,將特征向量輸入Softmax分類器,由Softmax分類器計算1 000種類別的概率,并將概率最大的類別作為模型最終識別結(jié)果[10]。
1.3.2 改進模型 原SqueezeNet模型是在大型數(shù)據(jù)集ImageNet上做過預訓練,其分類數(shù)目是1 000類。本研究葡萄葉片樣本為4類,需要在原SqueezeNet模型中將其改為4類。由于本研究識別種類較少,所以并不需要如此深的網(wǎng)絡(luò)結(jié)構(gòu)。這里參照文獻[23]中的研究方法,在SqueezeNet模型基礎(chǔ)上,先移除Fire5、Fire6、Fire7這3個模塊。為了保證輸入到Fire8的通道數(shù)與前面一致,需要把Fire8模塊的參數(shù)修改為Fire(256,32,256,256),即將該模塊中的輸入通道數(shù)由512減少為256,同時把Squeeze層的輸出通道由64減少為32。研究表明,利用1×1卷積替換3×3卷積,可大幅度降低模型計算量[37]。因為3×3卷積核有9個參數(shù),每進行1次卷積需要做9次浮點乘法和1次浮點加法運算,而1×1卷積核僅有1個參數(shù),只進行1次浮點乘法運算,所以1次1×1卷積的運算量約為3×3卷積運算的 1/9[38]?;诖嗽?考慮將SqueezeNet模型中部分3×3卷積核用1×1卷積核替換。這樣不僅減少了模型參數(shù)量,而且也顯著地降低了模型運算量。具體做法是:(1)將Conv1的卷積核大小由 7×7 改為3×3,并將卷積核個數(shù)調(diào)整為64。(2)將Fire模塊中的1×1和3×3卷積核數(shù)量由原來1 ∶1的比例調(diào)整為3 ∶1進行重新分配[23]。此外,由于每進行1次最大池化操作,特征圖的大小會減少為原來的 1/4,然而特征圖的大小又與深度學習架構(gòu)的運算量有著密切關(guān)系。(3)對于Fire2、Fire3模塊,如將其移到MaxPooling2之后,此時特征圖的大小變?yōu)樵瓉淼?/4,計算量相應也會減少為原來的1/4。將上述改進后的SqueezeNet模型命名為T-SNet(即Tiny-SqueezeNet的縮寫)與原模型以示區(qū)別,其具體結(jié)構(gòu)見圖5。
本研究采用混淆矩陣評價改進模型性能優(yōu)劣。其中,精準率、召回率以及準確率的基本定義如下。
精準率(Precision),又稱查準率,是分類器預測的正樣本中預測正確的比例。其取值范圍在0~1之間,取值越大表示模型預測能力越強。
(1)
召回率(Recall),又稱查全率,是分類器預測正確的正樣本占所有正樣本的比例。其取值范圍在 0~1之間,取值越大表示模型預測能力越強。
(2)
準確率(Accuracy)則是分類器預測正確的樣本占所有預測樣本的比例。其取值范圍在0~1之間,取值越大表示模型綜合預測能力越強。
(3)
其中,FP表示樣本為負,但預測為正的數(shù)量;FN表示樣本為正,但預測為負的數(shù)量;TP表示樣本為正,且預測也為正的數(shù)量;TN表示樣本為負,且預測也為負的數(shù)量。
在正、負樣本不均衡情況下,使用單一指標來評價模型具有一定的局限性[23]。因此,綜合使用3種評價指標對改進模型進行全面而科學的評價[39]。
模型訓練環(huán)境為MATLAB 2021b版本,其硬件配置為:Windows 10專業(yè)版64位操作系統(tǒng),CPU為英特爾i7-10700,GPU為英偉達GTX 1660 Super 6 GB,主板為微星MAG B460M,內(nèi)存為32 G。
2.1.1 超參數(shù)設(shè)置 在模型訓練時,將訓練超參數(shù)設(shè)置為:初始學習率(Initial Learning Rate)為0.001,學習率衰減因子(Learning Rate Drop Factor)為0.1,學習率衰減周期(Learning Rate Drop Period)為10輪/次,最大訓練輪數(shù)(Max Epoch)為30輪,MinibatchSize為64,求解器為SGDM(Stochastic Gradient Descent with Momentum),驗證頻率(Validation Frequency)為每100次迭代驗證1次,利用GPU加速運算,Dropout層隨機失活神經(jīng)元概率設(shè)置0.5,模型內(nèi)部參數(shù)初始化采用經(jīng)過ImageNet數(shù)據(jù)集訓練過的SqueezeNet模型權(quán)重值。
2.1.2 訓練結(jié)果 在相同試驗條件下,進行模型訓練,得到原模型與改進模型的訓練精度曲線與訓練損失曲線(圖6)。在相同試驗條件下,原SqueezeNet模型與T-SNet模型訓練曲線大體一致。但T-SNet模型由于參數(shù)量、運算量更少、網(wǎng)絡(luò)結(jié)構(gòu)更加輕量化,在訓練時能夠更快地收斂,經(jīng)過約25 min訓練,最終訓練精度為99.32%,損失值為0.013 2。原SqueezeNet模型因網(wǎng)絡(luò)深度較深,權(quán)重多且更新慢,因此導致其收斂速度慢。經(jīng)過約40 min訓練最終訓練精度為99.65%,損失值為0.012 1。在大幅度降低T-SNet模型參數(shù)量與運算量的同時訓練精度僅下降0.33%,表明T-SNet模型結(jié)構(gòu)設(shè)計較為合理。
2.1.3 特征可視化 為論證改進模型的特征提取能力,利用t-SNE算法(t-distributed Stochastic Neighbor Embedding Algorithm)將模型所提取得深層特征進行可視化。所使用的t-SNE算法,又稱 t-分布隨機鄰近嵌入算法,是一種用于非線性數(shù)據(jù)降維的機器學習算法[40]。該算法主要思想是將高維點嵌入低維點,重點關(guān)注數(shù)據(jù)點之間的相似性。高維空間中鄰近點轉(zhuǎn)化為鄰近的嵌入低維點,而高維空間中遠點轉(zhuǎn)化為遠處的嵌入低維點[41]。因此,可以將高維數(shù)據(jù)進行可視化,即從原始高維數(shù)據(jù)中找到同類簇[42]。t-SNE算法相關(guān)參數(shù)設(shè)置,Perplexity為30,迭代次數(shù)為500次,采用歐氏距離計算數(shù)據(jù)點之間的距離。原SqueezeNet模型與改進T-SNet模型從數(shù)據(jù)集中提取的分類特征如圖7所示。
由圖7可知,優(yōu)化前后模型提取特征的能力旗鼓相當,都能準確地提取葡萄葉部健康、病害特征。結(jié)果表明改進后的模型特征提取能力較強,并沒有出現(xiàn)明顯的下降。因此,可將改進后的模型用于葡萄葉部病害的特征提取與識別。
2.1.4 模型性能測試 為驗證改進模型的泛化能力,利用測試集數(shù)據(jù)來測試改進模型的識別性能。同時,為體現(xiàn)改進模型的優(yōu)越性,選取經(jīng)典的輕量化網(wǎng)絡(luò)模型Xception、ShuffleNetv1、MobileNetv2以及原SqueezeNet作為對比分析,5種輕量化模型的參數(shù)信息及測試結(jié)果如表3所示。
表3 模型各項性能參數(shù)與測試結(jié)果
由表3可知,5種模型識別性能均表現(xiàn)優(yōu)異,其準確率都達到了99%以上。在4種原始模型當中,SqueezeNet模型不論是在模型參數(shù)方面,還是識別精度方面均表現(xiàn)最佳。T-SNet模型在原模型基礎(chǔ)上,大幅度降低模型內(nèi)存需求以及參數(shù)量的情況下,仍具有99%以上的識別精度,再次證明了所設(shè)計模型的合理性。T-SNet模型識別準確率、精準率以及召回率分別為99.04%、99.23%、99.24%,相比于SqueezeNet模型分別降低了0.32、0.27、0.26百分點。在模型性能參數(shù)方面,T-SNet模型內(nèi)存需求、參數(shù)量分別為原模型的21.14%,51.20%。在識別精度相差不到0.5%的情況下,T-SNet 具有更小的模型內(nèi)存以及參數(shù)量。因此,改進模型是明顯優(yōu)于原SqueezeNet模型的。
2.2.1 硬件設(shè)計 為實現(xiàn)果園葡萄葉部病害的快速檢測,設(shè)計了一款果園葡萄葉部病害快速識別與檢測裝置,其結(jié)構(gòu)如圖8所示。該系統(tǒng)包含了樹莓派控制模塊、加速計算模塊、圖像采集模塊以及顯示模塊。
所設(shè)計移動設(shè)備實物如圖9所示,樹莓派4B處理器為BCN2711四核1.5 GHz Cortex-A72處理器,4 G運行內(nèi)存,運行系統(tǒng)為Raspbian Buster;其他配置有USB 3.0接口、無線/有線通信模塊等。外接設(shè)備主要有3.5寸觸控顯示屏,分辨率為480×320;攝像頭為免驅(qū)USB攝像頭,焦距F 6.0 mm,視頻分辨率為640像素×480像素;通過USB 3.0接口連接USB加速棒,其型號為Intel Neural Compute Stick2,為樹莓派識別運算提供神經(jīng)網(wǎng)絡(luò)推理加速。電源模塊采用自帶5 V/3 A輸出能力的3 000 mA鋰電池進行供電,可供該移動設(shè)備連續(xù)工作6 h以上。
2.2.2 軟件設(shè)計 為實現(xiàn)果園葡萄葉部病害的快速與實時檢測,將T-SNet模型部署在樹莓派控制系統(tǒng)上進行應用。樹莓派軟件環(huán)境配置為Python3.7.3、OpenVINO庫。該設(shè)備軟件運行流程為設(shè)備開機、啟動軟件、系統(tǒng)初始化、打開攝像頭、調(diào)用深度學習模型識別,顯示識別結(jié)果等,具體流程見圖10。
將T-SNet模型部署到樹莓派之前,利用MATLAB軟件中的exportONNXNetwork函數(shù)將T-SNet模型轉(zhuǎn)化為ONNX文件格式,并利用OpenVINO中的DL WorkBench完成模型的量化、編譯以及部署。其中,量化是指將模型內(nèi)部權(quán)重值由單精度浮點型轉(zhuǎn)為8位整型,進一步減少模型在移動設(shè)備上運行時的內(nèi)存占用[43],但會有一定的精度損失。然后,利用生成的IR模型文件,即描述神經(jīng)網(wǎng)絡(luò)拓撲關(guān)系的.xml文件和儲存模型權(quán)重和偏差數(shù)據(jù)的.bin文件。最后,將IR文件通過無線藍牙模塊傳輸?shù)綐漭缮线M行部署應用。
2.2.3 識別效果 為分析所設(shè)計葡萄葉部病害檢測裝置的性能,隨機從測試集中選出4種葡萄健康與病害樣本,每類選取200張圖像進行測試(圖11)。同時,將2022年5月23號、2022年6月30日、2022年7月8日這3個時間段分別錄制的近 3 h 的葡萄健康葉片視頻(在廣州市從化區(qū)世外萄園中,使用飛螢8 SE相機錄制)作為移動設(shè)備實時檢測的驗證視頻,并利用混淆矩陣來展示移動設(shè)備識別各類葡萄樣本的精度(圖12)。
由圖12可知,所設(shè)計移動設(shè)備檢測葡萄葉部病害的準確率為95.75%,精準率為95.84%,召回率為96.23%。其中,200張健康葡萄葉片樣本被全部準確識別;200張葡萄褐斑病葉片有188張被正確識別,4張被誤識別為健康,8張被識別為黑腐病;而黑腐病與輪斑病由于患病早期病害特征較為相似,因此存在一定的相互誤識別現(xiàn)象。
為測試所設(shè)計裝置的檢測效率,利用在真實果園環(huán)境下所拍攝葡萄健康樣本視頻來實時檢測葡萄健康狀況。由表4可知,在精度方面,原模型與改進模型平均識別精度均達了95%以上,其精度相差在1百分點以內(nèi)。在檢測速度方面,在未使用USB加速棒的情況下,改進模型檢測速度在8~10幀/s,原模型在3~5幀/s,視頻畫面略顯卡頓;在使用USB加速棒的情況下,改進模型平均處理速度明顯提升可達86幀/s以上,而原模型平均檢測速度僅為 38幀/s。在使用USB加速棒的情況下,模型識別精度略微提升但不顯著。在實際應用中發(fā)現(xiàn),若只是拍攝葡萄葉片病害圖像進行檢測,樹莓派4B自身算力基本能夠滿足使用。因此,所設(shè)計移動便攜式葡萄病害快速檢測設(shè)備可滿足果園葡萄病害快速檢測與識別的應用要求。
表4 所設(shè)計葡萄葉部病害檢測裝置的檢測效果
針對果園葡萄病害葉部快速識別與檢測問題,采集了葡萄健康、病害樣本,制作了葡萄葉部病害數(shù)據(jù)集,并利用改進的輕量化卷積神經(jīng)網(wǎng)絡(luò)模型,開發(fā)了一套基于深度學習的葡萄葉部病害快速識別與檢測裝置,得到了如下結(jié)論:(1)基于MATLAB平臺,將經(jīng)典的SqueezeNet模型進行輕量化改進包括修改卷積核大小、數(shù)量以及Fire模塊數(shù)量等;改進后,模型內(nèi)存需求由2.46 MB減少為0.52 MB,模型參數(shù)量由125萬降低到64萬。(2)在相同試驗條件下,訓練模型并進行性能測試。在測試集上,改進模型識別準確率可達99.04%,僅比原模型下降了0.32百分點。利用t-SNE算法將原模型與改進模型提取的特征進行可視化,結(jié)果表明兩者的特征提取能力無明顯差異。(3)在真實果園環(huán)境下,所研制裝置識別準確率能夠達到95.75%,視頻檢測速度可達86幀/s以上,可滿足果園葡萄病害快速識別與檢測的需求。