姚 強,付忠軍,李君保,呂 斌,粟 超,郭彩霞
(1.重慶市農(nóng)業(yè)科學(xué)院,重慶 401239;2.酉陽縣農(nóng)業(yè)技術(shù)推廣站,重慶酉陽 409800;3.重慶市農(nóng)業(yè)學(xué)校,重慶 401239)
玉米具有豐富的營養(yǎng)價值,作為重要的糧食作物在我國被廣泛種植,其產(chǎn)量約占我國糧食總產(chǎn)量的1/4。病蟲害的發(fā)生會直接影響玉米產(chǎn)量,如果不能及早識別并進行防治,會造成大幅減產(chǎn)。在種植過程中,病蟲害的發(fā)現(xiàn)、診斷與防治是玉米生產(chǎn)中的重要環(huán)節(jié)。如何及時準(zhǔn)確地診斷出病蟲害信息,并給出合理有效的防治措施,已成為一個重要研究方向。隨著信息技術(shù)、AI、物聯(lián)網(wǎng)、大數(shù)據(jù)、移動互聯(lián)網(wǎng)等的高速發(fā)展,越來越多的技術(shù)和產(chǎn)品被應(yīng)用于玉米生長過程監(jiān)測、病蟲害識別診斷。隨著智能手機已在國內(nèi)廣泛普及使用,且性能越來越好,其自身攜帶的攝像頭為隨時拍攝圖像和視頻提供了極大的便捷。本研究基于深度學(xué)習(xí)的方法開展玉米病蟲害識別診斷模型設(shè)計與訓(xùn)練,開發(fā)了基于Android 系統(tǒng)的玉米病蟲害智能診斷系統(tǒng)手機APP。
近十年,國內(nèi)外農(nóng)業(yè)領(lǐng)域越來越多地應(yīng)用了圖像識別、機器視覺、深度學(xué)習(xí)等技術(shù)。深度學(xué)習(xí)以其自動提取特征、學(xué)習(xí)能力強、覆蓋范圍廣、適應(yīng)性好、可移植性好等特點,越來越受到重視。在玉米病蟲害識別應(yīng)用上,國內(nèi)外開展了大量基于深度學(xué)習(xí)的探索和研究。例如,樊湘鵬等為解決田間環(huán)境復(fù)雜背景下病害識別困難、識別模型應(yīng)用率低的問題,提出了一種基于改進卷積神經(jīng)網(wǎng)絡(luò)的玉米病害識別方法,對田間復(fù)雜背景下的9 種玉米病害進行識別[1]。許景輝等在Image Net 數(shù)據(jù)集上對玉米病害(大斑病、銹?。┦褂肰GG16 預(yù)訓(xùn)練模型進行病害識別,提升了模型識別精度和訓(xùn)練效率[2]。劉翱宇等針對玉米葉病害識別的問題,引入焦點損失函數(shù)(Focal Loss)專注于難分類的病害樣本,提出了一種深度殘差網(wǎng)絡(luò)TFL-Res Net,在Res Net50 網(wǎng)絡(luò)的基礎(chǔ)上利用遷移學(xué)習(xí),對玉米4 種病害進行識別,新網(wǎng)絡(luò)收斂更快,效果更好[3]。王國偉等采用LeNet 模型,對玉米花葉病、灰斑病、銹病、葉斑病進行識別試驗[4]。朱家輝等對Al Challenger 比賽的農(nóng)作物葉片病害數(shù)據(jù)集圖像預(yù)處理后,使用VGG16 和Res Net50 對玉米等農(nóng)作物病害圖像進行分類識別[5]。Xu 等人為了提高玉米病害識別的準(zhǔn)確性,避免參數(shù)過多導(dǎo)致的過擬合問題,用全局匯集層替換全連通層,提出了一種多尺度卷積全局池化的神經(jīng)網(wǎng)絡(luò)[6]。Chen 等基于DenseNet,保留過渡層結(jié)構(gòu),使用深度可分離卷積替換傳統(tǒng)卷積層,并嵌入注意力模塊,提出一種基于注意力嵌入的輕量級新型玉米病害識別網(wǎng)絡(luò)[7]。陳桂芬等使用CNN 模型基于遷移學(xué)習(xí)方法對玉米5 種常見病害(3 種斑點病害及黑穗病、瘤黑粉?。┻M行識別[8]。李恩霖等使用PlantVillage 公開數(shù)據(jù)集作為病害樣本,分別基于VGG16、Inception V3、ResNet50、ResNet101、DenseNet121 等5 種深度卷積神經(jīng)網(wǎng)絡(luò)建立病害識別模型,對銹病、葉枯病、灰斑病3 種典型玉米病害開展分類識別研究[9]。
模型設(shè)計主要包括:病蟲害種類的選取、深度學(xué)習(xí)網(wǎng)絡(luò)的選擇等。
2.1.1 病蟲害種類選取
模型選取10種發(fā)生在玉米植株地上部位的常見病蟲害,包括大斑病、小斑病、紋枯病、莖腐病、南方銹病、玉米螟、玉米黏蟲、玉米棉鈴蟲、玉米蚜蟲、玉米葉螨。
2.1.2 深度學(xué)習(xí)網(wǎng)絡(luò)選擇
深度學(xué)習(xí)網(wǎng)絡(luò)有很多種類,卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要用在計算機視覺(CV)中,在圖像處理方面表現(xiàn)十分出色,當(dāng)前開展的基于深度學(xué)習(xí)的農(nóng)作物病蟲害診斷識別大多采用CNN網(wǎng)絡(luò)。
模型采用自定義CNN 網(wǎng)絡(luò)和DenseNet201 網(wǎng)絡(luò)分別開展訓(xùn)練。自定義CNN 的網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。DenseNet201的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 DenseNet201網(wǎng)絡(luò)結(jié)構(gòu)圖
CNN 的基本結(jié)構(gòu)由輸入層(Input layer)、卷積層(Convolutional layer)、池化層(Pooling layer)、全連接層(Fully connected layer)及輸出層(Output layer)構(gòu)成。卷積層提取圖像特征,池化層對特征抽樣,全連接層將提取的特征連接起來,分類器輸出結(jié)果。本研究使用的CNN 網(wǎng)絡(luò)有10 個輸入層神經(jīng)元(對應(yīng)10個玉米病蟲害分類),神經(jīng)元的激活函數(shù)用Relu,輸入圖像大小為228×228 像素,圖像格式RGB,1 個卷積層和1個池化層構(gòu)成1組,共設(shè)置了3組,分類輸出層使用Softmax 分類器,輸出結(jié)構(gòu)是1 個長度為10 的一維數(shù)組。
DenseNet201是DenseNet網(wǎng)絡(luò)(Dense Convolutional Network,密集卷積網(wǎng)絡(luò))系列中的一種,也是一種深度卷積神經(jīng)網(wǎng)絡(luò),在圖像分類時性能更好。DenseNet網(wǎng)絡(luò)的核心結(jié)構(gòu)主要由兩個模塊組成,一個是Dense Block,一個是Transition。Dense Block 主要完成密集連接,Transition 是不同Dense Block 之間的過渡。DenseNet201網(wǎng)絡(luò)構(gòu)建過程如下:首先構(gòu)造1個卷積核為7×7、步長為2的卷積層,然后構(gòu)造1個大小為3×3、步長為2 的max pool 層,再構(gòu)造第1 個DenseBlock,DenseBlock 的基本單元是BN-ReLU-Conv(1x1)-BNReLU-Conv(3×3),其中的Conv(1×1)用來降維、減少計算和參數(shù),第一個DenseBlock 包含6 個基本單元,在DenseBlock 后構(gòu)造1 個Transition,Transition 的基本單元是Conv(1×1)-Avgpooling,這里的Conv(1×1)也是用來降維,Avgpooling 的大小是2×2、步長是2,用來降低特征圖大?。蝗缓髽?gòu)造第二個DenseBlock,包含12個DenseBlock 基本單元,再是第二個Transition;第三個DenseBlock 包含48 個基本單元,接著是第三個Transition;第四個DenseBlock 包含32 個基本單元,最后是構(gòu)造1 個大小為7×7 的global average pool,1 個全連接層和1 個softmax 分類器,構(gòu)造過程中DenseBlock和Transition交替設(shè)置。
主要包括:圖像數(shù)據(jù)的采集、圖像數(shù)據(jù)的預(yù)處理、模型訓(xùn)練環(huán)境的配置、圖像數(shù)據(jù)的劃分、模型訓(xùn)練。
2.2.1 圖像數(shù)據(jù)采集
用于訓(xùn)練玉米病蟲害智能診斷模型的圖像數(shù)據(jù)主要來源于兩個部分:一部分采集于重慶市內(nèi)的玉米種植區(qū),采集時間在2023 年5—8 月,光照條件為自然光,采集設(shè)備包括智能手機自帶攝像頭、數(shù)碼相機等。為提高圖像數(shù)據(jù)的清晰度和病蟲發(fā)生部位的聚焦度,減少圖像曝光率,部分圖像采集時使用了高清鏡頭、濾鏡等工具。另一部分為互聯(lián)網(wǎng)上采集的圖像數(shù)據(jù),少量來源于公共數(shù)據(jù)集。圖像數(shù)據(jù)總量為3 733幅。
2.2.2 圖像數(shù)據(jù)的預(yù)處理
對圖像數(shù)據(jù)進行了以下預(yù)處理:
1)裁剪。很多采集的圖像數(shù)據(jù)包含了除玉米植株和病蟲害之外的無用甚至影響識別診斷準(zhǔn)確性的部分,如植株間的雜草、田塊邊界的田埂、田邊的樹木等。對圖像數(shù)據(jù)進行裁剪,使圖像只保留發(fā)生病蟲害的玉米植株或部位。
2)切片。將圖像數(shù)據(jù)切成固定大小,將圖像數(shù)據(jù)切成228×228像素大小。
3)灰度變換。將RGB 格式的彩色圖像轉(zhuǎn)化為灰度圖像,使圖像更清晰、特征更明顯。
2.2.3 模型訓(xùn)練環(huán)境配置
基于Python 語言構(gòu)建模型訓(xùn)練環(huán)境,具體配置如下:Python 版本使用3.7.0,集成開發(fā)環(huán)境使用PyCharm,2 種網(wǎng)絡(luò)結(jié)構(gòu)均基于TensorFlow 實現(xiàn),使用的TensorFlow 版本為2.3.0,用到了numpy、OpenCV 等程序包,numpy 的版本是1.19.2,OpenCV 的版本是4.5.1.48,在配置過程中需要安裝很多有依賴關(guān)系的程序包,為了減少因程序包之間的依賴關(guān)系造成的大量沖突和錯誤,使用了Anaconda 管理安裝這些程序包,Anaconda的版本為5.3.1。
2.2.4 圖像數(shù)據(jù)的劃分
將圖像數(shù)據(jù)劃分為訓(xùn)練集、驗證集和測試集。訓(xùn)練集是使用指定網(wǎng)絡(luò)開展深度學(xué)習(xí)和訓(xùn)練的數(shù)據(jù)樣本集合,直接參與模型調(diào)參,是原始數(shù)據(jù)的一部分。網(wǎng)絡(luò)通過訓(xùn)練集,學(xué)習(xí)數(shù)據(jù)特征,擬合生成用于預(yù)測的模型。驗證集是用于評估模型性能的數(shù)據(jù)集,也是原始數(shù)據(jù)的一部分,在訓(xùn)練過程中幫助調(diào)整參數(shù),避免過擬合或欠擬合。測試集是用于判斷模型的準(zhǔn)確性和魯棒性,用在模型生成之后,使用模型沒有遇過的數(shù)據(jù)測試模型性能。由于采集的圖像數(shù)據(jù)總量偏少,屬于小規(guī)模樣本集,按照6∶2∶2的比例劃分為訓(xùn)練集、驗證集和測試集。
2.2.5 模型訓(xùn)練
要得到一個性能較好的模型,需要進行多次的訓(xùn)練,通過調(diào)整batch_size、epoch、learning_rate、image_size 等參數(shù),甚至重新清理數(shù)據(jù)樣本,重新劃分訓(xùn)練集、驗證集合測試集。本次分別在兩臺x86 服務(wù)器上開展模型訓(xùn)練,1 臺基于CNN 網(wǎng)絡(luò)開展訓(xùn)練,另1臺基于DenseNet201網(wǎng)絡(luò)開展訓(xùn)練,為了提升模型訓(xùn)練速度,2臺服務(wù)器均配置32 GB內(nèi)存。
訓(xùn)練過程中記錄了不同參數(shù)設(shè)置下的模型訓(xùn)練情況,只保留了val_accuracy 在0.8 以上的模型以供后續(xù)開發(fā)診斷系統(tǒng)使用。
基于自定義CNN 網(wǎng)絡(luò)模型、基于DenseNet201 網(wǎng)絡(luò)模型的訓(xùn)練結(jié)果如表1 所示。可以看出,所得val_accuracy 大于0.8 的模型中,基于CNN 網(wǎng)絡(luò)的相對穩(wěn)定,val_loss值也相對較小,說明在特定情況下基于CNN 網(wǎng)絡(luò)的模型收斂性相對較好,但DenseNet201 網(wǎng)絡(luò)更容易取得較高準(zhǔn)確率的模型。
表1 兩種網(wǎng)絡(luò)模型訓(xùn)練結(jié)果比較
3.1.1 功能目標(biāo)設(shè)計
系統(tǒng)主要功能目標(biāo)是讓用戶能夠方便、快捷地使用智能手機等便攜式移動設(shè)備對玉米病蟲害進行智能識別診斷,并提供相應(yīng)的防治建議。系統(tǒng)功能設(shè)計如下:
1)調(diào)取智能手機等移動設(shè)備上的攝像頭,拍攝玉米病蟲害發(fā)生圖像。
2)從文件系統(tǒng)上讀取圖像數(shù)據(jù)。
3)基于深度學(xué)習(xí)模型對玉米病蟲害種類識別診斷的功能。
4)根據(jù)病蟲害種類給出防治建議的功能。
3.1.2 數(shù)據(jù)庫設(shè)計
使用SQLite 輕量級數(shù)據(jù)庫,用于管理病蟲害編碼信息、病蟲害名稱信息和病蟲害防治建議。
3.1.3 流程設(shè)計
系統(tǒng)工作流程如圖3所示。
圖3 系統(tǒng)工作流程圖
3.2.1 開發(fā)環(huán)境配置
集成開發(fā)環(huán)境為Android Studio,第三方程序庫有OpenCV 和Tensorflow-Lite。具體版本如下:Android Studio3.4,OpenCV4.5.1,TensorFlow-Lite2.3.0。引入第三方程序庫需在build.gradle 文件dependencies 段添加如下內(nèi)容。
3.2.2 系統(tǒng)UI實現(xiàn)
系統(tǒng)UI 共包含兩個部分:1)與用戶交互(選擇圖像、拍攝圖像、啟動識別診斷)的各種按鈕;2)展示信息(待診斷圖像、診斷結(jié)果、防治建議)的各種View。調(diào)用攝像頭拍攝待診斷圖像使用ImageButton發(fā)起,調(diào)用模型開展診斷使用Button 發(fā)起,選擇本地圖像并展示使用ImageView 實現(xiàn),診斷結(jié)果和防治建議使用TextView 實現(xiàn)。使用ConstraintLayout 布局各個組件。實現(xiàn)的用戶界面如圖4所示。
圖4 系統(tǒng)用戶界面
3.2.3 功能實現(xiàn)
3.2.3.1 調(diào)取攝像頭功能實現(xiàn)
使用Activity 的startActivityForResult()方法將調(diào)用攝像頭的意圖(Intent)傳遞給Android系統(tǒng),Intent的Action 屬性需設(shè)置為ACTION_IMAGE_CAPTURE。對拍攝圖像進行處理通過Activity 的onActivityResult()方法根據(jù)requestCode實現(xiàn)完成。
3.2.3.2 選取本地圖像功能實現(xiàn)
同樣通過startActivityForResult()方法向系統(tǒng)傳遞意圖,Intent 的Action 屬性設(shè)為ACTION_OPEN_DOCUMENT,Type 屬性設(shè)為“image/*”。因瀏覽和選擇本地圖像需要讀取存儲設(shè)備的權(quán)限,在AndroidManifest.xml 中要做如下配置: 3.2.3.3 識別診斷功能實現(xiàn) 首先將圖像數(shù)據(jù)轉(zhuǎn)化為矩陣數(shù)據(jù),然后將RGBA格式數(shù)據(jù)轉(zhuǎn)換為BGR 格式,再根據(jù)模型輸入尺寸對圖像大小進行縮放,使用OpenCV 完成數(shù)據(jù)歸一化處理,接著將矩陣數(shù)據(jù)轉(zhuǎn)換為張量(tensor)數(shù)據(jù),最后傳遞給模型解釋器Interpreter開展識別診斷。 3.2.3.4 防治建議功能實現(xiàn) 診斷結(jié)果是一組數(shù)字,包含了病蟲害的類別編碼和可能性,若可能性大于80%,則根據(jù)編碼到數(shù)據(jù)庫中讀取對應(yīng)編碼的防治建議,最終在TextView 中展示給用戶。數(shù)據(jù)庫的操作使用SQLiteOpenHelper 類和SQLiteDatabase的相關(guān)方法實現(xiàn)。 本研究在自定義CNN 網(wǎng)絡(luò)和DenseNet201 網(wǎng)絡(luò)上開展了基于深度學(xué)習(xí)的玉米病蟲害模型訓(xùn)練,得到了多個val_accuracy 參數(shù)大于0.8 的模型,開發(fā)的玉米病蟲害智能診斷系統(tǒng)能夠在Android 系統(tǒng)中運行,并能使用模型開展識別診斷。經(jīng)驗證,發(fā)現(xiàn)系統(tǒng)對于小斑病、紋枯病、莖腐病3 種病害的診斷錯誤率較高,主要原因與采集的圖像樣本數(shù)量較少有關(guān);另外,模型的泛化能力較弱,主要原因與數(shù)據(jù)集劃分和訓(xùn)練參數(shù)欠合理有關(guān)。后續(xù)將通過采集更多的圖像樣本、圖像預(yù)處理、調(diào)整數(shù)據(jù)集和訓(xùn)練參數(shù)提升模型的準(zhǔn)確率和泛化能力。4 結(jié)論