李博,江朝暉, 2,洪石蘭,饒?jiān)? 2,張武, 2
(1. 安徽農(nóng)業(yè)大學(xué)信息與計(jì)算機(jī)學(xué)院,合肥市,230036;2. 智慧農(nóng)業(yè)技術(shù)與裝備安徽省重點(diǎn)實(shí)驗(yàn)室,合肥市,230036)
隨著卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural network, CNN)在農(nóng)業(yè)生產(chǎn)各個(gè)領(lǐng)域[1-3]的廣泛使用,許多專家和學(xué)者研究利用CNN識別玉米[4]、棉花[5]等作物病害。早期的卷積神經(jīng)網(wǎng)絡(luò)參數(shù)量大且計(jì)算復(fù)雜度高,對硬件計(jì)算能力要求很高,導(dǎo)致基于卷積神經(jīng)網(wǎng)絡(luò)的農(nóng)作物病害識別模型普遍需要部署在云端服務(wù)器[6]。隨著設(shè)備數(shù)量的爆炸式增長,云端部署深度學(xué)習(xí)方案無法滿足日益增長的處理和存儲需求。邊緣設(shè)備的數(shù)據(jù)上傳到云端處理會(huì)帶來通信延遲、隱私泄露等問題[7]。與云端部署不同,邊緣智能在更靠近數(shù)據(jù)源的位置處理數(shù)據(jù),減少了數(shù)據(jù)上傳到云平臺的帶寬和時(shí)延,進(jìn)一步釋放人工智能的潛力[8]。隨著邊緣設(shè)備計(jì)算能力的提高和輕量級神經(jīng)網(wǎng)絡(luò)的提出,基于邊緣智能的作物病害識別模型部署成為一種趨勢。Gonzalez-Huitron V等[9]分別使用輕量級神經(jīng)網(wǎng)絡(luò)MobileNetV2[10]、NasNetMobile[11]、Xception[12]和MobileNetV3[13]訓(xùn)練番茄葉片病害分類模型,并將模型部署到樹莓派4上。Durmu等[14]針對10種不同類型的番茄圖像,使用AlexNet作為分類模型在 NVIDIA Jetson TX1硬件上訓(xùn)練和部署模型。王健等[15]對MobileNet V2進(jìn)行模型壓縮和量化,將模型部署在PaddlePi-K210嵌入式開發(fā)板上。為了設(shè)計(jì)適合在邊緣設(shè)備上部署的CNN模型,王冠等[16]聯(lián)合使用通道剪枝、量化等多種模型壓縮方法對MobileNet進(jìn)行改進(jìn),設(shè)計(jì)了面向邊緣計(jì)算的輕量級植物病害識別模型。劉陽等[17]提出的用于識別多類葉片病害的改進(jìn)SqueezeNet模型,在減少了模型的計(jì)算量和對硬件的內(nèi)存需求的同時(shí),模型性能損失很少。
研究針對茶餅病、茶紅銹藻病、茶輪斑病、茶炭疽病、茶網(wǎng)餅病、茶圓赤星病、茶云紋葉枯病和茶藻斑病8種茶葉病害,通過綜合使用輕量級CNN、遷移學(xué)習(xí)方法和自動(dòng)化模型剪枝方法來訓(xùn)練能夠在邊緣設(shè)備上部署的茶葉病害識別邊緣端模型,并使用OpenCV將模型部署在不同的邊緣設(shè)備上,測試其性能。研究旨在探索解決邊緣設(shè)備資源有限情況下茶葉病害識別時(shí)間長、檢測精度低問題的方法。
PlantVillage數(shù)據(jù)集包含14個(gè)物種(蘋果、南瓜、藍(lán)莓、桃子、櫻桃、草莓、玉米、葡萄、橘子等),共61 542幅圖像。其中有26種病害、12種健康葉片,共38類。隨機(jī)抽取80%的數(shù)據(jù)集用作訓(xùn)練集,剩余20%用作測試集。
茶葉病害數(shù)據(jù)集是由安徽省農(nóng)業(yè)科學(xué)院農(nóng)業(yè)經(jīng)濟(jì)與信息研究所工作人員使用單反數(shù)碼相機(jī)在茶園實(shí)地拍攝(圖1),經(jīng)過相關(guān)專家識別確認(rèn)后,共獲得8種茶樹病害和健康茶葉共1 827張圖像。其中茶餅病280張,茶紅銹藻病131張,茶輪斑病135張,茶炭疽病359張,茶網(wǎng)餅病420張,茶圓赤星病129張,茶云紋葉枯病110張,茶藻斑病263張。健康茶葉圖像是通過攝像機(jī)定期在安徽農(nóng)業(yè)大學(xué)大楊鎮(zhèn)高新技術(shù)農(nóng)業(yè)園的茶園[18]拍攝而成,共1 074張。
分別隨機(jī)抽取80%和20%數(shù)據(jù)集作為訓(xùn)練集以及測試集。訓(xùn)練集用于訓(xùn)練模型,測試集用于在模型訓(xùn)練結(jié)束后檢測模型識別準(zhǔn)確率。與PlantVillage數(shù)據(jù)集不同,茶葉病害數(shù)據(jù)集是在茶園實(shí)地拍攝,是以土壤、天空等自然環(huán)境為背景,訓(xùn)練好的模型更適合在實(shí)際應(yīng)用場景中使用。
圖1 茶葉病害樣本圖像
數(shù)據(jù)增強(qiáng)分為離線增強(qiáng)和在線增強(qiáng)[5]。本研究使用在線增強(qiáng)的方法,先將訓(xùn)練集中圖像分辨率重置為256像素×256像素,再通過中心裁剪為224像素×224像素,然后在垂直和水平方向隨機(jī)翻轉(zhuǎn)圖像,最后使用均值和標(biāo)準(zhǔn)差對圖像進(jìn)行歸一化操作。
MobileNetV2[10]是Google公司提出的適合在邊緣設(shè)備部署的輕量級CNN。MobileNetV2通過反向殘差結(jié)構(gòu)(Inverted Residual Block)和線性瓶頸結(jié)構(gòu)(Libear Bottleneck),有效減少了模型的存儲體積,加快了模型推理速度。本研究選擇MobileNetV2作為基準(zhǔn)模型進(jìn)行訓(xùn)練。為了實(shí)現(xiàn)邊緣端茶葉智能識別,首先在PlantVillage數(shù)據(jù)集上壓縮MobileNetV2得到適合在邊緣端部署的模型,然后將該模型作為預(yù)訓(xùn)練模型,使用遷移學(xué)習(xí)的方法訓(xùn)練茶葉病害識別模型。
模型剪枝[19]主要通過刪除模型內(nèi)對模型性能影響不大的網(wǎng)絡(luò)連接,由于模型的每一層有不同的冗余和計(jì)算復(fù)雜度,模型剪枝技術(shù)的核心在于確定模型每一層壓縮策略。Liu等[20]研究表明,模型剪枝的策略可以由人工或算法確定。通過人工確定模型剪枝策略時(shí),主要依靠專業(yè)人員在實(shí)踐過程中總結(jié)的一系列規(guī)則來確定模型每個(gè)層要修剪的比例。然而,深度神經(jīng)網(wǎng)絡(luò)中的各個(gè)層之間不是獨(dú)立存在的,不同的模型的剪枝策略也不同,依靠人工來確定剪枝策略的過程十分復(fù)雜,需要依靠豐富的專業(yè)知識,且一個(gè)模型的剪枝策略很難遷移到另一個(gè)模型。為了提高模型剪枝效率,He等[21]使用強(qiáng)化學(xué)習(xí)替代傳統(tǒng)專家來確定模型剪枝的策略,提出了基于自動(dòng)機(jī)器學(xué)習(xí)的模型剪枝算法(AutoML for Model Compression, AMC)。
AMC算法主要分為Agent和Environment兩個(gè)部分,算法框架如圖2所示。Agent采用的是DDPG算法,主要是由Critic、Actor和Embedding三個(gè)部分組成。對模型進(jìn)行剪枝過程:第一步,通過訓(xùn)練一個(gè)強(qiáng)化學(xué)習(xí)Agent來預(yù)測動(dòng)作并給出模型每一層的稀疏度;第二步,按照第一步得到的剪枝策略使用通道剪枝方法對模型進(jìn)行剪枝操作;第三步,直接對剪枝后的模型進(jìn)行評估,通過鼓勵(lì)生成更小、更快和更準(zhǔn)確的模型來更新Agent。重復(fù)這三個(gè)步驟直到模型剪枝策略搜索完成后開始執(zhí)行微調(diào)(Fine-tuning)任務(wù),重新訓(xùn)練模型恢復(fù)模型的識別精度得到剪枝后的模型。
圖2 AMC算法框架
模型訓(xùn)練過程中使用遷移學(xué)習(xí)方法中的參數(shù)遷移[22]方法。將在PlantVillage數(shù)據(jù)集從頭開始訓(xùn)練得到的模型作為預(yù)訓(xùn)練模型,初始化預(yù)訓(xùn)練模型最后一層的參數(shù),凍結(jié)剩余其他層權(quán)重參數(shù)。在自建茶葉病害數(shù)據(jù)集上訓(xùn)練模型時(shí)只需要更新最后一層參數(shù)值,其他層參數(shù)保持不變。
CNN通常包括CNN層、池化層、激活函數(shù)、BN層和FC層等,其中CNN層和FC層的參數(shù)量和計(jì)算量最多,所以主要通過分析CNN層和FC層的參數(shù)量和計(jì)算量作為評價(jià)模型的復(fù)雜度的指標(biāo)。
1) 卷積層模型參數(shù)量計(jì)算。
W=Ci×C0×K×K+C0
(1)
式中:K——卷積核的大??;
Ci——卷積層輸入通道個(gè)數(shù);
C0——卷積層輸出通道個(gè)數(shù),偏置項(xiàng)的參數(shù)個(gè)數(shù)與C0個(gè)數(shù)相同,所以用C0偏置項(xiàng)的參數(shù)個(gè)數(shù)。
2) FLOPs計(jì)算。卷積層卷積操作的FLOPs計(jì)算公式
FLOPs=B×H×W×(Ci×K×K+1)×C0
(2)
全連接層的FLOPs計(jì)算公式
FLOPs=B×(Ci+1)×C0
(3)
其中,偏置項(xiàng)的參數(shù)個(gè)數(shù)依舊用C0,B代表Batch Size大小。
試驗(yàn)平臺操作系統(tǒng)使用Windows10,CPU選擇Intel(R) Core(TM) i5-8400 CPU@2.80GHz,GPU選用Nvidia GeForce GTX 1060 6GB。CUDA版本是11.2,使用Anaconda配置模型訓(xùn)練開發(fā)環(huán)境,Python 版本選擇3.7,深度學(xué)習(xí)框架是PyTorch,版本為1.7。
為了更好的對比試驗(yàn)結(jié)果,試驗(yàn)過程中模型訓(xùn)練使用相同的超參數(shù)配置。模型訓(xùn)練過程中采用批量訓(xùn)練的方法,綜合考慮數(shù)據(jù)集和顯存大小,Batch Size設(shè)置為128,模型處理完訓(xùn)練集和測試集中的全部圖像是1次迭代(Epoch),共400個(gè)Epoch。使用Adam[23]算法優(yōu)化模型,學(xué)習(xí)率初始值設(shè)為0.01,為了避免訓(xùn)練過程出現(xiàn)過擬合,使用指數(shù)衰減[24]方法動(dòng)態(tài)調(diào)整模型訓(xùn)練過程中的學(xué)習(xí)率。
模型剪枝是在PlantVillage數(shù)據(jù)集上進(jìn)行的。首先使用MobileNetV2在PlantVillage數(shù)據(jù)集上訓(xùn)練植物病害識別模型,然后使用AMC算法對該模型進(jìn)行剪枝,最后重新訓(xùn)練模型恢復(fù)模型的精度。在分別減掉30%、50%和70%的FLOPs情況下,模型剪枝結(jié)果如表1所示。
試驗(yàn)過程中,當(dāng)剪枝率大于90%時(shí),模型精度損失較為嚴(yán)重。當(dāng)剪枝率為70%、80%和90%,模型的存儲體積分別減少了74.7%、83.7%和93.6%,與未剪枝的模型相比模型識別準(zhǔn)確率僅下降了0.03%、0.05%、0.1%。
表1 模型剪枝結(jié)果Tab. 1 Model pruning results
使用自建茶葉病害數(shù)據(jù)集訓(xùn)練茶葉病害識別模型。分別將PlantVillage數(shù)據(jù)集上訓(xùn)練得到的原始MobileNetV2模型和AMC算法剪枝率為90%時(shí)得到的邊緣端模型AMC-MobileNetV2作為遷移學(xué)習(xí)預(yù)訓(xùn)練模型來訓(xùn)練茶葉病害識別模型,模型訓(xùn)練迭代次數(shù)為400,訓(xùn)練過程中的準(zhǔn)確率、LOSS曲線如圖3所示。
(a) 訓(xùn)練過程準(zhǔn)確率
(b) 訓(xùn)練過程LOSS曲線
通過分析表2可知,與使用MobileNetV2作為遷移學(xué)習(xí)過程預(yù)訓(xùn)練模型相比,AMC-MobileNetV2在模型參數(shù)量減少94.5%、存儲體積減小93.4%的情況下,模型準(zhǔn)確率僅下降0.7%,使用AMC算法剪枝后的邊緣端模型作為預(yù)訓(xùn)練模型訓(xùn)練茶葉病害分類識別模型,在保證模型準(zhǔn)確率的同時(shí),有效減少模型參數(shù)量和模型存儲體積。
表2 兩種茶葉病害識別模型識別結(jié)果Tab. 2 Identification results of two tea diseaseidentification models
通過表3可知,AMC-MobileNetV2模型可以很好地識別茶葉病害,但對不同病害識別準(zhǔn)確率不同。其中,茶餅病、茶紅銹藻病、茶圓赤星病、茶云紋葉枯病以及健康茶葉識別準(zhǔn)確率達(dá)到100%,茶輪斑病識別準(zhǔn)確率最低,只有77.78%。
表3 模型剪枝前后8種茶葉病害識別準(zhǔn)確率Tab. 3 Accuracy of identification of 8 tea diseasesbefore and after model pruning
分別在Jetson Xavier NX[25]、樹莓派4B和智能手機(jī)上部署茶葉病害識別模型。Jetson Xavier NX擁有384個(gè)基于Volta架構(gòu)的CUDA核心的GPU,6個(gè)Carmel ARM v8.2 64-bit CPU,內(nèi)存為8 GB。手機(jī)選擇的是榮耀V20,CPU是麒麟980主頻最高為2.6 GHz,內(nèi)存為8G,識別結(jié)果如圖4所示。樹莓派4B擁有四核Cortex-A72 64-bit @ 1.5GHz CPU,內(nèi)存為2 G。
在邊緣設(shè)備上使用OpenCV部署模型和測試模型性能。OpenCV版本選擇4.5.1,由于OpenCV不支持直接解析PyTorch模型,需要先將訓(xùn)練好的PyTorch模型轉(zhuǎn)化為ONNX(Open Neural Network Exchange)格式,然后使用OpenCV DNN模塊讀取ONNX模型執(zhí)行模型推理,測試模型單張圖片平均識別時(shí)間,最后使用OpenCV GUI模型顯示模型識別結(jié)果。
通過分析表4可知,AMC-MobileNetV2模型在不同性能的邊緣設(shè)備上性能表現(xiàn)均超過原始MobileNetV2模型,減少模型的參數(shù)的同時(shí),提升了模型推理速度,更加適合在資源有限的邊緣設(shè)備上部署。
(a) Jetson Xavier NX上識別結(jié)果
(b) 樹莓派4B上識別結(jié)果
(c) 榮耀V20上識別結(jié)果
表4 不同邊緣設(shè)備上單張圖片平均識別時(shí)間Tab. 4 Average recognition time for a single image on different edge devices
本研究為實(shí)現(xiàn)在資源有限的邊緣設(shè)備上部署茶葉病害識別模型,首先使用AMC算法在PlantVillage數(shù)據(jù)集上對MobileNetV2進(jìn)行模型剪枝操作,然后將剪枝率為90%時(shí)生成的模型AMC-MobileNetV2和原始MobileNetV2模型分別作為預(yù)訓(xùn)練模型在自建茶葉病害數(shù)據(jù)集上進(jìn)行遷移學(xué)習(xí)訓(xùn)練,獲得兩種茶葉病害識別模型,最后利用OpenCV將兩種模型部署在三種性能不同的邊緣設(shè)備上,對比它們的識別準(zhǔn)確率、模型參數(shù)量、模型存儲體積和推理速度,得到如下結(jié)論。
1) 模型剪枝試驗(yàn)過程中,AMC算法使用深度強(qiáng)化學(xué)習(xí)代替專家來確定模型剪枝策略進(jìn)行模型剪枝,在模型FLOPs減少70%~90%的情況下,模型的存儲體積減少了74.7%~93.6%,識別準(zhǔn)確率99.89%~99.82%,試驗(yàn)結(jié)果表明,AMC算法可以有效提高模型剪枝效率,減少人力消耗。
2) 兩種茶葉病害識別模型對比試驗(yàn)表明,AMC-MobileNetV2模型對茶葉病害具有很強(qiáng)的識別能力,在損失較小識別準(zhǔn)確率的情況下,有效減少模型參數(shù)量和存儲體積,提高模型識別速度,可以部署在不同性能的邊緣設(shè)備上,研究結(jié)果可以直接應(yīng)用于茶園病害防治機(jī)器人上。
茶葉病害的種類還有很多,同時(shí)茶葉不同生長階段病害呈現(xiàn)的特征也不同,因此在后續(xù)的研究中還需要進(jìn)一步擴(kuò)大茶葉病害識別范圍。
中國農(nóng)機(jī)化學(xué)報(bào)2022年6期