楊新宇,馮 全,*,張建華,楊 森
(1.甘肅農業大學 機電工程學院,甘肅 蘭州 730070; 2.中國農業科學院 農業信息研究所,北京 100081)
目前,在農業病害識別中,深度學習卷積神經網絡,如TFL-ResNet、AlexNet、VGG16、FishNet等模型,已展現出較好的識別效果[1],在PlantVillage數據集上,對綜合性病害的識別準確率可達94.96%~99.34 %[2-4],在玉米[5]、番茄[6]、棉花[7]葉片的病害識別中識別精度分別達到98.96%、92.7%、97.16%。但傳統的卷積網絡需要有監督學習,需要大量標注圖像樣本。自監督具有不借助標簽、通過獨立學習獲得特征的優勢,是目前深度學習的研究熱點,在圖像分類、識別、檢測等領域已經取得很好的學習效果[8]。對比學習是自監督學習的一種[9],其目標是學習一個編碼器,此編碼器對同類數據進行相似的編碼,并使不同類數據的編碼結果盡可能不同。
研究者已經提出了多種對比學習方法(如SimCLR、MoCo),實現了基于負例的對比學習效果,借助動量更新的方式提高了模型性能。近來,更加簡潔的方法,如DeepCluster、SwAV[10]、BYOL[11]、SimSiam等不斷涌現,這些方法不僅不需要引用負樣本和聚類的算法,還有更優的學習效果,在下游的分類任務中有著良好的表現。田浩江等[12]提出一種改進型SimCLR模型,先利用多尺度提取方法,再通過多層感知機(MLP)降維處理對特征提取方式進行優化,在道路裂縫圖像分類上取得了較好的學習效果,準確率達到92.1%。奚琰[13]提出基于對比學習的局部全局關系算法,通過構建特定數據增強的正例構造方法,提升了模型的表征提取能力,在遮擋人臉的表情識別中達到了87.14%的準確率,超過Res18和DenseNet模型的效果。
目前,在農業領域關于對比學習的相關研究還很少,但其學習優勢和在分類任務中的良好表現正是植物葉片病害識別所需要的。本文將對比學習的主流學習方法應用于植物葉片病害識別,以采用對比學習方法訓練的ResNet50編碼器作為植物病害特征提取器,設置Linear和Finetune兩種分類器學習模式,在開源數據集PlantVillage和自建棉花病害數據集中進行病害識別試驗,以期為相關研究提供借鑒與參考。
自監督對比學習通過學習一個編碼器,不依賴大量數據,即可從未標注的樣本中自己進行獨立學習。其中,編碼器的作用是對同一類的數據進行相似編碼處理,不同類的數據則被賦予不同的編碼結果。對比學習的主要思想是:在學習過程中,通過建立相似實例和不相似實例來獲取學習模型,使得樣本在通過模型后,相似實例和投影空間的距離更近,而不相似實例和投影空間的距離更遠[14]。
本研究選用具有State-of-the-art(即在公開的數據集上,目前檢測到的效果最好、識別率最高、正確率最高,算法模型超過以前的所有方法,達到最優)的4種算法,在植物病害數據庫上進行對比試驗,優選適用于植物病害識別的模型。
對比學習依靠拉近與正樣本的距離、拉遠與負樣本的距離來完成特征的學習任務。運用相似度計算并衡量兩個輸入樣本的距離,是判定兩個樣本之間的距離,從而完成自監督對比學習的核心。兩個樣本的相似度可通過噪聲對比估計損失函數(NCE)進行二分類。在InfoNCE[15]中,按照希望樣本與正樣本的內積最大化,與負樣本的內積最小化的規則進行樣本向量相似度的判定。
MoCo-v2是典型的基于負例的算法,運用動量編碼器(momentum encoder)[13]和設置動態進出隊列的模式,采用動量更新的方式,將保存的負樣本作為動量編碼器的輸入x,運用余弦相似度和對比損失計算出負樣本和基準點的損失,然后將x加入到隊列,同時舊的隊首樣本出隊。這種方式不僅改善了缺乏負樣本的不足,還保證了隊列中的樣本一直是最新的,能夠有效減少新舊編碼不同的問題。其中,編碼器的參數fθ經過反向傳播進行梯度更新,動量編碼器的參數fξ通過移動平均(moving average)的方式進行動量更新。
DeepCluster是一種基于聚類的模型,主要思想是通過對提取到的特征進行聚類后生成偽標簽來實現網絡參數的更新,同時對偽標簽進行預測。Caron等[10]對其進行改造,使用ResNet50網絡、更好的圖像增強、余弦學習速率表、MLP投影頭、質心等形成了DeepCluser-v2模型。DeepCluser-v2模型對特征和質心兩者進行顯示對比,采用不在線學習的方式(指交換機制不在一個批次進行),在較大的數據集上學習效果不佳。
SwAV[10]與DeepCluser-v2的不同之處在于其可以在同批次進行交換分配,從而實現在線聚類,并且提出了multi-crop的數據增強策略。與其他幾種主流模型不同的是,SwAV在結構上設置了一個聚類中心c和經過Sinkhorn-Knopp 算法獲得的結果Q1、Q2。通過點乘編碼器的輸出和聚類中心向量獲得相似度矩陣,實現對Q2的預測;反之同理。如此,即可實現交換預測。Swapped Prediction是SwAV的總體損失函數,即對上下分支結構的損失求和。為了避免將實例聚類到同一類別,通過添加約束條件以保證單個批次內的圖像歸于不同類別。
BYOL[11]是一種基于對比聚類的算法,在其學習過程中不需要負樣本的存在。BYOL由兩個非對稱的神經網絡組成,一個為需要更新梯度的在線網絡,一個為不需要更新梯度的目標網絡。設給定輸入為x,經過兩次數據增強后得到視圖v和v′,v經過編碼器得到online(在線)輸出的特征表示,v′經過編碼器得到目標輸出的特征表示,輸出的特征值均通過MLP層映射得到特征向量,對其進行l2歸一化,最后將基于在線網絡得到的特征向量經過MLP層的映射得到對目標特征的預測,并利用均方誤差計算損失。
在BYOL中,MLP層中BN(batch normalization,批量歸一化)[13]的作用是重新調整輸出的分布,通過去除batch(每批次)內樣本一致的特征,保留不同的特征避免網絡坍塌。
2.1.1 PlantVillage數據集
PlantVillage[2]是植物病害葉片的開源數據集,有54 309幅圖像樣本,包含草莓、玉米、馬鈴薯等14種植物,覆蓋了常見的農作物。該數據集涉及的病害種類多樣,包含黑腐病、葉枯病、菌斑病等39種常見疾病,可以保證訓練樣本的豐富性。在本試驗中,訓練集、驗證集和測試集的圖像數量比設置為7∶1∶2。
2.1.2 自建棉花病害數據集
自建的棉花病害數據集的病害圖像來源于互聯網搜集和自己拍攝,共有2 722幅圖像(圖1),可分為8類棉花病害數據(包含健康葉片):白霉病170張,白葉枯病499張,褐斑病264張,曲葉病418張,枯萎病419張,輪斑病357張,黃萎病170張,健康葉片425張。以上病害類型均為棉花常見病害,所有樣本均來自復雜背景下的拍攝環境。試驗中,訓練集、驗證集和測試集的圖像數量比同樣設置為7∶1∶2。

圖1 棉花病害數據集(含健康葉片)的樣本示例Fig.1 Image samples of the self-built cotton disease dataset (including healthy leaves)
在深度學習中,通常會對圖像進行數據增強以提高模型的識別效果。本文針對自建的棉花病害數據集,選用圖像處理中常見的數據增強手法,如旋轉、隨機顏色和水平翻轉,進行手動數據增強處理。
用于評價模型性能的指標有很多。其中,準確率(accuary, ACC)將預測正確的樣本數量與樣本總數量做比,可以反映模型的整體準確率,ACC值越大,模型的準確性越高,可用于評價模型的精度;精確率(precision)也被稱為正確率,通過計算網絡學習中真正樣本(預測為正樣本且實際為正樣本的情況)占假正樣本(預測為正樣本但實際不是正樣本的情況)與真正樣本之和的比例來間接反應錯誤率,可直觀反映出學習方法實際的表現能力,其值越大,說明排除負樣本的效果越好;召回率(recall)能夠衡量正樣本在學習過程中被正確預測的比例,可以直觀地反映出分類器準確將正樣本分類的效果,其值越接近于100%,說明其分類效果越好,越能有效找到數據中的正樣本;F1值(F1 score)可以看作是對precision和recall值作調和平均值處理,其值越大,說明效果越穩定。
對比學習的輸出結果是一個性能優越的編碼器,在特征空間內將同類數據盡可能地拉近,排斥不同類的數據。該編碼器可以在下游的分類任務中作為分類器的特征提取器,并根據具體的識別對象和分類數量,再加上分類層進行二次訓練。編碼器一般采用一個卷積網絡。雖然對比學習不需要標注樣本,但仍然需要海量的訓練樣本,且學習過程需要大量的計算資源。本文選用MoCo-v2、DeepCluster-v2、SwAV和BYOL這4種主流的對比學習方法,以在大型圖像庫COCO上通過預訓練的編碼器[14]作為病害特征提取器,設置Linear和Finetune兩種分類器模式在PlantVillage數據集上進行二次訓練,以實現對植物病害的識別。上述4種方法的編碼器均采用ResNet50結構。
在Linear模式下,刪除預訓練的ResNet50模型的全連接層,只保留中間部分的卷積層、殘差層,在最后增加一個邏輯回歸的線性分類器(Logistic Regression)。訓練時,凍結ResNet50的預訓練參數,只對線性分類器的參數進行學習。編碼器在數據準備過程中不采取數據增強方式,將圖像調整到224 pixel后進行中心裁剪(統一至224 pixel×224 pixel)。對圖像進行歸一化處理,其像素均值和平均方差分別為[0.485,0.456,0.406]和[0.229,0.224,0.225],通過采樣器隨機采樣數據庫形成訓練集、驗證集和測試集。將訓練好的分類器應用于測試集上,得出測試集的準確率。其中,Logistic Regression包含參數C,取正則化系數的倒數,通常默認值為1,該數值越小,說明訓練模型的正則化效果越好。調用驗證集數據尋找效果最優的數值,并計算出模型的最終精度(Final accuracy)。
Finetune模式與Linear模式在結構上的差別是,前者在ResNet50后面采用Softmax作為分類器,訓練時所有網絡參數均會更新。Finetune模式的數據準備階段與Linear模式相同,導入數據集后得到訓練集、驗證集、測試集的數據加載器,運用隨機梯度下降法(SGD)+動量法(momentum)和自適應矩估計優化器(Adam)進行優化,同時,增加數據增強手段,包含隨機裁剪、翻轉和中心裁剪等供選擇,在驗證集中完成超參數優化,最終在測試集上完成病害識別準確率的評估。
用于開展植物葉片病害識別的測試系統軟件為Ubuntu16.04(64位),編程語言使用Python 3.7版本,以Pythorch 1.14版本為處理框架,采用Cuda 16.04版本的深度學習計算框架和cuDNN 7.6.3版本的配置加速庫,利用Pycharm進行程序調試。硬件配置為:NVIDIA GeForce RTX 3070 GPU顯卡,16 GB內存,8核16線程計算機處理器,基礎頻率3.2 GHz,最大睿頻4.4 GHz。
Finetune模式下的訓練參數設置如下:圖像尺寸為224 pixel×224 pixel,batch_size為32、64,訓練步數為5 000次。選用SGD+momentum作為基準優化器,同時增加Adam進行優化效果對比。
Linear模式下的訓練參數和訓練的模型均與Finetune中的參數設置和學習方法選擇保持一致。
在Finetune模式的訓練過程中,設置batch_size為64,對比4種方法所訓練的ResNet50網絡的損失函數和準確度曲線(圖2),可以看出,隨著訓練次數的增多,學習效果越來越好,損失函數值逐漸趨于0,識別準確率逐漸升高。MoCo-v2、SwAV、BYOL的損失(loss)值和ACC值在15步后逐漸平穩,說明它們只需要較少的訓練就能趨于收斂;而DeepCluster-v2的loss下降較為緩慢,訓練時間較長。

圖2 Finetune模式下4種對比學習方法的損失函數與準確率曲線Fig.2 Loss function and accuracy curve of four contrastive learning methods under Finetune mode
與文獻[16]的有監督學習模型在PlantVillage數據集下的損失函數曲線相比,基于對比學習的分類器訓練速度有所提高,訓練時間減少。
將Linear、Finetune模式下4種對比學習方法在PlantVillage數據集上的準確率整理于表1。在Finetune模式下,訓練時選用SGD+momentum算法進行優化,其中,momentum為0.9,初始學習率為0.01,學習率調整方法采用余弦退火算法(cosine annealing),每次迭代后調整學習率和權重衰減參數并將其應用于下一輪訓練中。優化器的選擇會影響識別模型的性能,本文選用SGD+momentum作為基準優化器,同時在Finetune模式下測試了Adam對模型性能的影響。

表1 不同對比學習方法在PlantVillage數據集上的準確率
基于4種對比學習方法所得的ResNet50模型在PlantVillage數據集上均具有較好的識別準確率,兩種模式下4種算法的平均準確率最高的分別為99.10%和99.83%。在Linear模式下,4種對比學習方法的識別準確率均在96%以上,其中,DeepCluster-v2的準確率最高(99.79%)。在Finetune模式下,當不引入Adam, batch_size提高到64時,出現了最優(BYOL,99.87%)和次優(SwAV,99.86%)的結果,但DeepCluster-v2的準確率較同等條件下的Linear模式下降了1.22百分點。
SGD在更新參數時每次只對一個樣本進行單獨計算,運行速度快,但容易陷入局部最優。Adam算法融合了Momentum和AdaGrad的方法,主要超參數包含學習率、一次momentum系數β1和二次momentum系數β2,β1控制一階動量,β2控制二階動量,在訓練過程中只對學習率和權重衰減進行更新。參考深度學習中Adam算法較好的優化效果,設置β1為0.9、β2為0.999、平滑項取值為10-8,開展測試。結果顯示,Adam對學習效果整體有正向影響,在batch_size分別為32、64的條件下,平均準確率較SGD均所提高,但對不同模型的正負效果各異。當batch_size為32時,SwAV、BYOL上不引入Adam算法的準確率略高,而在MoCo-v2上,引入Adam后,準確率提升了0.39百分點;當batch_size為64時,出現了最優(Deepcluster-v2,99.87%)和次優(SwAV,99.86%)的結果,4種對比學習方法的平均準確率為99.83%,優于不引入Adam算法的99.50%。
為更好地判定BYOL方法在植物葉片病害識別上的效果,選定Finetune模式,設置batch_size為64,優化方法選用SGD+momentum,對其在PlantVillage數據集上38類病害的識別momentum開展分類討論(表2),進一步探析對比學習方法特征提取中的泛化能力。BYOL方法在PlantVillage數據集上預測的平均準確率為99.68%,除健康葉片外,對蘋果黑星病(C1)、蘋果黑腐病(C2)等28類病害的識別準確率達100%,對玉米灰斑病(C8)的識別準確率最低(94.96%),其次為番茄細菌性斑點病(C30),準確率為98.98%。

表2 BYOL方法在PlantVillage數據集上各類別的準確率
綜上,在PlantVillage數據集上,當batch_size為64,選用SGD+momentum+Adam時,基于4種對比學習方法的ResNet50病害識別模型的準確率在99.75%~99.87%,優于有監督學習的植物葉片病害識別準確率(99.34%)[4],展現出對比學習在植物病害識別方面的優越性。在Linear模式下,即使沒有使用復雜分類器(如Adam)或凍結預訓練參數,運用BYOL方法得到的分類器依然可以實現99.70%的準確率,說明利用本文所選擇的對比學習方法訓練的編碼器能夠在不同類型的數據庫上學習到良好的同類數據聚類能力。
本文的預訓練模型是在COCO圖像集上訓練得到的,雖然COCO圖像集與PlantVillage數據集在圖像類型和特征分布上是完全不同的,但經過預訓練的模型仍在PlantVillage數據集展示出了較好的效果,充分體現了運用對比學習方法得到的編碼器在圖像識別中作為特征提取器的優勢。文獻[17]用有監督訓練方法訓練ResNet50,準確率為95.38%,本文運用4種對比學習方法訓練得到的ResNet50模型的準確率均高于前者,說明當網絡結構相同時,用本文所選擇的對比學習方法訓練的分類模型具有更好的性能。此外,本研究中99.87%的準確率也高于文獻[18]用ResNet152這種復雜網絡所獲得的準確率(99.59%)。這進一步證明,在本試驗條件下,自監督對比學習的效果優于有監督網絡模型,能夠在保證更優秀的學習效果的同時,有效降低模型尺寸。
PlantVillage數據集的圖像背景較為干凈。為檢驗4種對比學習方法在背景復雜圖像上識別植物葉片病害的效果,在自建的棉花病害數據集上開展進一步測試(表3)。在Linear模式下,當batch_size設置為32時,BYOL、Deepcluster-v2方法的準確率均超過98%;當batch_size設置為64后,各方法的準確率均得到提升,4種方法的平均準確率提升0.87百分點,DeepCluster-v2的準確率最高(98.86%)。可以看出,通過提升訓練的batch_size可以幫助網絡更好地提取特征。但是,Finetune模式下各模型的整體表現效果都略遜于Linear模式,當batch_size為32時,前者的平均識別準確率較后者低1.38百分點,在提升batch-size后效果也只與Linear模式批次為32時相當,整體表現效果略差。

表3 不同對比學習方法在棉花病害數據集上的準確率
具體到各棉花病害類別(含健康)上,4種對比學習方法對棉花黃萎病的識別能力較弱(表4),精確率最低的為87.78%,召回率最低的為85.19%,F1值最低的為86.47%。對比4種學習方法,總體上以DeepCluster-v2的識別效果最好。

表4 不同對比學習方法在自建的棉花病害數據集上的測試結果
以識別效果相對最好的DeepCluster-v2為例,基于其在自建的棉花病害數據集上的測試結果,繪制混淆矩陣(圖3,縱軸為真實值,橫軸為預測值),直觀展示不同棉花病害被誤判為其他病害的情況。可以看出,DeepCluster-v2對健康葉片和曲葉病的識別效果最好,對黃萎病的識別效果較差,容易將其誤認為輪斑病或枯萎病,分別占整體誤判率的75%和25%。從病害圖片(圖4)上也可以看出,黃萎病、輪斑病和枯萎病的病斑均為黃褐色形態,且病斑面積較大,病斑位置相似,因此容易形成誤差。同樣地,白葉枯病與褐斑病的病斑均為褐色斑點,病斑分布也較為相似,也容易出現誤判現象。

圖3 Linear模式下DeepCluster-v2方法在自建的棉花病害數據集上的混淆矩陣Fig.3 Confusion matrix of DeepCluster-v2 on the self-built cotton disease dataset under Linear mode

圖4 棉花黃萎病、枯萎病、輪斑病、白葉枯病、褐斑病的照片示例Fig.4 Sample images of cotton verticillium wilt, fusarium wilt, target spot, bacterial blight, brown spot
文獻[19]也采用了本文中自建的棉花病害數據集,將數據集經過壓縮處理后進行遷移學習,在DenseNet40-80%-T模型下獲得的最高準確率為97.23%,低于本文中DeepCluster-v2模型獲得的98.86%的準確率。這說明,自監督對比學習算法的病害識別能力優于部分有監督學習的模型,在棉花病害識別中展現出了良好的性能。
本文將MoCo-v2、DeepCluster-v2、BYOL和SwAV這4種對比學習方法分別應用于開源植物病害數據集PlantVillage和自建的棉花病害數據集,采用預訓練編碼器ResNet50作為特征提取網絡,分別設計Linear和Finetune兩種模式構建病害分類模型。在PlantVillage數據集測試中,Finetune模式的平均準確率略高于Linear模式,兩種模式下4種算法的平均準確率最高的分別為99.10%和99.83%,均高于有監督學習的方法。在棉花病害數據集測試中,Linear模式下4種算法的整體表現略高于Finetune模式,平均準確率最高的為98.56%。本試驗的結果表明,對比學習方法的整體識別率高且穩定,說明自監督對比學習方法的編碼器的特征提取能力較好,在使用簡單的邏輯回歸分類器和Softmax分類器的情況下,其識別效果優于傳統的依賴人工標注的有監督卷積網絡,在植物病害識別方面展現出良好的應用前景。