史冰瑩,李佳琦,張 磊,李 健
1(中國科學院 計算機網絡信息中心,北京 100190)
2(中國科學院大學,北京 100049)
3(生態(tài)環(huán)境部 南京環(huán)境科學研究所,南京 210042)
中國的耕地面積為1432 960 平方公里,排世界第3 位,然而同時中國也是世界上人口最多的國家.截止2018年,中國用全球7%的耕地養(yǎng)活了近20%的人口.作為一個人口大國,保障糧食不僅關系到人民福祉也同時會影響社會安定.據中國統(tǒng)計年鑒,2016年全國農業(yè)生產總值達5.93 萬億元,占GDP 的8.0%,而由農業(yè)病蟲害等災害造成的直接損失達0.503 萬億元,占農業(yè)生產總值的8.48%,可見農作物病蟲害對農業(yè)影響之巨大.同時在農業(yè)生產中,大量農藥的使用加劇了對環(huán)境的污染.因此對農作物的病蟲害進行準確的識別并推薦合適的防治措施,不僅對于農業(yè)生產意義重大,對于改善整個社會經濟環(huán)境也有幫助.隨著計算機技術的飛速發(fā)展,越來越多學者嘗試將圖像識別算法運用到病蟲害識別過程中.傳統(tǒng)的圖像識別技術在對圖像進行預處理后提取圖像的顏色紋理等的特征,基于這些提取的特征值進行線性建模.然而這種傳統(tǒng)的圖像識別方法,局限性大,對非線性數據的識別成功率很低,因而在農作物病害檢測中,其模型的識別成功率非常不理想.隨著大數據、機器學習等概念的出現,支持向量機、樸素貝葉斯、BP 神經網絡等經典機器學習算法也被用于病蟲害識別分類中.然而傳統(tǒng)的機器學習算法更適用于小樣本的研究實驗中,在農業(yè)病蟲害圖像識別的復雜場景和大量數據的情況下,基于卷積神經網絡的深度學習模型往往能取得更優(yōu)的效果.
深度學習的快速發(fā)展使圖像分類任務的精度得到了很大提升,而卷積神經網絡正是深度學習中代表性的算法,具有很強的泛化性,不需要特意設計分類器.因此本文基于卷積神經神經網絡的方法構建農作物病蟲害圖像識別模型.然而由于農作物病蟲害圖像數據較為稀缺,且對于不同的病蟲害圖像采集難度不同,這導致了我們的訓練樣本分布不平衡,如果不加以處理則會影響到模型識別的準確度.因此本文采用遷移學習的方法,利用在大型數據集ImageNet 預訓練后的模型進行建模.并且采用數據增強的方法增大樣本量,緩和數據不平衡問題同時可以提高模型的泛化性能.同時改進損失函數,采用焦點損失函數(facal loss)[1]代替?zhèn)鹘y(tǒng)的交叉熵損失函數來解決數據不平衡問題.實驗表明,基于Inception-V3 網絡以及Resnet 網絡建立的病蟲害圖像識別模型準確率高,并且改進損失函數后病蟲害圖像識別模型準確度進一步提升,損失明顯降低.
國外的農作物圖像病蟲害識別的研究大約從20世紀80年代開始.Sasaki 等[2]采用貝葉斯決策的方法,通過光譜反射率之間的區(qū)別辨別黃瓜葉片的健康和病斑區(qū)域.Vízhányó等[3]提出一種RGB 空間轉換方法,通過健康蘑菇和患病蘑菇的顏色點的不同來辨別患病蘑菇.隨著機器學習的發(fā)展,人們開始嘗試將機器學習算法應用于農作物病害圖像識別.Sammany 等[4]利用遺傳算法改進神經網絡,基于改進后的網絡建立病蟲害識別模型,并對特征向量進行降維,從而提高病蟲害識別效率.馬來西亞國立大學的Al Bashish 等[5]采用K 均值聚類算法將圖像分為4 個簇,分別對每個簇提取其顏色及紋理等特征值后將其輸入神經網絡進行分類并取得了不錯的效果.瑞士洛桑聯(lián)邦理工學院Mohanty 等[6]利用GoogLeNet 卷積神經網絡結構建立病蟲害識別模型并取得了不錯的效果.
國內的農作物病害圖像識別起步較晚,大約從21世紀開始,徐貴力等[7]基于直方圖法提取的番茄葉片顏色特征后進行識別,準確率可達70%以上.趙玉霞等[8]采用樸素貝葉斯分類器識別玉米銹病等5 種病害,取得了比較好的效果.田凱[9]基于Fisher 判別法、貝葉斯分類器和支持向量機的方法構建模型識別褐紋病與非褐紋病圖像,對比后發(fā)現Fisher判別法的平均識別效果最好.李敬[10]基于6 層卷積神經網絡建立煙草病害識別模型取得了不錯的效果.甘肅農業(yè)大學的劉闐宇等[11]采用Faster-RCNN 方法識別葡萄葉片位置,基于卷積神經網絡建立模型,該模型對葉片病變識別準確率最高可達75.52%.
通過對上述國內外的相關研究分析,可以了解到大多數研究依然采用傳統(tǒng)圖像識別的方法與機器學習方法結合從而實現對農作物病害圖像的分類,通常要在農作物病害圖像的識別之前對病害圖像進行預處理、病斑分割和特征提取等幾個步驟,并且對于不同的病害圖像這個過程往往采用不同的方法實現,沒有提出可以針對多種作物不同病害圖像處理的方法.與傳統(tǒng)圖像處理手段相比,深度學習省去了大量預處理的步驟,在縮短了識別時間同時提高了識別準確率以及模型的泛化性能.與傳統(tǒng)的建模方法和淺層神經網絡模型相比,基于深度卷積神經網絡結構的識別模型魯棒性更強[12],對于外界環(huán)境條件要求不高,更適合應用到實際的生產生活中.
卷積神經網絡(Convolutional Neural Networks,CNN)本質是一個多層感知機,基本組成部分包括輸入層、卷積層、激活函數、池化層和全連接層5 部分.局部連接、參數共享是卷積神經網絡的兩大特點.LeNet-5[13]網絡結構是早期卷積神經網絡的代表性結構,由Yann LeCun 提出,用于手寫數字識別.LenNet-5 共有7 層,包括2 個卷積層、2 個池化層、3 個全連接層,其結構如圖1所示.
圖1 LeNet-5 結構圖[13]
隨著深度學習的不斷發(fā)展,卷積神經網絡結構也在不斷更新,其中Inception 網絡以及Resnet 網絡是卷積神經網絡發(fā)展中最具代表性的兩類算法.
Inception 網絡[14]是卷積神經網絡發(fā)展過程中里的重大進展,在此之前傳統(tǒng)的卷積神經網絡依靠堆疊卷積層來提高性能,然而隨著網絡層數的加深會導致過擬合現象的出現并且計算量也大大增加.因此Google在2014年提出了Inception-V1 算法,該算法整合不同尺度的卷積核以及池化層形成Inception 模塊,利用1×1 的卷積核進行降維,降低了參數量.該算法在ILSVRC 2014 的比賽中取得分類任務的第一名,相比于之前的AlexNet 網絡[15]提高準確率的同時大大減少了參數量.Inception-V3 在Inception-V1 的基礎上,用一維的1×7 和7×1 的兩個卷積核代替原始的7×7 的卷積核.對卷積核進行非對稱分解不僅減少了參數規(guī)模,并且因為將1 個卷積核拆分成為2 個卷積核這使得網絡也可以得到進一步加深.
典型的Inception 模塊如圖2所示.
隨著網絡層數的不斷增加,網絡結構越來越深,結構加深導致的梯度消失問題會使模型的學習愈加艱難.因為當梯度被反向傳播到前面時重復相乘會導致梯度變得無限小,此時卷積神經網絡的性能不再提升甚至開始下降.針對這個問題,Resnet 算法[16]引入了全等映射的思想,引入了殘差學習單元.其基本思想是假定某段神經網絡的輸入是x,期望輸出是H(x),假設我們如果把輸入x作為初始輸出結果,那么我們需要學習的目標就變成了H(x)-x,即我們不再學習完整的輸出H(x)而是學習殘差H(x)-x.如圖3所示,這就是一個Resnet 的殘差學習單元(residual unit).
圖2 Inception 模塊結構圖[14]
圖3 殘差結構單元[16]
殘差單元有效地解決了在深度網絡中的退化問題,并且在不額外增加網絡參數和計算量的基礎上提升了模型速度和準確度.
Inception-V3 和Resnet 作為近年卷積神經網絡的具有代表意義的經典模型,在圖像分類領域取得了優(yōu)異的成績.因此本文分別以Inception-V3 和Resnet 網絡為基礎構建農作物病蟲害識別模型.
本文數據來自于AI Challenger 比賽,數據集包括10 個物種,27 種病害.按照物種-病害-程度不同共分為61 類.每張圖包含一片農作物的葉子,葉子占據圖片主要位置.其中訓練集驗證集分布如圖4、圖5所示,可以看出訓練集與驗證集分布相似但不同類別分布差異較大.由于第44 類與45 類在訓練數據集中分別只有1 張,在驗證集中分別有1 張和0 張,數據嚴重缺失.因此在后續(xù)實驗中剔除以下兩類數據,最終有59 種數據分類.
圖4 訓練集數據分布
圖5 驗證集數據分布
數據集包含圖片和標注的JSON 文件,JSON 文件中包含每一張圖片和對應的分類ID,JSON 文件格式如下所示:
每一個ID 代表一種類型,其對應說明詳情如表1所示.
訓練集包含31 716 幅農作物病蟲害圖像,驗證集包括4539 張農作物病蟲害圖片.每張圖片包含一片農作物葉片且葉片位于中心主要位置,葉片有不同程度的病變.部分圖片展示如圖6所示,從左到右依次為蘋果健康、蘋果黑星病一般、蘋果黑星病嚴重.
表1 部分ID 及其對應說明
圖6 部分病蟲害圖片
由于數據集本身分布不均,為了增大樣本量并且提升模型泛化性能,需要對數據集進行數據增強.數據增強指利用已有的數據進行比如翻轉、平移或旋轉基于卷積神經網絡的農作物病蟲害圖像識別模型等操作來衍生出更多的數據,這樣不僅可以一定程度上緩解數據不平衡問題同時也可以使模型有更好的泛化效果.
數據增強可以分為離線增強和在線增強.離線增強直接對數據集進行處理,常用于數據集較小的時候.而在線增強適用于大型數據集,在模型訓練過程中獲得batch 數據之后,然后對這個batch 的數據進行增強,如旋轉、平移、翻折等相應的變化,該方法相對于離線增強操作更為簡潔,且可以使用GPU 優(yōu)化計算.因此本文在后續(xù)工作中將采用在線數據增強的方式.在線增強部分代碼如下所示:
在訓練過程中獲取batch 數據后進行在線增強,具體操作如下:(1)輸入尺寸變化為默認值224×224;(2)隨機旋轉30 度;(3)隨機水平翻轉;(4)隨機垂直翻轉;(5)放射變化;(6)轉為Tensor 并歸一化;(7)標準化.
通常在圖像分類的時候,我們的損失函數一般為交叉熵損失函數(cross_entropy loss).交叉熵指真實輸出(概率)與預測輸出(概率)的距離,因此交叉熵的值越小,證明兩個概率分布越接近.以二分類為例,二分類交叉熵損失函數公式如下:
其中,y表示真實樣本的標簽(1 正0 負),正樣本是指屬于該類別的樣本,負樣本是指不屬于該類別的樣本.而y'是經過Sigmoid 激活函數的預測輸出(數值在0-1 之間).由此可見當y為正樣本即y等于1 時,輸出概率越大損失越小.而當y為負樣本即y等于0 時,輸出概率越小則損失越小.
然而由于在數據集中存在大量簡單的負樣本,這些樣本在迭代過程中產生的損失占據了總損失的大部分,這可能會導致我們偏離正確的優(yōu)化方向.
為了改善這種情況,He KM 等[16]提出的一種新的損失函數思想,并將其運用到目標檢測中,取得了優(yōu)異的效果,焦點損失函數公式如下:
首先在交叉熵的基礎上加上一個因子( 1-y′)γ,用于減少容易分類的樣本對于損失的貢獻同時增大難以分類的樣本對于損失的貢獻.例如當γ等于2 時,y真實值等于1,預測值y′為0.95 時,此時(1-0.95)的γ次方就會很小,該樣本的損失函數值就變得更小.準確率越高的類衰減的越厲害,這就使得準確率低的困難樣本能夠占據loss 的大部分,這樣模型在訓練時就可以更加專注于難以分類的樣本.
在此基礎上,引入平衡因子α,該因子可以用來平衡正負樣本本身的數量比例不均即類別不均衡.根據實驗表明當α的值取0.25,γ的值取2 時,該組合效果最好.
基于焦點損失函數的思想,將該解決思路用于本文的病蟲害識別多分類模型中,用焦點損失函數代替原有的傳統(tǒng)交叉熵損失函數(cross_entropy loss).實驗證明對損失函數進行優(yōu)化后的模型準確率得到了進一步提升.
基于上述數據集建立農作物病蟲害分類模型,訓練集包含31 716 幅農作物病蟲害圖像,驗證集包括4539 張農作物病蟲害圖片.選取Inception-V3,resnet18,resnet34,resnet50 等4 類代表性深度學習網絡結構進行訓練.訓練方式采用遷移學習的方式,利用已在大型數據集ImageNet 進行預訓練后的模型,凍結前幾層的權重,根據該數據集修改全連接層的輸出,重新以本文農作物病蟲害數據集為基礎進行訓練,最終得到基于農作物病蟲害圖像的識別模型.流程如圖7所示.
圖7 病蟲害識別模型學習流程
本文采用深度學習框架Pytorch,圖片輸入大小為224×224,batch size 設置為128,epochs 設置為40,由于模型進行遷移學習只需要微調因此初始學習率設置為0.001 即可.在后續(xù)過程中對學習率采用等間隔調節(jié)的策略,每十輪迭代后學習率調整為當前學習率為0.1 倍.
對于優(yōu)化算法而言,Adam 優(yōu)化算法既考慮了Momentum 優(yōu)化算法動量累計梯度的思路,又結合了RMSProp 優(yōu)化算法在加速收斂速度的同時減小波幅的優(yōu)點,因此本文在后續(xù)訓練過程中選擇Adam 優(yōu)化器.
模型訓練過程中的迭代詳情如圖8所示.
(1)加載已在Imagenet 上進行好預訓練的模型,固定前幾層的權重并將全連接層的輸出改為本文病蟲害數據集類別數59.
(2)按照上文的參數設置初始化網絡.
(3)加載病蟲害圖像數據并進行數據增強后輸入卷積神經網絡.
(4)通過該模型得到的預測類別與輸入圖片的實際類別進行對比,計算損失.
(5)誤差反向傳播對網絡的每個權重求偏導計算梯度乘以學習率進行更新.
(6)在驗證集上進行識別得到該模型的正確率.
圖8 訓練迭代流程
本次實驗選擇Inception-V3,resnet18,resnet34,resnet50 等4 類代表性卷積網絡神經結構,分別進行遷移學習并在此基礎上對原有的損失函數進行優(yōu)化,建立的病蟲害識別模型準確率如圖9所示.可以看出這4 類模型收斂后準確率相差甚微,且準確率均在86%以上.
圖9 不同模型top1 準確率曲線變化
分別將原始模型以及優(yōu)化后的模型進行對比,訓練過程準確率曲線如圖10所示,我們可以看出在Inception-V3,resnet18,resnet34,resnet50 等4 種經典網絡結構下,優(yōu)化后的模型在前期和后期都取得了更優(yōu)的結果,收斂后4 類模型的準確率均得到了有效提升.
圖10 模型對比top1 準確率曲線變化
最終實驗結果如表2所示,可以看出不論是原始模型還是優(yōu)化后的模型對農作物病蟲害圖片識別的準確率都在85%以上,證明了卷積神經網絡在病蟲害識別中可行性以及有效性.且與傳統(tǒng)圖像處理以及機器學習的方法相比,基于卷積神經網絡建立的識別模型前期并不需要繁雜的圖像預處理步驟,數據增強也可以通過訓練過程中在線完成,模型建立過程更加簡潔.通過對比實驗結果可以發(fā)現在Inception-V3,resnet18,resnet34,resnet50 等4 種經典網絡結構下,對損失函數進行進一步優(yōu)化后的農作物病蟲害識別模型的準確率都得到了有效的提升.
表2 準確率對比
本文通過遷移學習的方法,將卷積神經網絡算法應用于農作物病蟲害識別中,基于不同的代表性網絡結構建立了農作物病蟲害識別模型,其準確率均達到85%以上,證明了將卷積神經網絡應用于病蟲害識別是可行并且有效的.并且在對損失函數進行優(yōu)化后的新的模型的準確率可以提升到86.5%以上.通過該農作物病蟲害模型我們可以快速識別不同病蟲害,并且可以根據程度不同采取合適措施,噴灑不同劑量的農藥,實現農業(yè)現代化的同時減輕農藥對環(huán)境的污染.
然而農作物病蟲害種類遠超本文數據集中所示的種類,想要應用于實際生產中我們仍然需要更大更全面的數據集進行模型訓練.然而農作物病蟲害數據收集困難,人工標注成本極其高昂.因此如何獲得更全面的數據集且如何對獲得的數據集進行準確標注是我們未來研究的重點內容.