任守綱,賈馥瑋,顧興健,袁培森,薛 衛,徐煥良※
(1. 南京農業大學信息科技學院,南京 210095; 2. 國家信息農業工程技術中心,南京 210095;3. 江蘇省物聯網技術與應用協同創新中心,南京 210023)
植物病害是造成農作物減產甚至絕產的主要原因之一。植物在遭受細菌、病毒的侵害后,大多數會在葉片上有一定的表征,如生成各類病斑、滋生霉狀物、局部干枯等[1]。植物病害種類復雜多樣,為了避免人工診斷錯誤,幫助非專業人員及時發現病情并對癥下藥,通常利用可見光波段圖像檢測植物外部形態變化識別病害的類型。
早期的植物葉片病害識別主要依賴人工設計特征,使用顏色、形狀、紋理等信息建立特征向量,然后利用支持向量機[2]和神經網絡[3]等方法對特征向量進行分類。這種使用固定特征提取方式訓練出的模型雖然能取得一定的識別效果,但一般需要先分割出病斑或病葉,增加了前期工作量,且每次都要針對不同的病害組合設計特征提取方法,缺乏魯棒性,也難以區分相似病害。基于傳統機器學習的病害識別模型不僅嚴重依賴于特征提取方法,還需要對不同植物的病害設計不同的識別模型,缺乏普遍適用性。
自 2012年 AlexNet[4]被提出以來,卷積神經網絡(Convolutional Neural Networks,CNN)成為在圖像分類上的核心模型。CNN可通過多個卷積核,自動從圖片中學習特征后分類,其端到端的結構為農業領域的研究提供了便利。2016年,Mohanty等[5]使用 AlexNet和GoogleNet 2種卷積神經網絡對PlantVillage病害數據集的38類葉片病害圖像分類,準確率高達99.35%。孫俊等[6]將批歸一化和全局池化方法加入 AlexNet用于植物葉片病害分類,準確率達99.56%。許景輝等[7]通過改進VGG16模型識別田間環境的玉米病害種類,對 3種病害的平均識別準確率為95.33%。基于深度學習的植物葉部病害種類識別已經達到了較高的精度。2018年AI Challenger比賽對38類病害重新標注,將多數病害按嚴重程度分為一般和嚴重2類,共61類。Liang等[8]重新篩選比賽數據,利用其中的45類,設計了一個可以同時識別植物種類、葉片病害和葉片病害嚴重程度的植物病害診斷系統,識別精度分別達到了99%、98%和91%。郭小清等[9]將番茄病害分為早中晚期3類,設計了基于AlexNet的多感受野識別模型。任勝男等[10]針對植物病害小樣本問題提出了一種基于one-shot學習的植物病害識別方法,用關系網絡模型識別 PlantVillage數據集中 8類樣本較少的植物病害。上述研究工作主要采用細粒度分類識別葉部病害程度,以及小樣本學習方法識別訓練樣本較少的病害種類,已經取得良好進展,但是這些端到端的分類器對特征學習過程不透明,且易過擬合,若學習到無用特征則會對病害識別產生干擾。
針對卷積神經網絡的可解釋性問題,目前常使用反卷積[11]、導向反向傳播[12]和梯度加權類激活映射[13]等方法對CNN的學習能力進行可視化。Brahimi等[14]從CNN的可解釋性出發,提出了一種植物病害分類的可視化訓練方法,利用具有黑色背景的PlantVillage數據,在沒有像素級標注的情況下訓練病害分類模型,并使用反卷積方法將發生病害的部位可視化,比現有的可視化方法[11-13]產生了更清晰的效果。但上述方法在面對有桌面背景的PlantVillage數據時,背景容易與病斑一起響應。
目前關于病斑分割的研究主要分為圖像處理方法[15-17]和深度學習方法[18-21]。隨著全卷積網絡[22](Fully Convolutional Networks,FCN)、U-Net[23]等語義分割網絡的出現,對農作物病害分割的研究大多基于深度學習方法,無需手工特征提取并取得了更好的效果。劉文定等[18]使用不同的跳躍連接方法構造了5種不同的FCN網絡,快速精確地識別復雜、邊界不規則的油松林蟲害區域,像素準確率達到97.86%。王振等[21]針對復雜背景的病害提出一種級聯神經網絡,首先對病害區域進行定位,然后使用加入多尺度特征的 SegNet[24]分割病斑,分割精度達87.04%。語義分割網絡雖可同時分割不同類別的病害,但有幾點不足:1)語義分割網絡需要大量的像素級標注;2)多種病害的病斑相似,在做病斑分割時,只能分成背景和病斑2類,難以確定病斑所屬的病害種類。
針對特征提取具有盲目和不確定性的問題,本研究標注少量病斑,利用反卷積引導CNN分類器關注真實病斑部位,提出了一種基于反卷積的番茄葉部病害識別及病斑分割模型。該模型可以同時分類病害和分割病斑,對遮擋物及光線強度干擾具有魯棒性,并可降低對病害圖片標注的強度。根據該模型的病害識別結果和分割結果,可進一步評估病害發病程度,精準高效施藥,對發展高效、生態、環保農業提供技術保障。
試驗數據來自PlantVillage數據集中的10類番茄葉部病害圖像,包括細菌性斑點病2 127張、早疫病1 000張、晚疫病1 909張、葉霉病952張、斑枯病1 771張、二斑葉螨病1 676張、輪斑病1 404張、花葉病373張、黃曲葉病5 357張、健康葉片1 591張,共18 160張。
圖1給出數據集中10類番茄葉部病害樣本的例子。由圖 1可知,番茄葉部病害的識別和病斑分割主要有以下4個難點:1)不同病害表征不同,在病斑分割時需要分別考慮各病害的特點;2)某些病害表征相似,如二斑葉螨病和花葉病,給病害識別增加了難度;3)葉片背景給分割帶來干擾,因光照因素產生的陰影容易被錯認成病斑;4)病斑形狀不規則,有些病害的病斑較小,肉眼難以發現發病初期的病斑,給病斑分割帶來了難度。
數據集中每類病害的樣本分布不均勻,有限的訓練數據容易使深度學習模型過擬合。在深度學習中,使用數據增強方法對數據進行擴充,可以提高模型的泛化能力。本研究的訓練數據使用pytorch[25]框架下的在線增強方法,即在訓練過程中對每個batch數據隨機選擇一種增強方法,無需增加原本的數據集數量。為了避免改變原有數據特征,更好地模擬真實拍攝條件下各樣本的差異,本研究訓練集主要采用以下數據增強手段:1)翻轉:對圖像進行水平翻轉、垂直翻轉、先垂直后水平翻轉 3種翻轉方式,模擬采集樣本時拍攝角度的隨機性,不會改變病斑形狀與病斑在葉片上的分布狀況。2)顏色抖動:改變圖像的亮度或飽和度,模擬光照差異,并保證參數符合現實拍攝情況,避免圖像失真。3)添加噪聲:對圖像增加信噪比為0.98的椒鹽噪聲或高斯噪聲,模擬拍攝過程中產生的噪聲,并弱化高頻特征防止模型過擬合。訓練數據增強結果如圖2所示。

圖1 番茄葉部健康與病害圖像對比Fig.1 Comparison of tomato disease and healthy leaf

圖2 訓練樣本增強示例Fig.2 Illustration of train data augmentation
計算機視覺的一個關鍵挑戰是處理現實世界的數據波動。本研究使用的數據集均在實驗室場景下拍攝,為了模擬自然拍攝情況下會出現光照不足、葉片偏離中心和異物遮擋的情況,采用 3種圖像增強方法對測試數據進行離線增強:1)平移:先裁剪圖像的一部分,然后使用邊界像素值將缺失像素補齊,模擬拍攝時葉片偏離鏡頭中心、葉片不完整等情況。2)遮擋:生成隨機大小、隨機位置和隨機旋轉角度的番茄果實、土壤以及綠色葉片對葉片區域進行遮擋,模擬目標葉片被遮擋的情況。3)降低亮度:將圖片亮度依次減少到原圖像的 40%、50%和60%,模擬光照不足的情況。測試數據增強結果如圖3所示。

圖3 測試樣本增強示例Fig.3 Illustration of test data augmentation
PlantVillage數據集中已有可用于訓練病害識別模型的圖像級標注,而訓練病斑分割模型,還需要對病斑進行如圖4的像素級標注。

圖4 葉部病斑的像素級標注Fig.4 Pixel-level annotation of leaf disease
像素級標注費時費力,目標小、數量多的病斑給標注帶來了更大的困難。本研究利用病害類別和病斑位置同時訓練病斑分割模型,因為反卷積模塊作為分割模型的關鍵部分,作用是將特征提取時類響應高的像素區域作為病斑部位,所以只需要從每類病斑中選擇幾張典型樣本,對部分樣本進行病斑的像素級標注。除健康葉片不需像素級標注外,從其他9類病害中分別選出30幅樣本,使用圖像語義分割標注工具LabelMe[26]進行標注。其中5幅樣本用于訓練分割模型,25幅樣本用于測試分割效果。
以 VGGNet[27]為基礎構建基于反卷積的番茄葉部病害識別及病斑分割模型DGVGGNet,模型結構如圖5所示。與其他語義分割的網絡不同,本研究利用卷積神經網絡提取圖像特征后,仍保留全連接層以得到病害分類結果,病斑分割模塊則只預測病斑位置不預測病斑類別。本研究模型分為3個階段:第1階段,由VGGNet得到病害分類結果;第2階段,將全連接層向量重新映射到高維向量,并重塑成特征圖形式;第3階段,采用逐層上采樣的方式,通過跳躍連接將VGGNet提取的特征圖與上采樣得到的特征圖進行拼接,利用卷積層實現特征融合,最終通過重構層得到病斑分割圖。模型實現端到端學習,可同時實現病害識別和病斑分割。進行特征提取時,分割模型引導識別模型更加關注病斑位置;進行反卷積時,識別模型的優化也會提升分割精度。
2.1.1 輸入層
輸入圖像為葉片病害的彩色 3通道圖像,圖像尺寸統一調整為 224×224像素。為了增強模型的泛化能力,在訓練過程中隨機選擇一種數據增強方法對原圖進行處理,并將經過歸一化和標準化后的數據作為 VGGNet的輸入。
2.1.2 VGGNet網絡設計
保留原VGG16模型的卷積層設計,共13個卷積層,5個最大池化層,每個卷積層使用Relu激活函數。卷積核尺寸為3×3,步長為1像素。將卷積層使用ImageNet數據集[28]的預訓練參數進行初始化。
根據病害種類數量,將全連接層改為 2個輸出神經元個數分別為256和10的全連接層。第二個全連接層的輸出經過softmax被映射成(0,1)之間的類別概率分布,得到病害類別預測。
2.1.3 反向全連接層
VGGNet相當于一個編碼器,病害圖像經過一系列卷積層和全連接層,成為具有高級語義信息的低維特征向量,即最后輸出的10個神經元。特征向量將圖像中最重要的圖像特征加以保留,對這些特征經過上采樣即可得到病斑部位。在經過逐層上采樣操作解碼之前,需要將得到的10維特征向量做2次線性變換,使其重塑成特征圖形式。
設計 2個反向全連接層,使其輸出的神經元個數分別為256和25 088。對10維向量反向后得到256維向量,并將2個256維向量進行融合,如圖5中虛線所示。再次反向后得到25 088維向量并重塑成7像素×7像素×512維的特征圖,與VGGNet中第5個池化層后的特征圖進行融合。2個融合操作均采用向量加法運算,可用來細化解碼時得到的特征。
2.1.4 反卷積模塊
采用上采樣與卷積操作相結合的方法實現反卷積,反卷積的卷積塊大小與 VGGNet結構相對應。在反卷積后加入重構層,得到最后的病斑分割圖。反卷積模塊的結構如表1所示。

圖5 DGVGGNet模型架構Fig.5 Architecture of DGVGGNet

表1 反卷積模塊的結構Table 1 Deconvolution architecture
上采樣層使用最近鄰插值法,對特征圖進行 2倍上采樣。最近鄰插值是取采樣點周圍 4個相鄰像素點中距離最近的點的灰度值作為該點灰度值的方法。最近鄰插值算法速度最快,但會產生明顯鋸齒和馬賽克現象,因此在每個上采樣后使用一個卷積層來平滑圖像邊緣。Concat操作是將VGGNet中對應尺寸的特征圖與上采樣后的特征圖進行跳躍連接,然后用 2個卷積層來融合拼接后的特征圖,并改變特征圖的維度以便輸入下一反卷積塊。第26、27層為圖5中的重構層。為了確定病斑的最終位置,26層先將64通道特征圖減少到3通道,可以去掉不重要的特征。27層將3通道壓縮到1通道來預測病斑位置,并使用Sigmoid函數將特征映射到(0,1)。本研究設置0.5為閾值,> 0.5的像素為病斑位置。
為了訓練本模型,需要共同最小化分類損失和病斑分割損失。本研究共10類病害,所以使用多類別交叉熵作為損失函數,分類損失的表達式如式(1)所示:

式中N為樣本總數,C為類別總數,i代表第i個訓練樣本,j代表訓練樣本的類別,為第i個訓練樣本標注的真實病害類別,為VGGNet輸出的第i個訓練樣本為第j個類別的概率值。
病斑分割圖只包括病斑和背景 2類,因此對灰度圖的每個像素使用二分類交叉熵損失,其表達式如式(2)所示:

式中N為樣本總數,P為輸出灰度圖的像素點個數,為224×224像素,共50 176個像素;i代表第i個訓練樣本,j代表第j個像素點為第i個訓練樣本的第j個像素點的真實類別,為1屬于病斑,為0屬于背景;為第i個
訓練樣本經過反卷積模塊輸出灰度圖的第j個像素的值。在訓練過程中,只有部分訓練樣本有病斑部位的標注,所以使用 2種不同的目標函數。當有病斑標注時,將最小化目標損失作為主要目標如式(3)所示:

式中k為0.2。當沒有病斑標注時,只最小化分類損失Lcls。
2.3.1 試驗配置
試驗平臺為Ubuntu 16.04LTS操作系統、運行內存為32GB、使用 NVIDIA1080 TiGPU加速。算法采用Python3.6和Pytorch1.0深度學習框架實現。
2.3.2 模型參數
VGGNet卷積層使用ImageNet預訓練參數初始化;其他卷積層使用 Kaiming均勻分布初始化[29]方法,現已被Pytorch用作默認的參數初始化函數,模式(mode)選擇fan_in,激活函數的負斜率為0。Kaiming初始化方法主要為使用非線性激活的深層神經網絡設計,可以有效地防止激活層輸出在深度神經網絡的正向傳遞中爆炸或消失,加快模型收斂。模型學習率(learning rate)為0.000 1,訓練輪數(epoch)為45,迭代次數(iteration)共15 300次,訓練病害分類時的批尺寸(batch size)為16,訓練病斑分割時的批尺寸為8。優化器為Adam[30],權值衰減(weight decay)為0.000 05。
2.3.3 訓練過程
訓練分類模型時,使用5 453幅訓練集,12 707幅測試集。訓練分割模型時,設計 2種試驗方案:分別使用45幅和9幅帶像素級標注的圖像做訓練集,其中每類病害標注分別是5幅和1幅,使用剩余的225幅像素級標注圖像做測試集。
以9幅病斑標注為例,DGVGGNet模型訓練開始時,先使用9幅圖像使用式(3)訓練一輪,可引導網絡在特征提取時重視病斑部分。然后訓練無病斑標注的樣本 25批后,再使用帶病斑標注的訓練集訓練一輪,可保證對病斑生成結果的持續監督。直到無病斑標注的訓練樣本全部訓練結束即完成一個epoch訓練。
在每個epoch訓練結束后,記錄訓練準確率和平均損失。用本輪訓練好的模型對所有測試樣本進行一次預測,并記錄測試準確率和平均損失。訓練45輪后,選擇在測試集上病害識別損失最小的權重,作為最終的模型。
分別使用VGGNet模型、9幅病斑監督的DGVGGNet和45幅病斑監督的DGVGGNet進行訓練,保證參數設置相同,測試樣本相同,并與孫俊等[6]和許景輝等[7]研究的識別方法進行比較。5個模型在訓練集和測試集上的識別準確率如圖6所示,孫俊等[6]無預訓練參數收斂較慢,只對前45輪結果進行展示。因為每次迭代都隨機使用一種圖像增強方式,訓練識別準確率會有小的波動。前 5輪訓練時,DGVGGNet的訓練識別準確率上升較快,且在測試集上的識別準確率比其他模型提前到達 95%以上,第一輪測試時DGVGGNet-45的識別準確率最高。迭代輪數在27輪左右時,DGVGGNet-45的訓練識別準確率最先趨向于100%。由識別準確率變化可知,加入反卷積后的DGVGGNet可以使模型加快收斂。

圖6 識別準確率變化曲線Fig.6 Changing curves of recognition accuracy rate
本研究選擇VGGNet的第36輪模型、DGVGGNet-5的第44輪模型、DGVGGNet-45的第27輪模型、孫俊等[6]的 74輪模型和許景輝等[7]的第 42輪模型為最終測試模型,并在原測試集以及7個增強后的測試集上進行測試,在各測試集上的識別準確率如表 2所示。其中,DGVGGNet-45在亮度較暗的情況有明顯優勢。DGVGGNet-9模型識別效果較差甚至低于 VGGNet,這是因為有些病斑比較相似,一類病斑在不同階段也會有不同的表現形式,所以每類病害只使用一張病斑標注訓練反卷積時,特征提取網絡會過于關注某種病害特征。孫俊等[6]不使用預訓練參數,訓練樣本比例較小會影響模型的識別效果。

表2 不同模型在各測試集上的識別結果Table 2 Recognition result of different models on each test set
經過平移后葉片位置和背景形狀發生變化,某些病斑會被裁剪掉,所以模型的識別效果都有所下降。2個DGVGGNet的識別準確率都明顯高于 VGGNet,說明DGVGGNet更加關注病斑部分,能適應病斑在圖像邊緣的情況;而 VGGNet的特征提取器會對病斑方位比較敏感,說明模型會考慮背景形狀,當背景與病斑的相對位置發生變化時,識別效果會變差。由于孫俊等[6]加入了全局池化,增強了特征圖與類別的關系、對輸入的空間變換的不變性,所以在平移測試中效果最好。許景輝等[7]對VGGNet加入了隨機失活(dropout)層,可在一定程度上解決過擬合問題,在平移測試中結果與DGVGGNet相當。
經過番茄果實、土壤以及綠色葉片遮擋后,果實遮擋的識別準確率變化較大,而其他遮擋的結果相差不大,說明模型對顏色相差較大的遮擋物比較敏感。孫俊等[6]的方法在果實遮擋時識別準確率急劇下降,在綠葉遮擋時的識別準確率也下降較多,說明從頭訓練的模型不足以應對遮擋物的影響。許景輝等[7]和DGVGGNet的識別準確率明顯高于VGGNet,說明dropout和反卷積能夠緩解過擬合現象,可以更好地應對遮擋物的干擾。
降低光照強度后,5個模型的識別效果都有所下降,而DGVGGNet-45模型的識別準確率最高且下降最緩慢。在降低 60%光照時,DGVGGNet-9模型識別效果超過VGGNet,說明在昏暗的環境下,使用反卷積引導的特征提取網絡能對葉部病斑更加敏感。而孫俊等[6]在降低光照后的識別率急劇下降,不適用于光照不足的場景。
3.2.1 分割結果評價指標
為了合理評估病斑區域的分割精度,本研究使用語義分割常用的4個評價指標:像素準確率(Pixel Accuracy,PA)、平均像素準確率(Mean Pixel Accuracy, MPA)、平均交并比(Mean Intersection over Union, MIoU)和頻權交并比(Frequency Weighted Intersection over Union, FWIoU)。
像素準確率是所有分類正確的像素數量占總像素的比例,如式(4)所示:

式中k為類別數,pii為預測正確的像素數量,pij代表類別為i像素被預測為類別 j的數量。
平均像素準確率是分別計算每個類被正確分類像素數的比例,然后對所有類別取平均值,如式(5)所示:

平均交并比是模型對某一類預測結果和真實值的交集與并集的比值,然后對所有類別取平均值。平均交并比是語義分割中最常用的評價指標,表達式如式(6)所示:

式中pji代表類別為j像素被預測為類別i的數量。
頻權交并比在平均交并比的基礎上,根據每個類別出現的頻率設置權值,表達式如式(7)所示:

3.2.2 病斑分割精度及運行時間比較
分別使用9幅和45幅帶病斑標注的圖像作為訓練樣本,225幅圖像作為測試樣本,標注只分為前景和病斑部位而不考慮病害類別,試驗結果取 225幅圖像測試結果的平均值。表 3為各算法分割精度對比結果。由表 3可知,DGVGGNet的分割精度相比于 FCN-8s、U-Net和 SegNet有明顯提高。DGVGGNet-9的分割精度與用45幅圖像訓練的其他網絡相差不大,說明本方法在使用極少的訓練樣本時,也能達到較好的分割效果。U-Net-45和SegNet-45高于FCN-8s-45,是因為FCN-8s上采樣時只用到特征提取網絡的后3個池化層輸出的特征圖,并沒有融合低級語義特征,而其他3個模型都融合了低級語義特征。

表3 各算法分割精度及運行時間比較Table 3 Comparison of segmentation accuracy and run time of each algorithm
圖 7展示了 9種病害在 FCN-8s-45、U-Net-45、SegNet-45、DGVGGNet-9和DGVGGNet-45 4個模型上的分割結果,可以看出添加跳躍連接融合低級語義特征后,U-Net、SegNet和DGVGGNet可以將小的病斑分割出來,而FCN-8s的分割結果會丟失一些細節,分割邊界較模糊,相近的病斑區域會出現粘連的情況。DGVGGNet分割的病斑邊緣比較光滑,U-Net的分割邊緣出現鋸齒現象,這是因為 U-Net只在上采樣后加入卷積層,而DGVGGNet重構層的卷積操作可以再次平滑分割邊緣。SegNet的分割邊緣比較平滑,但是容易缺失某些病斑區域,如晚疫病的病斑部分,說明SegNet對同一病斑中的光照變化較敏感。從早疫病的分割圖可以看出,陰影區域容易被誤認為是病斑,而DGVGGNet能更好地區分陰影和真正的病斑區域。
不同病害分割的難易程度不同,如二斑葉螨病和花葉病的病斑區域為淡黃色,發病邊緣不明顯,所以分割難度較大。對每類病斑的25幅測試樣本的分割結果取平均值,得到DGVGGNet-45模型在9種病害上的分割精度如表4所示。可以看出,對斑點類的病害,DGVGGNet-45的分割精度較高。

圖7 病斑分割結果對比Fig.7 Comparison of disease segmentation result

表4 DGVGGNet-45在9種病害上的分割精度Table 4 Segmentation accuracy of DGVGGNet-45 on nine kinds of diseases
在相同的圖形處理器(Graphic Processing Unit,GPU)上輸入單幅圖像進行測試,由表 4可知本模型的單幅圖像運行時間與其他算法相差不大,達到每張12 ms,滿足實時性需求。
針對當前植物葉部病害識別與分割模型易受陰影、遮擋物及光線強度干擾,特征提取具有盲目和不確定性的問題,使用PlantVillage數據集中10種番茄病害圖像,構建了基于反卷積引導的VGG網絡模型。
1)在全連接層后構造反卷積層,可增加特征提取網絡的透明性,并同時實現病害分類與病斑分割。
2)只標注少量病斑樣本訓練模型,節省大量標注成本。與全卷積網絡(Fully Convolutional Networks,FCN)、U-Net和SegNet相比,本模型達到更好的分割精度,在像素準確率、平均交并比和頻權交并比 3個分割評價指標中達到最高,分別為94.66%、75.36%和90.46%。提升分割精度的同時,反卷積引導特征提取網絡更加關注病斑部分,達到了99.19%的識別精度,與VGGNet相比提升了0.15%且收斂速度更快。在每項干擾測試中都得到較好的識別精度,且在降低亮度時優勢明顯,證明本模型對陰影、遮擋物以及低光照強度具有魯棒性。
3)使用上采樣加卷積層的方式實現反卷積,并設計重構層,使分割結果更加平滑;添加跳躍連接融合低級特征,可以恢復細節特征,保留較小的病斑并細化分割邊緣。