胡文藝, 王洪坤, 杜育佳
(成都理工大學計算機與網絡安全學院,四川 成都 610059)
2020 年3 月,聯合國糧農組織、世界衛生組織和世界貿易組織總干事發表聯合聲明,各國必須采取措施確保糧食安全[1]。番茄作為全球栽培最廣、消費量最大的蔬菜作物,是國家出口創匯和農民增收致富的重要途徑[2]。番茄富含VC、番茄紅素和礦物質,具有抗癌、防衰老和提高人體免疫力等功能[3]。番茄品種類型豐富,既可作水果又可鮮食作蔬菜,還可加工成各種如番茄醬、沙司及果汁的番茄制品,常被作為重要的研究對象及模式植物,在遺傳學、細胞生物學、生物工程、分子生物學和基因組學等科學研究領域具有重要研究價值[4]。在番茄的生產過程中,常伴有病蟲害的發生,會造成產量的巨大損失,其中以氣候濕潤區晚疫病對番茄產量的影響尤為明顯[5]。因此,防治番茄病蟲害是提高番茄產量和品質的關鍵,提供疾病早期的檢測和鑒定對選擇正確的防治方法和阻止疾病的傳播極為重要[6]。
近年來,基于深度學習的機器學習和物聯網技術在農業領域的應用,提高了作物葉片病蟲害識別的效率和精度。傳統機器視覺算法需要根據目標任務和先驗知識選擇合適的特征(包括圖像顏色、形狀、紋理等),用來提取這些特征的特征提取器需要人為構建,較為煩瑣和缺乏泛化能力[7-9]。卷積神經網絡方法可以根據數據及其類別自行調整權值參數以構建合適的特征提取器,相對高效便捷,構建的特征提取器還具備更優異的泛化能力,可以有效克服傳統方法的缺陷[10]。鄒永杰等[11]提出了一種結合HOG、LBP 特征的番茄病蟲害檢測模型。呂權[12]提出了一種基于神經網絡的番茄葉部病害識別方法。JIANG D 等[13]采用深度學習的方法提取番茄葉片的斑葉枯病、晚疫病和黃化曲葉病等病害特征。劉志勇等[14]提出了基于改進LeNet5 并通過數據增強方式擴充數據的網絡模型。柴帥等[15]提出基于VGG-19 卷積神經網絡進行遷移學習,可提高番茄病蟲害的圖片分類精度。CHENG X 等[16]提出了注意力機制與殘差結構相結合的PARNet 番茄葉部病害識別模型。
本文針對番茄病蟲害識別問題,基于Kaggle 網站上的Tomato 數據集,引入壓縮與激勵(Squeeze-and-Excitation,SE)模塊的深度殘差網絡(ResNet),研究提升病番茄蟲害識別精度的方法,對番茄病蟲害及時監測和處理具有重要的指導意義。
在深度學習不同的體系結構中,卷積神經網絡(Convolutional Neural Network,CNN)是一種特殊的空間數據多層神經網絡,其架構靈感來自于生物視覺對外界的感知[17]。卷積神經網絡的基礎是由HUBEL 和WISEL 在1959 年發現的,他們表示動物視覺皮層中的細胞可以在小的感受野中識別光[18]。KUNIHIKO 等[19]受到這項工作的啟發,在1980 年提出了新認知機,該網絡也被認為是CNN 的第1 個理論模型。1998 年,LECUN Y等[20]開發了早期卷積神經網絡的代表性結構LeNet5,用于手寫數字識別。2021 年,KRIZHEVSKY 等將卷積神經網絡的結構進行多層擴展,設計了一個更大深度的網絡AlexNet,并在ILSVRC 上表現出優異的性能[21-22]。
傳統的卷積神經網絡(CNN) 是由卷積層(Convolution)和池化層(Pooling)的單個或多個塊接上一個或多個全連接層(FC),最后跟上一個輸出層組成,如圖1 所示。卷積層是CNN 的核心部分,是卷積核的計算過程。卷積核通過每次移動相同步長,將圖像像素和卷積核的對應權重相乘,并對結果應用非線性激活函數,得到新的特征映射[23]。經過多個卷積層的運算,最后得到圖像在不同尺度的抽象表示。池化層將卷積輸出的一小部分作為輸入,并對其進行下采樣以產生單個輸出。常見的池化操作有最大池化和平均池化兩種。通過池化降維,可以縮減模型大小提高計算速度,同時降低過擬合概率提升特征提取魯棒性[24]。CNN 的全連接層通常存在于前饋神經網絡中,其本質是一個矩陣乘法,相當于一個特征空間變換,起到了將學習的“分布式特征表現”映射樣本標記空間的作用[16]。

圖1 卷積神經網絡結構Fig. 1 Structure of convolutional neural networks
在圖像分類中,CNN 可以看作是兩個部分的組合:特征提取部分和分類部分。卷積層和池化層的操作都是特征提取的過程,以番茄葉片為例,從底層到高層的不同卷積層檢測出葉片的殘缺、卷曲、菌斑等各種特征,以便進一步識別。在這些特征之上,添加FC 層作為分類器,并為輸入圖像分配一個作為何種癥狀的概率。除了層次設計外,CNN 的改進還取決于激活函數、歸一化方法、損失函數、正則化、優化和處理速度等方面。
ResNet(Residual Neural Network)由微軟研究院HE Kaiming 等提出,通過使用ResNet Unit 成功訓練出了152 層的神經網絡,并在ILSVRC 2015 比賽中取得冠軍,在top5 上的錯誤率為3.57%,同時參數量比VGGNet低,效果非常突出[25]。ResNet 的結構可以極快地加速神經網絡的訓練,模型的準確率也有比較大的提升。同時ResNet 的推廣性非常好,甚至可以直接用到InceptionNet 網絡中[26]。
神經網絡的結構會隨著網絡層數的不斷增加而變得越來越深,結構加深會導致梯度消失,從而使得模型的學習越來越困難。因為當梯度被反向傳播到前面時,重復相乘會導致梯度變得無限小,此時卷積神經網絡的性能不會再提升,甚至有下降的趨勢[27]。這種下降并不是由過度擬合引起的,而是向適當深度的模型中添加更多層導致的更高訓練誤差造成的[28-29]。為了解決這個問題,有學者提出引入全等映射的思想,提出殘差結構學習單元,如圖2 所示。基本思想是不希望每個堆疊的層都直接符合所需的底層映射,而是顯示地讓這些層符合殘差映射。在形式上表現為,假設網絡的輸入是x,期望的底層映射是H(x),讓堆疊的非線性層符合F(x)=H(x)?x這個映射。原始的映射將會被重新定義為F(x)+x。由此,保護了輸入信息的完整性,整個網絡只需要學習輸入與輸出有差別的那一部分,簡化了學習目標和難度。

圖2 殘差結構模塊Fig. 2 Residual structure module
殘差結構單元不僅能有效地解決深度神經網絡中梯度消失和精度退化的問題,而且可以在不額外增加計算量和網絡參數的情況下提升模型的準確度和計算速度[27]。
SENet (Squeeze-and-Excitation Networks)獲 得 了ImageNet2017 分類比賽冠軍,其提出的SE 模塊思想簡單,易于實現,并且很容易加載到現有的網絡模型框架中[30]。SE 是一個可由任意給定的變換組成的計算單元,結構如圖3 所示,對于任意給定的信息進入網絡模塊后進行如式(1)所示的轉換。

圖3 SE 結構Fig. 3 SE structure

式中,Ftr為轉換操作(一個或一組標準的卷積操作),X是輸入的圖片,U是提取的特征,W、H、C分別是寬度、高度和通道數。特征U首先經過一個壓縮操作,將空間維度為H×W的特征圖聚合成一個特征描述符。這個描述符包含了通道維度上特征響應的全局分布情況,使較低級別的層也可以獲得來自網絡的全局感受野的信息。接下來是激勵過程,用一個樣例特化(sample-specific)的激活函數,通過基于通道相關性的門限機制(self-gating mechanism)學習控制每個通道的激活情況。每個特征圖U將會被重新賦予權重并得到SE 輸出,可以直接輸出到下一層,在輸出之前,這個過程會被分成壓縮和激勵兩部分。
(1)壓縮(嵌入全局信息)。
為了解決通道間相關性的利用問題,應該首先輸出特征圖中每個通道的信號。每個卷積核都是作用在局部感受野上,這導致每個變換輸出U的單元不能利用這個范圍之外的環境信息,這個問題在感受野很小的較低層級中會更加嚴重。為了減輕這個問題,JIE H 等[30]將全局空間信息壓縮成一個通道描述符。利用全局平均池化得到一個通道維度(特征維度)上的統計數據。統計值z∈RC是由式(2)壓縮具有空間維度H×W的U得到的。

式中,Fsq為壓縮過程,變換輸出U可以被解釋為一個局部描述符的集合,這些描述符的統計信息可以表達整幅圖像,利用這些信息在特征工程的研究中是很常見的[31-33]。
(2)激勵(自適應重定標)。
為了能夠利用壓縮操作得到的聚合信息,下一步的目標是完整捕獲通道維度上的依賴性。為了實現這個目標,這個函數必須具有滿足兩個標準。第一,足夠靈活,能夠學習通道間非線性的相互作用。第二,能夠學習一個非互斥(non-mutually-exclusive)的關系,以確保多個通道都能被強調,這與獨熱激活(one-hot activation)方式相反。為了滿足這兩個標準,選擇了一個帶有sigmoid 激活函數的簡單門限機制,如式(3)所示。

ResNet 的殘差塊可以很好地利用淺層特征來獲取更多的關鍵特征值,在圖像分類和識別任務中,它經常被用作主要的特征提取結構。本文采用ResNet 作為主體結構,在此基礎上引入SE 模塊,構建出了SEResNet 網絡結構,如圖4 所示。通過加入一個全局池化層來生成特征分布,并以此完成信息編碼的提取。為了獲得各通道之間的相關性,結合ReLU 激活函數和sigmiod 門控制機制來完成特征的重標定[34]。另外,為了簡化模型參數的復雜性,還在ReLU 函數的兩端分別采用了1 ×1的全連接層[35]。

圖4 SE-ResNet 網絡結構Fig. 4 SE-ResNet structure
原始的ResNet 最后一層是一個全連接層,并且是一個輸出為1 000 維的線性層,為了讓該網絡適應本文的番茄蟲害識別模型,做了一定的修改。
(1)將原來的1 層線性層改為3 層線性層,并且最后一個線性層的輸出維度是10,因為本文研究的問題是一個10 分類問題。
(2)在網絡的特征提取部分中使用PReLU 激活函數[36]。因為該激活函數可以有效防止網絡中的神經元失活,還能在幾乎不增加網絡計算成本的情況下提升網絡的擬合能力。
(3)在前兩個線性層之后使用Dropout 方法[37]。Dropout 將網絡中的神經元以設定的概率丟棄掉,這樣可以減少參數數量,在一定程度上提升網絡的訓練效率。
(4)在最后一個線性層之后使用SoftMax 回歸作為網絡的輸出層。SoftMax 能將網絡的輸出映射到(0,1)之間,將最后結果轉化為每一個類別的概率。
試驗數據集采用Kaggle 網站上的Tomato 數據集,共有9 種番茄病蟲害類別,部分病蟲害示例如圖5 所示。為了增加網絡模型的訓練量,提高模型的泛化能力,在原始數據的基礎上利用數據增強的思想,擴充番茄病蟲害數據集,最終使數據達到22 930 張,其中訓練集數據達18 345 張,測試集數據達4 585 張,所有數據的統計如表1 所示。具體的數據增強方式:①以0.3 的概率對原始圖像進行上下翻轉或者左右翻轉;②用1∶1∶10 的平移尺度對圖片進行平移;③按照?10°∶1°∶10°的旋轉角度對圖片進行隨機旋轉;④采用1∶1∶10 的增強范圍對圖片進行對比度增強;⑤以均值為0、標準差為1∶1∶5 對圖片進行噪聲注入。

表1 數據統計Tab. 1 Data statistics單位:張

圖5 番茄病蟲害示例Fig. 5 Example of tomato pests and diseases
試驗平臺為Windows10 操作系統,16 GB RAM,CPU 為Intel(R) Core(TM) i5-10400F,處理器主頻為2.90 GHz,GPU 為RTX2060。使用的編程語言為Python,深度學習框架為Pytorch1.7.1,數據分析工具為matplotlib。
在經典ResNet 網絡模型的基礎上進行修改,使用SoftMax 回歸作為網絡的分類器,損失函數選擇交叉熵損失函數,并使用Adam 優化器進行優化和更新。在ResNet 的基礎上,將原來BasicBlock 模塊中的激活函數改為PReLU 函數,并在網絡中加入SE 模塊,最后搭建出不同深度的網絡模型,分別為ResNet34、ResNet50、SE-ResNet34 和SE-ResNet50。
網絡模型搭建好后,將所有的圖片進行裁剪使其大小固定在2 24×224像素,同時提取出用于訓練和驗證的圖片,訓練集的圖片參與網絡模型的訓練使其學習出對應的參數,測試集的圖片用來評價網絡模型的精度。試驗方法采用遷移學習的方式,因為遷移學習降低了構建深度學習網絡需要的訓練數據量和計算力,能夠很好地解決小容量數據集在模型上的過擬合問題[38-39]。試驗中設定模型的訓練次數為40 次,數據批處理量(batchsize)為64,學習率為0.000 3。網絡模型參數設置好以后,保持其他條件的一致性,分別使用ResNet34、ResNet50、SE-ResNet34 和SE-ResNet50 網絡模型進行試驗,并對結果進行比較。
為了直觀看到試驗效果和驗證方法有效性,采用經典ResNet 網絡和改進的SE-ResNet 網絡方法對番茄病蟲害識別做對比試驗,評價指標為準確率和損失值,結果如表2 和表3 所示。

表2 平均準確率對比Tab. 2 Comparison of average accuracy

表3 特定類別的識別準確率對比Tab. 3 Comparison of recognition accuracy for specific categories單位:%
由表2 可知,ResNet34 網絡模型的平均識別準確率最高可達94.23%,ResNet50 比ResNet34 的平均識別準確率低,這是因為ResNet50 對晚疫病和番茄花葉病毒的識別準確率雖然較高,但是對其他種類病害的識別準確率有一定程度的下降,尤其是在健康類別上,最終導致模型的平均識別準確率有所下降。由圖6 可知,改進的2 個網絡模型的平均正確率均高于原始網絡。這是因為引入了SE 模塊方法后,加強了網絡對輸入圖片的動態適應性,增強了網絡的區分能力,在一定程度上提高了網絡的識別正確率。在改進的SE-ResNet34 和SE-ResNet50 兩個模型中,SE-ResNet34 的平均正確率最高,達到97.96%,比沒有SE 模塊的ResNet50 結果高5.89%,證實了模型的有效性。

圖6 不同模型的準確率Fig. 6 Accuracy of different models
從表3 可以看出,加入SE 模塊的ResNet 網絡對病蟲害種類的識別正確率普遍高于經典ResNet 網絡。以SE-ResNet 網絡為例,該網絡在健康和黃葉卷曲病毒上的識別準確率相比經典ResNet 分別提升了9.02%和3.48%,但是對葉霉病的識別準確率卻下降了1.63%。這是因為SE 模塊能自動獲取到各通道特征的重要性,讓網絡模型學習到更重要的特征,由此讓網絡在學習特征時變得更加均衡,但正是由于這種均衡,會導致對健康和黃葉卷曲病毒類別的識別準確率提升,而對葉霉病類別的識別準確率有一定程度的下降。
對4 個網絡模型結構進行遷移學習,訓練過程中的損失值如圖7 所示。可以看出SE-ResNet34 和SEResNet50 的損失值均低于ResNet34 和ResNet50,這表明改進后網絡模型的預測值和目標值之間的差距越小,性能也越好。
由圖7 可知,在30 個epoch 后,損失值趨于平穩,但是依然存在一些小的波動。從損失曲線上可以看出存在很多個極小值,這就是局部最優解,網絡模型的每一訓練都會使得參數的變換朝著模型的局部最優解接近,但是局部最優解相對于全局最優解來說存在著一定的偏差,所以會出現曲線上下波動的情況。其次,學習率也會影響網絡模型的訓練效率,較低的學習率會使loss 曲線下降緩慢;較高的學習率會使loss 曲線出現水平不變的情況。從圖中可以看出,SE-ResNet34 和SE-ResNet50 網絡模型的loss 曲線是先快速下降后緩慢下降再趨于平穩的情況,同時它們的波動也相對較小,這符合優秀模型的loss 曲線分布。

圖7 不同模型的損失值Fig. 7 Loss values for different models
本文在經典ResNet 網絡模型結構的基礎上嵌入了SE 模塊,并改進了最后一層的全連接層結構,用一個10 分類的3 層全連接層取代原來ResNet 模型的1 000類分類層,對番茄的9 種病蟲害加一種健康類別共10種類型進行研究。通過遷移學習的方法,將Pytorch 官網預訓練好的模型應用到網絡中,基于不同深度的代表性網絡結構構建了4 種病蟲害識別模型,其中最高平均正確率達到了97.96%,證明了方法是有效可行的。試驗結果表明,加入SE 模塊的ResNet 網絡模型在提升網絡精度、獲得有效的病蟲害圖片特征、識別復雜圖片等方面都取得了不錯的效果。
但是現實生活中番茄病蟲害的種類不僅僅是本文所示的種類,要想網絡模型具有更強的泛化能力和更好地應用在實際生產中,還需要收集更全面、更多種類的數據集。下一步研究重心將會放在如何收集更大更全面的數據集,以及網絡模型的進一步訓練優化上。