葉名煬,張杰強(qiáng)
(華南農(nóng)業(yè)大學(xué)電子工程學(xué)院(人工智能學(xué)院),廣州 510642)
玉米營養(yǎng)豐富、有益健康,深受百姓喜愛,其在我國種植非常廣泛,是許多農(nóng)民夏秋季的主要經(jīng)濟(jì)來源,同時(shí)是畜牧業(yè)、養(yǎng)殖業(yè)、水產(chǎn)養(yǎng)殖業(yè)等的重要飼料來源,也是食品、醫(yī)療衛(wèi)生、輕工業(yè)、化工業(yè)等不可或缺的原料之一,在我國糧食生產(chǎn)中占有一席之地。玉米在種植過程中容易受多方面負(fù)面因素的影響,其中病害是影響生產(chǎn)的主要災(zāi)害,患病的玉米產(chǎn)量大幅下降、口感不好,主要病害有大斑病、小斑病、銹病、灰斑病等。
隨著計(jì)算機(jī)技術(shù)的日益成熟和廣為應(yīng)用,人工智能(AI)不斷升溫,受到越來越多研究人員的關(guān)注。其中深度學(xué)習(xí)在近20 年的時(shí)間里得到快速發(fā)展,被廣泛應(yīng)用于圖像處理、語音識(shí)別、自然語言處理等研究方向。在圖像處理領(lǐng)域,常用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來處理圖像分類、目標(biāo)檢測、圖像分割等問題,Krizhevsky 等發(fā)明的AlexNet網(wǎng)絡(luò)結(jié)構(gòu)在2012年的ImageNet競賽中以16.4%的錯(cuò)誤率脫穎而出,比第二名的傳統(tǒng)算法低了近10 個(gè)百分點(diǎn),此后又誕生了諸如VGGNet、GoogLeNet、ResNet 等 層 數(shù) 更 深、識(shí)別率更高的網(wǎng)絡(luò)。
采用卷積神經(jīng)網(wǎng)絡(luò)提取特征的做法也已經(jīng)成為農(nóng)作物病害識(shí)別的主流趨勢。李靜等提出了一種基于改進(jìn)GoogLeNet卷積神經(jīng)網(wǎng)絡(luò)模型的玉米螟蟲害圖像識(shí)別方法,平均識(shí)別率達(dá)到96.44%;王佳盛等基于AlexNet 構(gòu)建全卷積神經(jīng)網(wǎng)絡(luò)模型用于提取荔枝表皮缺陷,模型表現(xiàn)優(yōu)于常規(guī)算法;陸健強(qiáng)等提出一種基于Mixup算法和卷積神經(jīng)網(wǎng)絡(luò)的柑橘黃龍病果實(shí)識(shí)別模型,模型優(yōu)化后準(zhǔn)確率達(dá)到94.29%。對(duì)于農(nóng)作物病害識(shí)別,模型在實(shí)際應(yīng)用的過程中通常不在電腦端上運(yùn)行,而是在移動(dòng)端設(shè)備上運(yùn)行,這樣更方便從業(yè)人員取樣識(shí)別。因此農(nóng)作物病害識(shí)別模型應(yīng)具有體積小、參數(shù)量少、運(yùn)行速度快的特點(diǎn)。本研究通過開源項(xiàng)目獲取玉米病害的數(shù)據(jù)集,并基于輕量化網(wǎng)絡(luò)MobileNetV2(https://arxiv.org/abs/1801.04381)構(gòu)建了一個(gè)四類識(shí)別器,可以實(shí)時(shí)識(shí)別病害的類別。
深度可分離卷積(如圖1 所示)是MobileNet系列網(wǎng)絡(luò)的一大亮點(diǎn),它可以拆解為單通道卷積和逐點(diǎn)卷積。對(duì)于傳統(tǒng)卷積而言,輸入的圖像要和每一個(gè)卷積核進(jìn)行卷積運(yùn)算,輸出圖像有多少個(gè)通道取決于前面有多少個(gè)卷積核,單通道卷積中,每個(gè)卷積核僅負(fù)責(zé)輸入圖像的一個(gè)通道,輸出圖像的通道數(shù)與輸入的圖像是保持一致的。逐點(diǎn)卷積和傳統(tǒng)卷積的運(yùn)算沒有本質(zhì)差別,只是采用了1×1的卷積核,常用于特征矩陣的升維和降維操作。
圖1 深度可分離卷積
假設(shè)輸入圖像的width 和height 均為D、通道數(shù)為,所采用卷積核的width 和height 均為D,輸出圖像的通道數(shù)為,對(duì)傳統(tǒng)卷積,計(jì)算量為:
對(duì)深度可分離卷積,由于采用了單通道卷積和逐點(diǎn)卷積兩種操作,計(jì)算量為:
兩者進(jìn)行對(duì)比:
若采用3 × 3 卷積核,即D= 3,可知在得到相同尺寸輸出的情況下,采用單通道卷積和逐點(diǎn)卷積結(jié)合的方式相比傳統(tǒng)卷積節(jié)省了大約9 倍的計(jì)算量。借助這種可分解的卷積操作,雖然層數(shù)變多了,但速度也有所提升,這使得MobileNet成為一種輕量級(jí)的卷積神經(jīng)網(wǎng)絡(luò)。
在resnet 網(wǎng)絡(luò)所采用的殘差結(jié)構(gòu)中,先用1 × 1 的卷積核對(duì)輸入矩陣進(jìn)行降維,再提取特征,最后用1 × 1 的卷積核對(duì)輸入矩陣進(jìn)行升維。MobileNetV2 所采用的倒殘差結(jié)構(gòu)則與之相反,先升維,提取特征,最后再降維,考慮到維度的變化像一個(gè)瓶頸,因此也叫瓶頸結(jié)構(gòu)。如圖2 所示。倒殘差結(jié)構(gòu)使用ReLU6 激活函數(shù),可以有效避免特征信息的大量損失。值得注意的是,當(dāng)輸入與輸出shape 相同且步距(Stride)為1時(shí),輸入與輸出有一條殘差邊相連,將輸入與輸出直接進(jìn)行相加,這種結(jié)構(gòu)可以使得網(wǎng)絡(luò)在較深的時(shí)候依舊可以進(jìn)行訓(xùn)練。
圖2 MobileNetV2的倒殘差結(jié)構(gòu)
如圖3 所示,MobileNetV2 網(wǎng)絡(luò)由卷積層、池化層以及一系列瓶頸結(jié)構(gòu)(bottleneck)所構(gòu)成。代表擴(kuò)展因子(bottleneck 中通道擴(kuò)展的倍數(shù)),代表輸出通道數(shù),是bottleneck 的迭代次數(shù),是步距,是分類數(shù)。Conv2d 就是普通的標(biāo)準(zhǔn)卷積操作,avgpool 表示全局平均池化,以這種方式代替1280 個(gè)神經(jīng)元的連接層,可以有效防止過擬合。
圖3 MobileNetV2整體結(jié)構(gòu)
本實(shí)驗(yàn)使用由數(shù)據(jù)科學(xué)競賽網(wǎng)站Kaggle 提供的New Plant Diseases Dataset,共計(jì)9145 張圖片。數(shù)據(jù)集包含正常玉米、銹病、大斑病、灰斑病四種類別,訓(xùn)練集與測試集數(shù)量之比約為8 ∶2。具體圖片數(shù)量見表1。
表1 數(shù)據(jù)集概述
圖4 玉米病害樣本
所有圖片統(tǒng)一裁剪成224×224的大小,由于識(shí)別病害需要考慮到顏色,因此不對(duì)圖像進(jìn)行二值化處理,僅對(duì)RGB 分量作歸一化處理,即將0-255 之間的數(shù)字統(tǒng)一處理到0 到1 之間,如此可以加速卷積神經(jīng)網(wǎng)絡(luò)的運(yùn)算。由于數(shù)據(jù)集的上傳者已對(duì)圖片進(jìn)行過隨機(jī)旋轉(zhuǎn)角度、水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)等數(shù)據(jù)增強(qiáng)操作,本實(shí)驗(yàn)不需要進(jìn)行額外的增強(qiáng)處理。
TensorFlow 是一個(gè)基于數(shù)據(jù)流編程的符號(hào)數(shù)學(xué)系統(tǒng),也是目前深度學(xué)習(xí)領(lǐng)域主流的開發(fā)平臺(tái),深受眾多用戶青睞。其具有優(yōu)秀的構(gòu)架設(shè)計(jì),通過“張量流”進(jìn)行數(shù)據(jù)傳遞和計(jì)算,用戶可以很容易地、可視化地看到張量流動(dòng)的每一個(gè)環(huán)節(jié),可輕松地在CPU/GPU 上部署,進(jìn)行分布式計(jì)算,為大數(shù)據(jù)分析提供計(jì)算能力的支撐;另外,TensorFlow 跨平臺(tái)性好,靈活性強(qiáng),不僅可以在Linux、Mac 和Windows 系統(tǒng)中工作,甚至還可安裝在移動(dòng)終端。
運(yùn)行環(huán)境見表2。
表2 運(yùn)行環(huán)境
本實(shí)驗(yàn)采用MobileNetV2 網(wǎng)絡(luò)對(duì)7316 份訓(xùn)練樣本提取特征并完成分類任務(wù)。作為對(duì)照,用經(jīng)典CNN 模型LeNet處理同樣的數(shù)據(jù)集,方便說明效果。訓(xùn)練時(shí)每進(jìn)行完一個(gè)epoch 便保存當(dāng)前狀態(tài)下的準(zhǔn)確率以及損失值,為的是之后用可視化的手段觀察模型是否收斂,只有收斂狀態(tài)下得出的結(jié)論才具有參考價(jià)值。
為了加快網(wǎng)絡(luò)的收斂,MobileNetV2 的初始化使用遷移學(xué)習(xí)的方式,加載預(yù)先在ImageNet數(shù)據(jù)集上訓(xùn)練好的權(quán)重,固定模型的主干參數(shù),訓(xùn)練過程中不再更新這部分參數(shù),僅訓(xùn)練最后的全連接層(Fully Connected Network)。池化方式為全局平均池化,優(yōu)化器為自適應(yīng)矩估計(jì)優(yōu)化器,初始化learning rate 為0.001,損失函數(shù)為交叉熵?fù)p失函數(shù)(categorical crossentropy),每批次處理量為16,訓(xùn)練輪數(shù)30個(gè)epoch。
LeNet 是最早的CNN 模型之一,起初用于識(shí)別手寫數(shù)字,它由3 層卷積層、2 層池化層、1 層全連接層、1 層輸出層構(gòu)成,卷積層的激活函數(shù)為Relu,池化層為最大池化(max pool?ing),優(yōu)化器為SGD 優(yōu)化器(Stochastic Gradient Descent),損失函數(shù)為交叉熵?fù)p失函數(shù),同樣訓(xùn)練30 個(gè)epoch。
圖5的折線圖展示了MobileNetV2 的訓(xùn)練過程,training accuracy 為訓(xùn)練集的準(zhǔn)確率,valida?tion accuracy 為驗(yàn)證集準(zhǔn)確率,training loss 為訓(xùn)練集代價(jià)函數(shù),validation loss 為驗(yàn)證集代價(jià)函數(shù),折線的走向可以反映各個(gè)參數(shù)的收斂、飽和等趨勢。能夠看出,隨著訓(xùn)練輪數(shù)從0 到30逐漸增加,training accuracy 呈上升趨勢,20 輪以后接近100%。而對(duì)validation accuracy 而言,前期上升在小范圍內(nèi)有震蕩,但在第15個(gè)epoch之后準(zhǔn)確率在96%~97%之間上下波動(dòng)。從代價(jià)函數(shù)折線圖可以看出,由于采用了遷移學(xué)習(xí)的方式,代價(jià)函數(shù)收斂較快,曲線的變化也比較平穩(wěn)。
圖5 MobileNet測試結(jié)果
圖6為采用LeNet 的結(jié)果,同樣隨著訓(xùn)練輪數(shù)的增加,training accuracy 總體是上升的,但是由于所有參數(shù)從頭開始訓(xùn)練,準(zhǔn)確率在第15 個(gè)epoch 之前波動(dòng)較大,最后在95%附近上下波動(dòng)。交叉熵?fù)p失最后為0.2 左右,略高于MobileNet的對(duì)應(yīng)值。
圖6 LeNet測試結(jié)果
結(jié)合表3對(duì)比可以得出,采用了倒殘差結(jié)構(gòu)的MobileNetV2 網(wǎng)絡(luò)在層數(shù)較深的情況下仍然保證了較高的準(zhǔn)確率,且略微高于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)LeNet。得益于深度可分離卷積的操作,Mobile?NetV2模型的參數(shù)量僅為后者的十分之一,模型大小只有8.95 MB,非常適合在手機(jī)等移動(dòng)設(shè)備上運(yùn)行,不需要占用太多計(jì)算資源。
表3 網(wǎng)絡(luò)對(duì)比
本文分析了MobileNetV2 網(wǎng)絡(luò)在識(shí)別農(nóng)作物病害上的優(yōu)勢,并在TensorFlow 平臺(tái)上搭建了MobileNetV2 和LeNet 兩個(gè)網(wǎng)絡(luò),用于識(shí)別Kaggle 上的玉米病害數(shù)據(jù)集。結(jié)果表明,Mo?bileNetV2 以更少的參數(shù)量和更高的準(zhǔn)確率完成了分類任務(wù),該輕量化網(wǎng)絡(luò)亦可應(yīng)用于其他農(nóng)作物的病害識(shí)別,具有一定現(xiàn)實(shí)意義。