王 冠,王建新,孫 鈺
(1. 北京林業(yè)大學 信息學院,北京 100083;2. 北京航空航天大學 網(wǎng)絡空間安全學院,北京 100191)
植物病害是導致現(xiàn)代農(nóng)林業(yè)減產(chǎn)的主要原因,及時準確的植物病害識別技術是實施有效防治的關鍵。在實際生產(chǎn)中,植物病害識別主要依靠人工肉眼觀察及經(jīng)驗判斷,需要人們在實地進行持續(xù)監(jiān)測[1?2]。這種人工評估方法耗時費力且具有一定的主觀性,阻礙了現(xiàn)代農(nóng)林業(yè)的快速發(fā)展,因此,快速準確的植物病害自動識別成為了精準農(nóng)業(yè)、高通量植物表型和智能溫室等領域的研究熱點[3?4]?;趫D像處理的植物病害識別方法得到了廣泛的研究和應用。早期的識別過程需要從圖片中分割病斑,人工提取病斑特征,再利用機器學習算法對特征進行分類。HIARY等[5]提取病斑的紋理特征,采用k-means聚類算法和人工神經(jīng)網(wǎng)絡(artificial neural network,ANN)對5種植物病害進行識別,準確率達94%。TIAN等[6]提出用基于支持向量機(support vector machine,SVM)的多分類器識別小麥Triticum aestivum葉部病害。秦豐等[7]對4種苜蓿Medicago葉部病害進行識別研究,分析比較了多種分割方法、特征選擇和分類方法。雖然以上方法在特定場景取得了較好效果,但仍無法實現(xiàn)病害的現(xiàn)場實時診斷。這些方法極大程度上基于閾值的病斑分割算法,對亮度、物體形態(tài)和遮擋程度都非常敏感[8?9],都只適合背景單一且對比度高的掃描式圖像。此外,特征提取和選擇復雜耗時,僅局限于有限幾種病害,難以處理復雜背景的大數(shù)據(jù)。近年來,深度學習在計算機視覺領域取得重大突破。深度卷積網(wǎng)絡神經(jīng)網(wǎng)絡(convolutional neural network,CNN)可在大數(shù)據(jù)中自動端到端提取特征,避免了人工圖像分割和特征工程[10]。MOHANTY等[11]針對PlantVillage數(shù)據(jù)集[11]54 306張植物病害圖像,使用AlexNet[12]和GoogLeNet[13]識別38種植物病害。孫俊等[14]在同樣的數(shù)據(jù)集上,將AlexNet進行改進,提出一種批歸一化與全局池化相結合的識別模型。龍滿生等[15]采用參數(shù)精調(diào)的遷移學習方式訓練AlexNet,用于油茶Camellia oleifera病害圖像識別。張建華等[16]基于改進的VGG16模型,通過遷移學習實現(xiàn)自然條件下棉花Anemone vitifolia病害圖像分類。DECHANT等[17]提出了集成多個CNN的方法,實現(xiàn)玉米Zea mays大斑病圖像的高精度識別。PICON等[18]利用深度殘差網(wǎng)絡ResNet對3種早期小麥病害進行識別,改善了復雜背景下的病害識別率。通常深度學習模型部署在云平臺,需要將拍攝圖像上傳至云平臺進行識別。但這種方法嚴重依賴高速的4G/5G無線網(wǎng)絡和強大的云平臺,不僅無法覆蓋廣大偏遠農(nóng)田林地,長時間大范圍的上傳與識別還導致能耗、流量及云服務成本大幅上漲,限制了物聯(lián)網(wǎng)的建設規(guī)模。然而,目前的監(jiān)控設備借助低成本低功耗加速芯片,即可支持邊緣計算,僅在發(fā)現(xiàn)病害時通過低功耗廣覆蓋的NBIoT網(wǎng)絡[19]上報,可顯著降低網(wǎng)絡及云服務成本,促進大規(guī)模的農(nóng)林業(yè)物聯(lián)網(wǎng)普及。但現(xiàn)有的CNN模型計算量和參數(shù)量過大,不適用于邊緣部署。輕量級模型MobileNet[20]在速度和精度兩者間達到了一個較好的均衡,但其目標平臺是手機等高端嵌入式平臺,參數(shù)量及運算量仍超過PaddlePi等廉價邊緣設備的承受能力。近年來,學術界也提出了多種模型壓縮方法。模型通道剪枝[21]剪裁掉模型一部分冗余或低權重的卷積核,減少模型的參數(shù)量。量化[22]將模型由32 bit浮點數(shù)轉(zhuǎn)化為定點整數(shù),減少模型參數(shù)占用的空間。然而上述壓縮方法僅應用于ResNet等重量級模型,尚未對MobileNet等輕量級模型壓縮進行優(yōu)化,而且這些壓縮方法彼此相互獨立,未能聯(lián)合使用實現(xiàn)模型的深度壓縮。為解決上述問題,本研究提出了面向邊緣計算的植物病害識別模型構建方法,主要貢獻為:①首次針對輕量級模型MobileNet實現(xiàn)深度壓縮。②通過聯(lián)合通道剪枝、量化等多種模型壓縮方法,得到了深度壓縮的輕量級邊緣端模型,可在廉價邊緣節(jié)點運行。③將模擬學習方法[23]與量化相結合,實現(xiàn)模型壓縮的同時,提升識別效果,最后得到的邊緣端模型可達到與原模型相近的識別準確率。
本研究使用PlantVillage植物病害數(shù)據(jù)集。PlantVillage既包含單一背景下的植物葉片掃描式圖像,也收錄自然背景下的植物葉片圖像,包括葉片重疊、陰影和土壤干擾等情形。截至目前已收集了87 280張圖像,包括25種植物和29種病害組成的58類植物-病害組合(圖1)。
數(shù)據(jù)集按圖1所示的編號將各種葉片歸類并制作標簽。隨機抽取數(shù)據(jù)集中60%圖像作為訓練集,剩余的40%作為測試集。單一背景圖像與自然背景圖像使用相同的分割比例。由于PlantVillage數(shù)據(jù)集包含從不同角度對同一葉片拍攝的多張圖像,因此相同葉片的圖像僅存在于訓練集或測試集中。
圖 1 PlantVillage 數(shù)據(jù)集植物病害示例圖Figure 1 Example of plant disease images from the PlantVillage dataset
選擇輕量級卷積神經(jīng)網(wǎng)絡MobileNet[20]作為本研究的基準模型。MobileNet模型將傳統(tǒng)的卷積分解為一個深度卷積 (depthwise convolution,DC)和一個卷積核為 1×1的逐點卷積 (pointwise convolution,PC),計算速度比傳統(tǒng)卷積快8~9倍,主要面向智能手機等高端嵌入式系統(tǒng)。為深度壓縮MobileNet,本研究提出了如圖2所示的面向邊緣計算的植物病害識別模型二階段構建方法。
第1階段使用通道剪枝壓縮遷移學習訓練的MobileNet模型。與從頭訓練方法相比,遷移學習可以有效提升模型的識別準確率。遷移學習是用ImageNet數(shù)據(jù)集上預訓練好的參數(shù)初始化模型,然后在PlantVillage數(shù)據(jù)集上通過標準多分類損失函數(shù)優(yōu)化模型參數(shù)。最后使用基于L1范數(shù)的通道剪枝[21]精簡低權值的卷積核,同時將該卷積核所有的輸入輸出連接從網(wǎng)絡中刪除,降低了模型計算量和存儲空間。
圖 2 面向邊緣計算的植物病害識別模型構建方法:通道剪枝和量化模擬學習Figure 2 Plant disease recognition model for edge computing building pipeline: channel pruning and quantized mimic learning
第2階段對剪枝后的模型通過量化方法進一步壓縮,得到輕量級的邊緣端模型。量化是將模型的權值和激活值由32 bit降低至8 bit,分為訓練時量化和訓練后量化。雖然訓練時量化方法更適用于輕量級模型,但直接使用該方法壓縮剪枝后的
MobileNet模型仍會導致識別精度顯著下降,因此第2階段將模擬學習與訓練時量化相結合,利用遷移學習的MobileNet監(jiān)督剪枝后模型的量化訓練過程,實現(xiàn)量化模擬學習,在模型壓縮的同時提升識別準確率。
1.2.1 通道剪枝 模型通道剪枝采用均勻剪枝方法對MobileNet模型的分離卷積層進行通道剪枝,即每層都減掉同樣比例的卷積核。依據(jù)需要減少模型的浮點運算數(shù)量 (floating point operations, FLOPs)來確定每層的剪枝比例。計算各層中每個卷積核權值的絕對值和(即L1范數(shù)),L1范數(shù)越大,代表該卷積核對模型的貢獻越大,反之越小。每層按L1范數(shù)由高到低的順序排序卷積核,優(yōu)先剪枝L1范數(shù)低的卷積核。為實現(xiàn)模型的深度壓縮,需進行較高比例的通道剪枝,分別對模型減掉70%、80%和90%的FLOPs。
1.2.2 量化模擬學習 通常訓練時,量化的損失函數(shù)是標準的多分類損失函數(shù)。量化模擬學習是用模擬學習損失函數(shù)作為訓練時量化的損失函數(shù)。模擬學習方法使剪枝量化后模型的輸出特征盡量接近遷移學習訓練的MobileNet輸出特征。利用2個輸出特征之間的L2范數(shù)作為模擬損失函數(shù),即:
式(1)中:Wt和Ws分別是遷移學習訓練的MobileNet和剪枝量化后模型的權值矩陣,F(xiàn)(x;Wt)和F(x;Ws)分別表示這2個模型的輸出特征值。
剪枝量化后模型的輸出特征再經(jīng)Softmax歸一化得到預測類別概率,與分類標簽比較后得到交叉熵,作為標準多分類損失函數(shù)Lclass(Ws)。模擬學習的完整損失函數(shù)就是分類損失函數(shù)與模擬損失函數(shù)的權重和:
式(2)中:α為平衡損失權重的超參數(shù)。相較于普通多分類問題的損失函數(shù),模擬學習方法可提供額外的監(jiān)督信息。
將訓練時量化方法與模擬學習相結合,實現(xiàn)量化模擬學習具體的訓練步驟為:①在訓練的前向傳播中,將模型的權值wf和激活值af進行量化得到定點值wq和aq,對于浮點數(shù)x具體的量化過程為:
xQ即為得到的量化值。其中:clamp函數(shù)對于輸入的變量a,b,c輸出為:
也就是將浮點數(shù)除以縮放因子Δ,再最近鄰取整,最后把范圍限制到1個區(qū)間內(nèi)。N與量化后整數(shù)類型占用的比特數(shù)有關。本研究采用有符號8 bit整數(shù)類型,N=256。對于權值,每層權值的最大絕對值作為縮放因子。對于激活值,計算各訓練批次激活的最大絕對值的滑動平均值作為縮放因子。②計算剪枝量化后模型對遷移學習訓練的MobileNet進行模擬學習的損失函數(shù),即計算公式(2),得到損失值L(wq)。③后向傳播過程,利用步驟②得到的損失函數(shù)值對量化之后的權值求梯度,公式為。④用步驟③計算梯度去更新量化前的浮點值,也就是將模型的權值反量化回有誤差的浮點類型。公式為,其中:ν為學習率。因此,模型的后向傳播過程仍然是浮點數(shù)計算。⑤重復步驟①至步驟④,直至完成訓練。最后再對模型按照步驟①量化,得到最終的邊緣端模型。
模型實現(xiàn)和訓練采用的軟件環(huán)境為Ubuntu1 6.04操作系統(tǒng)和PaddlePaddle深度學習框架,硬件環(huán)境為 GPU 工作站,使用 NVIDIA Titan X 顯卡 (12 GB 顯存)和 AMD Ryzen 7 1700X 處理器 (32 GB 內(nèi)存)。采用模型的平均識別準確率(accuracy)作為衡量模型精度的標準。同時為了更好地評價模型的魯棒性,將每類病害樣本分別進行測試,計算每個類別的查準率(precision)、查全率(recall)以及查全率與查準率的加權平均分數(shù),并在所有類別上求平均。
訓練CNN模型需要對輸入圖片進行預處理。首先,利用數(shù)據(jù)增廣技術對原圖像進行變換,將訓練圖像變換為256×256大小,然后再隨機剪枝成224×224,再進行隨機水平翻轉(zhuǎn)和隨機垂直翻轉(zhuǎn)。該過程極大擴充了訓練數(shù)據(jù)集的多樣性,可提升CNN模型的準確率,降低網(wǎng)絡過擬合的風險。之后,計算訓練集的紅(R)、綠(G)、藍(B)3個顏色通道的均值和方差,所有圖像都減去該均值,除以方差,得到歸一化后的數(shù)據(jù)作為CNN的輸入,可加速訓練過程收斂。對于測試集中的每一張圖片,需要變換至224×224大小,減去訓練集各通道均值,除以其方差進行歸一化后就可以輸入CNN模型進行識別。
利用遷移學習訓練MobileNet,使用ImageNet數(shù)據(jù)集預訓練的參數(shù)初始化模型,采用批量訓練的方法將訓練集分為多個批次(batch),使用隨機梯度下降算法來實現(xiàn)模型優(yōu)化,批次大小為32,遍歷1次訓練集中的所有圖片作為1個周期(epoch),共迭代50個周期,初始學習率為0.005,動量值為0.9,之后每迭代20個周期就將學習率減小為原來的0.1倍。訓練好的模型參數(shù)量為3.3 M,識別準確率為96.23%,查準率、查全率和加權平均分數(shù)分別為96.62%、95.46%和95.75%。
研究不同壓縮率下本研究方法的有效性,使用不同的剪枝率,分別對模型減掉不同比例的FLOPs。結果表明:當剪枝率低于60%時,即使使用無模擬訓練方法重新訓練模型,得到的識別準確率與原MobileNet模型差別很小,說明原模型在該數(shù)據(jù)集上具有較高的冗余性,只有當剪枝率高于70%時,才能體現(xiàn)不同壓縮方法表現(xiàn)的差距。因此,設置剪枝率為70%、80%和90%,對應的模型參數(shù)量大小為0.91、0.58和0.23 M,模型的參數(shù)量壓縮了3.6、5.7、14.3倍,量化又將精度由32 bit降低至8 bit,壓縮率為4倍,得到的邊緣端模型的整體壓縮率分別為14.4、22.8和57.2倍。為快速恢復剪枝后模型精度,首先利用模擬學習損失函數(shù)進行30個周期的32 bit浮點模型訓練,使用隨機梯度下降算法優(yōu)化模型,批次大小為32,初始學習率為0.005。之后,每迭代15個周期就將學習率減小為原來的0.1倍。公式(2)的α值設置為1。之后再進行20個周期的量化模擬學習,學習率為0.005,公式(2)的α值為0.1,其余超參數(shù)值不變。訓練結果如表1所示。
表1表明:整體壓縮率分別為14.4、22.8和57.2倍的邊緣端模型,識別準確率分別為95.99%、95.55%和94.58%,與遷移學習訓練的MobileNet模型相比僅下降了0.24%、0.68%和1.65%。同時查準率、查全率和加權平均分數(shù)值也表明邊緣端模型具有較高的魯棒性。
表 1 邊緣端模型植物病害識別結果Table 1 Plant disease recognition results of models on the edge
不同壓縮率的邊緣端模型在測試集的混淆矩陣如圖3所示。圖3列出了58個類中的每類被正確分類的比例(對角線上的值)和被誤識別為其他類的比例(非對角線上的值)。每類的編號與圖1一致??梢钥闯觯哼吘壎四P蛯Σ煌参锏牟煌『哂休^強的識別能力,但不同病害識別結果之間存在著較大的差異。58類病害中,這3個邊緣端模型的識別準確率均超過90%的有43類,均超過80%的有51類,均超過70%的有55類。其中有11號哈密瓜健康葉、24號葫蘆霜霉病、25號葡萄健康葉、39號樹莓健康葉、46號草莓健康葉這5類的識別準確率在3個模型均達到了100%。識別效果最差,在3個模型上識別準確率幾乎均低于70%的病害是12號木薯褐斑病(3個模型識別率分別為48.15%、58.33%、48.15%),35號馬鈴薯健康葉(3個模型識別率分別為48.33%、33.33%、48.33%),21號黃瓜健康葉(3個模型識別率分別為67.92%、66.04%、77.36%)。這些病害大多都被誤識別為外形相似的其他病害,例如12號木薯褐斑病被誤識別為13號木薯綠螨病,35號馬鈴薯健康葉被誤識別為病斑較小的36號馬鈴薯晚疫病,21號黃瓜健康葉被誤識別為11號哈密瓜健康葉。
圖 3 邊緣端模型在測試集的混淆矩陣Figure 3 Confusion matrix on the test set of models on the edge
為進一步測試邊緣端模型性能,分別在剪枝率70%、80%和90%的條件下,利用無模擬學習方法,即標準的多分類損失函數(shù)分別訓練通道剪枝后模型和通道剪枝并量化模型,訓練的超參數(shù)與本研究的訓練超參數(shù)一致,與本研究模型進行對比實驗。從表2可見:在不同的剪枝率的情況下,本研究模型與其他模型壓縮方法相比均具有更高的模型壓縮率和識別準確率,而且壓縮率越高,識別準確率相比其他方法提升越明顯,能更好識別植物病害類別并部署于邊緣設備。
表 2 不同壓縮方法邊緣端模型植物病害識別結果Table 2 Plant disease recognition results of models on the edge compressed by different methods
本研究針對邊緣環(huán)境下計算資源的限制,在遷移學習訓練的MobileNet模型基礎上,聯(lián)合使用2種壓縮算法降低模型參數(shù)量和運算量,并結合模擬學習恢復識別精度,得到深度壓縮的邊緣端模型。在PlantVillage的實驗結果表明:利用本研究方法對MobileNet進行不同程度的深度壓縮,均能夠大大減少網(wǎng)絡計算量并保留原始識別能力。其中減少70%~90% FLOPs的模型,參數(shù)量壓縮了3.6~14.3倍,再經(jīng)過量化模擬學習后整體壓縮率為14.4~57.2倍,準確率達到了95.99%~94.58%,較遷移學習訓練的MobileNet模型僅降低0.24%~1.65%,同時還具有較高的魯棒性,對不同植物的不同病害均具有較強的識別能力。實驗結果證明了該壓縮方法的可行性和有效性。
隨著PlantVillage數(shù)據(jù)集的不斷擴展,深度學習模型能更多更準地識別植物病害。本研究提出的模型構建方法可平衡識別的速度和精度,滿足植物病害識別邊緣部署的需求。