孫圓龍,徐曉輝,宋濤,崔迎港,司玉龍
(河北工業大學電子信息工程學院,天津市,300401)
作物病害是導致作物產量下降的主要原因,實時有效的作物病害識別技術是防治的關鍵?;跈C器視覺的病害識別技術可以檢測作物相似的特征,成為病害識別的有效途徑。
傳統機器學習,其往往是在可見光波段提取特定作物的紋理、顏色和形狀等特征[1],然后進行模式識別,但傳統機器視覺一般局限于某一作物。深度學習的發展不斷催生新的網絡模型,這些模型也不斷的遷移到果蔬的病害識別上,在其葉部病害識別中[2],遷移的網絡模型參數量巨大,VGG16參數內存為526 MB,AlexNet參數內存為127 MB。Durmus等使用AlexNet和SqueezeNet分別對番茄進行病害識別,發現AlexNet識別準確率高于SqueezeNet,但模型內存和運行時間消耗翻倍。
為減小參數量,Geetharamani等[3]將深度CNN模型簡化為9個層,對plantvillage提供的數據集進行識別,最高準確率達到96.46%。劉洋等[4]在移動端使用輕量級網絡MobileNet進行葉部病害二分類識別,識別率在95%左右,參數內存17.1 MB,計算量消耗為575 M。王冠等[5]對輕量化網絡MobileNet進行優化,多作物病害識別準確率為96.23%。蒲秀夫等[6]提出二值化網絡將信息壓縮以加快葉部病害的識別效率。郭小清等[7]以多個感受野優化AlexNet模型,對番茄早中晚三類疫病進行識別,識別準確率為92.7%,模型的內存消耗為29 MB。譚文軍[8]將殘差網絡中的普通卷積替換為深度卷積可分離,并引入全局池化和批歸一化得到DW-ResNe模型,在對作物多病害識別中實現98.59%的準確率,在病害嚴重程度識別實現89.16%的準確率,參數內存僅2.1 MB,但對硬件計算力(Floating point operations,FLOPs)的要求為481.415 M。
當前很多模型過于復雜,消耗大量的計算資源,只能部署在服務器端,導致普及性和實時性差;輕量化的模型存在模型復雜度高,對優化方式依賴性大,調參復雜。復雜背景下,大量病斑和背景分割耗費時力,且僅提取人工標定的有限特征,會忽略了圖像中的全局和上下文信息。為將神經網絡用在實際生產中,必須解決效率問題,考慮到模型會占用巨大的內存空間和硬件的計算資源,試驗設計了高效殘差模塊和恒等殘差模塊,減小參數內存,采用模塊化的殘差結構搭建高效運算網絡,提升網絡對整體信息的感知能力,在保證網絡識別精度的同時,加快網絡的收斂速度,提升網絡抗干擾能力,減小模型對硬件資源的消耗,降低硬件開發的成本。
Plantvillage提供了很多病害數據,采用其中部分數據集包括健康葉片、玉米葉斑病、葉枯病、桃樹瘡痂病、甜椒瘡痂病、草莓葉枯病,蘋果黑星病、灰斑病、雪松銹病等作為基礎數據,測試了高效殘差網絡模型,簡單背景下驗證了模型的有效性。為驗證模型的魯棒性,在實際生產環境中拍攝和搜集了包含復雜背景、不同角度和光照下的作物圖像,制作了800張馬鈴薯晚疫病、780張黃瓜霜霉病、635張黃瓜白粉病、1 200張馬鈴薯健康和1 000張黃瓜健康數據集,進行復雜場景下的病害識別測試,部分數據集如圖1所示。

圖1 農作物病害隨機示例Fig. 1 Random examples of crop diseases
深度卷積神經網絡模型內存占用過大,且對硬件性能要求過高,實時性差且不易在邊緣端的設備上布署。二值化網絡壓縮了信息數量,丟失太多的病害特征。輕量化網絡MobileNet在識別精度和效率進行了均衡,但對優化方式依賴性大。
模型的參數數量與卷積核的尺寸大小、通道數量和卷積核的數量有關。大的卷積核可由多個小的卷積核代替,減少參數數量。單通道5×5的卷積核可由兩個3×3的卷積核代替[9]。卷積空間可分離將空間位置信息和深度信息分開進行學習,然后進行信息融合[10],但存在信息通暢問題。Lin等提出了1×1的卷積核用來跨通道信息交互。Howard等使用卷積空間可分離和1×1的卷積核實現了MobileNet。輕量級網絡ShuffleNet的通道混合和分組卷積結構進一步優化了MobileNet的信息通暢問題和計算量,但是精度有所下降。不同的卷積核有不同的感受野,卷積分解之后可以在不同方向的感受野上來提取圖片的特征。Freeman等將卷積分解和池化分解結合起來,搭建了EffNet,提升了識別精度,但浮點數運算量高于MobileNet。
引入卷積分解、池化分解、卷積深度可分離、多個小卷積核替代大卷積核的結構豐富卷積核尺寸,減少模型參數,用殘差連接解決信息通暢問題,且防止了梯度消失和網絡退化。設計了兩個高效模塊,通過級聯操作形成的高階殘差結構,分別提取細節和全局的信息以提高模型的識別精度,模塊化搭建了高效運算網絡,減少模型參數和計算量,以解決作物葉部病害識中硬件門檻高的問題。
交叉熵是分類中常用的損失函數,試驗首先采用交叉熵(Cross entropy)作為損失函數,進行簡單背景的病害識別,傳統的交叉熵函數如式(1)所示。
(1)
式中:p(xi)——真實概率分布;
q(xi)——模型預測概率分布;
n——樣本總數目。
可以看出當預測值為真時,損失值很小,當模型預測值為假時,損失值很大。交叉熵函數對正負樣本的預測權重一樣,無法應對不均衡樣本,為此,He等提出了用于目標檢測的二分類任務的focalloss損失函數。
FL(pt)=-αt(1-pt)γlogpt
(2)
(3)
(4)
式中:pt——模型預測概率;
p——真實值為1的模型預測概率;
αt——損失值加權因子;
α——對應類別為1時的損失函數加權因子;
γ——調制因子,取值為2。
focaloss是針對二分類問題,論文將其優化為帶權值的多分類muti_focaloss,從而進行數據均衡控制,表達式如式(5)和式(6)所示。
(5)
(6)
式中:yt——當前樣本的真實的概率分布;
pt——模型預測概率;
αt——加權因子。
試驗首先統計所有的樣本總數,然后將每一類樣本數目除以樣本總數目求得加權因子αt的值,用來平衡權重。
為防止模型訓練過程出現過擬合情況,試驗在交叉熵損失函數的基礎上加上L2正則化用來對損失函數進行限制,衰減權重,從而降低損失函數值,提高模型泛化能力。其表達式如下
(7)
式中:C——新的損失函數;
C0——原來的交叉熵損失函數;

從而得到新的損失函數
(8)
式中:λ——權值衰減的衰減系數。

網絡架構在卷積神經網絡中起著重要的作用,一般認為不同的卷積核有不同的感受野和識別敏感度,且多個小的卷積核可替代大的卷積核。論文提出的簡化運算網絡,主要包含兩個設計的高效模塊:高效殘差卷積模塊和恒等殘差模塊。高效殘差卷積模塊如圖2所示模塊擁有多種大小的卷積核。首先借助卷積核1×1減少通道數量為N/2,然后進行深度可分離卷積DwConv1×3完成橫向卷積;在水平方向進行2×1的最大池化,步長為(2,1);接著完成縱向深度可分離卷積DwConv3×1,此時的張量橫向尺寸變為原來的一半,縱向尺寸不變,通道數為原來的一半;接著對以上輸出的張量進行普通Conv2×1(N)的卷積,步長為1×2,完成池化分解的縱向效果,此時的輸出尺寸為輸入尺寸的一半,通道數為N。在數據輸入處引入步長為1×1的最大池化Maxpool(2×2)和通道數為N的Conv1×1卷積以統一尺寸和通道數目,并和以上輸出相加做到局部和整體信息的融合,從而提升網絡對上下文信息的感知能力。豐富的卷積核尺寸,進一步提升了網絡的識別準確率。每一次卷積操作之后均加入批歸一化(BN)和激活函數以增加網絡的稀疏性和收斂速度。
以上結構完成了對3×3×N卷積核的替代,而且豐富的卷積結構模擬了多種不同大小的卷積核,以便提取更多的信息特征。高效殘差卷積模塊特點是:模型的輸出大小變為輸入的一半,通道數增多為預設數目;模塊將第一層提取的整體信息,與后三次不同大小卷積核提取的局部信息進行相加,不僅精細化了圖像信息,做到局部和整體的結合,而且減少了計算消耗,與普通3×3卷積相比,計算量減少到38.9%。

圖2 高階殘差卷積模塊Fig. 2 Efficient residual convolution module
試驗優化了恒等殘差模塊,如圖3所示,通道數變化為原始通道的1/8,試驗參數可進一步減少,與普通3×3卷積相比,計算量減少到25%。模塊的特點是經過三次卷積之后與輸入層相加,實現殘差學習以突出細節信息,且輸入和輸出保持一致,不會改變特征映射的大小,因此可以連續堆疊以加深網絡,提升網絡的擬合能力,以適應不同要求的識別任務。

圖3 恒等殘差模塊Fig. 3 Identical residual module
優秀的模型一般包含很多可以重復利用的模塊,以上設計的兩個模塊具有高的性能和低的復雜度。表1為高效運算網絡的結構組成,高效運算網絡的高階殘差卷積模塊Effres_block(a,b)×n和恒等殘差模塊Idenres_block(a,b)×n組成,其中a代表輸入的通道數,b代表輸出的通道數,n代表連續堆疊的層數。基于兩個模塊的特點,可以將多個恒等殘差模塊堆疊在高效殘差卷積模塊后邊形成高階殘差效果,充分提取各層的特征,做到精細化過濾,并且與輸入的全局特征相加融合,充分利用底層特征的細節描述和高層特征的抽象表達,優化了網絡的信息感知能力和抗干擾能力,提升網絡的識別精度。

表1 高效運算網絡模塊化結構Tab. 1 Modular structure of Efficient computing network
論文先用簡化運算的兩個高效模塊替代Res50結構,搭建了高效運算網絡,表1為其中高效運算網絡的結構,經過表1中每一行的模塊后,特征尺寸減半。
采用Ubuntu16.04操作系統,搭載AMD Ryzen 74800U with Radeon Graphic處理器,頻率為1.8 GHz。內存為16 G。選用基于tensorflow的keras深度學習框架。以python語言為基礎,進行代碼編寫。
試驗采用批量訓練的方法,將數據集分為多個batch,batch的值設置為64。epochs設置為24,損失函數選取交叉熵,優化器選擇Adam,初始學習率lr_start設置為0.000 1,最終學習率lr_end設置為0.000 01,每一個epoch之后,讓學習率進行衰減按照(lr_end/lr_start)(1/epochs)逐漸衰減,使得模型參數不斷穩定。使用Dropout防止模型發生過擬合,失活率設置為0.2。試驗對每一份數據的80%作為訓練集,20%作為驗證集。
試驗以設計的高效結構為基礎,降低模型對硬件的需求,用Plantvillage提供的多病害數據,進行簡單背景下的病害識別,以優化網絡模型,提升識別準確率,加快收斂速度,然后將高效網絡模型用于自制的數據集,進行復雜背景下的病害識別,測試了模型的參數內存,并與經典網絡進行對比。
4.3.1 簡單背景下多種作物病害識別
論文采用高效運算網絡對Plantvillage提供的簡單背景下的部分健康葉片、玉米葉斑病、葉枯病、桃樹瘡痂病、甜椒瘡痂病、草莓葉枯病,蘋果黑星病、灰斑病、雪松銹病等加入高斯噪聲后進行分批次識別,交叉熵損失作為損失函數,網絡的輸入為(256×256×3),采用Relu激活函數得到24個迭代周期的識別結果如圖4和圖5所示。

圖4 Relu作為激活函數的多病害識別準確率Fig. 4 Recognition accuracy of multiplediseases using Relu as activation function

圖5 Relu作為激活函數的多病害識別損失值Fig. 5 Loss value of multiple diseasesidentification using Relu as activation function
訓練集識別準確率不斷上升,最終穩定在99%附近,驗證集識別準確率在22個epoch后達到99%左右的識別準確率,損失值降到0.073附近,識別準確率最高達到99.37%,可以完成常見病害的識別任務,但模型在8個epoch之后,驗證集識別準確率以90%為中心進行波動,幅度較大,收斂性差。
為進一步提升模型的識別效率,加快收斂速度,論文將激活函數變為LeakyRelu,改用加入L2正則化優化的交叉熵作為損失函數,權重衰減系數λ設置為0.000 01,改變網絡的稀疏性,再次進行多病害識別,得到24個迭代周期的識別結果如圖6和圖7所示。
如圖6和圖7所示,在前8個迭代周期,驗證集準確率先波動上升達到90%以上,9個epoch之后識別準確率便在94%之上波動,且波動幅度比較小,收斂速度明顯加快,而且驗證集損失值與訓練集的損失值不斷波動下降,最終收斂在0.066以下。訓練集最高準確率為99.68%,驗證集的準確率最終穩定在99%附近,優化的高效運算網絡具有更好的收斂性和穩定性,識別效率更高。

圖6 LeakyRelu作為激活函數的多病害識別準確率Fig. 6 Recognition accuracy of multiplediseases using LeakyRelu as activation function

圖7 LeakyRelu作為激活函數的多病害識別損失值Fig. 7 Loss value of multiple diseasesidentification using LeakyRelu as activation function
4.3.2 復雜背景下病害識別測試
為進一步測試實際生產環境中高效運算網絡的高效性,進行復雜背景下的作物病害識別,實驗將優化的muti-focaloss損失函數加入高效運算網絡中,形成新高效運算網絡,以應對數據不均衡問題。首先計算總的樣本數目,然后將每類樣本數量除以總樣本數量的值,作為優化的muti_focaloss損失函數的加權因子,來解決數據不均衡問題。復雜背景下的加權因子α1、α2、α3、α4、α5分別為0.181、0.177、0.144、0.272、0.273,對應數據集的黃瓜霜霉病、黃瓜白粉病、黃瓜健康、馬鈴薯晚疫病和馬鈴薯健康葉片的權重,然后進行病害識別,并與經典網絡對比,識別結果如表2所示。
如表2所示,與Res50相比,MobileNet極大降了參數冗余,參數內存由90 MB降到12.4 MB,但準確率有所下降。高效運算網絡的高階殘差結構和豐富的卷積核尺寸提供了更加全面的病害特征,不僅解決了廣義識別模型對細粒度特征提取弱的問題,將識別準確率從MobileNet的86.3%和Res50的87%提升到88.6%,當采用優化的muti_focaloss損失函數后,識別準確率提升到92.6%,可以滿足實際生產的識別要求,且將參數內存降低到3.15 MB,從而提升網絡的識別效率。

表2 復雜背景下作物病害識別結果Tab. 2 Recognition results of crop diseases incomplex background
卷積神經網絡參數內存冗余太大,對硬件計算力(FLOPs)的要求過高,導致普及性差,一般只能用于服務器端。卷積神經網絡要想廣泛用于實際的生產場景,提升識別效率,必須降低對硬件的門檻要求,適用于大多數的嵌入式設備,且模型參數內存越小,相同硬件資源下,推理速度就越快,為了更加全面評價高效運算網絡模型,論文從模型的識別準確率、參數量、激活函數、對硬件計算力要求(Floating point operations,FLOPs)和參數內存幾個方面進行了分析,識別準確率為簡單背景下多種混合作物的病害識別準確率。

表3 多病害識別模型的性能Tab. 3 Performance of multi disease recognition model
由表3可知,以Relu為激活函數的Res50(Relu)在簡單背景下多病害識別中的準確率為95.02%,硬件計算力需求為94.862 8 M,參數內存要求超過90 MB,占用過多的硬件資源,在硬件計算力資源相同的情況下,內存占用越大,識別消耗時間就越長。MobileNet (Relu),以Relu為激活函數,在保持95.02%的識別精度的同時,將參數內存降低到12.4 MB,對硬件計算力的要求降到2.6 M左右,使得網絡識別模型可以布署在邊緣側的移動設備上,很大程度上提升了神經網絡的普適性。高效運算網絡(Relu)在進一步降低參數內存到3.15 MB的情況下,相比MobileNet(Relu),把簡單背景下作物病害識別準確率提升到99%以上,將對硬件計算力的要求降低到1.714 M左右,改用激活函數為LeakyRelu后,高效運算網絡(LeakyRelu)將簡單背景下作物病害識別準確率提升到99.3%。
為解決實際生產中環境多變的問題,將加入muti_focaloss損失函數的新高效運算網絡(LeakyRelu)用于復雜背景下的識別,相比高效運算網絡(LeakyRelu),將識別精度提升到92.6%。與經典網絡相比,新高效運算網絡硬件計算力的需求僅1.71 M左右,進一步降低了模型對硬件計算力要求的門檻,節約了開發硬件開發成本,且參數內存小,具有更好的實時性,適合布署在邊緣側的設備上進行邊緣計算。
論文以設計的高效運算模塊為基礎,用于減少參數冗余和計算量,結合優化的損失函數搭建了高效運算網絡,在提升了識別精度的同時,加快了網絡收斂速度,降低了硬件資源消耗,從而解決了邊緣端作物病害識別適用性差的問題,具體結論如下。
1) 高效運算網絡對簡單背景下多種作物進行病害識別,準確率在99%附近;優化損失函數后,病害識準確率達到99%以上,具有很好的細粒度特征提取能力;為進一步驗證模型的魯棒性,再次將模型用于復雜背景下的作物病害識別,采用改進的損失函數的新高效運算網絡應對實際生產中的數據不均衡問題,準確率達到92.6%,試驗證明模型具有很好的抗干擾能力,可以用于實際生產場景的病害識別。
2) 在簡單背景下多病害識別中,交叉熵作為損失函數,8個epoch后驗證集準確率以90%為中心波動,幅度較大,改用加入L2正則化的損失函數后,9個epoch之后驗證集準確率便在94%之上,且波動幅度小,驗證集的準確率最終穩定在99%附近,收斂速度明顯加快。
3) 高效運算網絡的參數內存僅占3.15 MB,對硬件性能(FLOPs)的要求僅為1.714 M,不僅識別效率高,而且極大降低了硬件成本,適合用于邊緣端實時檢測作物病害,便于后續作物病害監測系統的開發和普及。