王衛(wèi)民,符首夫,顧榕蓉,王東升,何林容,關(guān)文斌
(1.江蘇科技大學(xué)計算機(jī)學(xué)院,江蘇 鎮(zhèn)江 212003; 2.南京林業(yè)大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 210037; 3.江蘇慧禾融智信息技術(shù)有限公司,江蘇 南京 210019)
在我國,農(nóng)作物的蟲害常年對作物造成嚴(yán)重的危害,并使得農(nóng)業(yè)經(jīng)濟(jì)遭受到嚴(yán)重的損失。要想有效地防治蟲害,就必須要預(yù)測蟲害的發(fā)生趨勢、數(shù)量、種群動態(tài)及其潛在危害,并且也要評估各項防治措施所得到的不同預(yù)期和實際結(jié)果。對于農(nóng)業(yè)蟲情預(yù)測的首要前提是對田間蟲情進(jìn)行數(shù)據(jù)獲取和準(zhǔn)確識別。但是,就目前的技術(shù)而言,對蟲情的檢測存在著很大的難度,主要體現(xiàn)在蟲情的計數(shù)和識別方面,對蟲情的計數(shù)和識別往往需要大量的人力、物力,并且耗時漫長,工作繁瑣,另外還存在著譬如時效性差和準(zhǔn)確度低等問題,無法滿足現(xiàn)代農(nóng)業(yè)發(fā)展的需求。因此,本文針對蟲情自動計數(shù)展開研究。
計算機(jī)、圖像處理和模式識別等技術(shù)和理論的發(fā)展,為實現(xiàn)昆蟲自動分割和計數(shù)提供了基礎(chǔ)。21世紀(jì)初,國內(nèi)專家提出了閾值法[1]對背景與目標(biāo)昆蟲進(jìn)行分割。例如,張洪濤等[2]采用的直方圖閾值法,羅濤華[3]采用的自適應(yīng)閾值法以及于新文等[4]采用的相對熵閾值法,分別實現(xiàn)了儲糧昆蟲、鱗翅目昆蟲的圖像分割,但閾值的選定直接影響這些方法的分割效果。因此,李小林[5]提出了基于邊緣流的圖像分割算法,以方向相反的邊緣流相遇的位置確定對象的邊緣,解決了傳統(tǒng)基于邊緣的圖像分割算法難以確定合理閾值的問題。Zhao等[6]利用Gabor小波對儲糧害蟲的圖像分割取得了相對滿意的效果。張衛(wèi)芳等[7]采用高斯混合模型GMM(Gaussian Mixture Model)表征顏色概率分布的圖割理論,在高斯混合模型參數(shù)學(xué)習(xí)估計過程中通過不斷擴(kuò)大背景樣本點修正GMM參數(shù),完成對能量函數(shù)的最小化,從而進(jìn)一步改善了儲糧害蟲的分割效果。
隨著計算機(jī)各種理論的不斷成熟,國內(nèi)外學(xué)者已將數(shù)學(xué)形態(tài)學(xué)、多分辨率分割等算法用于昆蟲圖像分割中,取得了較好的分割效果[8]。黃小燕等[9]提出了用形態(tài)模板過濾彩色數(shù)字圖像進(jìn)行分割的方法,并將該方法運用于儲糧害蟲彩色數(shù)字圖像的分割中,構(gòu)造軀干模板和足與觸角模板,使用2模板有效地將儲糧害蟲數(shù)字圖像的軀干和足與觸角分割開;張學(xué)慶等[10]將基于數(shù)學(xué)形態(tài)學(xué)的改進(jìn)的圖像分割方法應(yīng)用于谷蠹、鋸谷盜等儲糧害蟲圖像分割中,很好地保留了昆蟲各個部分的邊緣細(xì)節(jié)特征。Shariff等[11]利用多分辨率分割等圖像處理方法實現(xiàn)了稻縱卷葉螟等水稻害蟲的自動識別與計數(shù)。
雖然經(jīng)典的模式識別方法在小樣本數(shù)據(jù)集上表現(xiàn)突出[12],但模型的建立需要手工設(shè)計圖像特征,過程復(fù)雜繁瑣,且模型的魯棒性和泛化能力表現(xiàn)一般。
近年來,隨著深度學(xué)習(xí)在計算機(jī)視覺領(lǐng)域的迅猛發(fā)展,為實現(xiàn)昆蟲自動識別和計數(shù)提供了良好的基礎(chǔ)。馬鵬鵬[13]采用基于全局特征的支持向量機(jī)分類器,分別對水稻燈誘大型昆蟲和水稻燈誘小型昆蟲進(jìn)行識別分類,得到了較為理想的結(jié)果。沈馭風(fēng)[14]使用Faster R-CNN(Faster Region Convolutional Neural Networks)方法,對儲糧害蟲進(jìn)行檢測,其平均準(zhǔn)確率達(dá)到了88%。
本文采用卷積神經(jīng)網(wǎng)絡(luò)對3種不同監(jiān)測相機(jī)拍攝的蟲情圖像進(jìn)行檢測,實現(xiàn)了從大量蟲情圖像中自動提取昆蟲輪廓并計數(shù)。經(jīng)實驗表明,昆蟲輪廓檢測的準(zhǔn)確率達(dá)到了94.4%。
2015年,Ronneberger等[15]提出了一種基于少量數(shù)據(jù)進(jìn)行訓(xùn)練的網(wǎng)絡(luò)模型,得到了不錯的分割精度,并且網(wǎng)絡(luò)的速度很快,分割1幅512×512大小的圖像只需要不到1 s(GTX 1080 Ti顯卡運算)的時間。它的網(wǎng)絡(luò)模型結(jié)構(gòu)如圖1所示,看起來像是1個U型,故也叫U-Net。
圖1展示的網(wǎng)絡(luò)結(jié)構(gòu)由contracting path 和 expansive path組成。
左邊的網(wǎng)絡(luò)contracting path是典型的卷積網(wǎng)絡(luò)結(jié)構(gòu),它是1種重復(fù)結(jié)構(gòu),每個重復(fù)結(jié)構(gòu)中均有2個卷積層和1個池化層,卷積層中卷積核大小均為3×3,采用ReLU作為激活函數(shù),2個卷積層之后是1個2×2的步長為2的最大化池(max pooling)層。每1次下采樣后特征通道的數(shù)量是上1次的2倍。
Figure 1 U-Net model structure圖1 U-Net模型結(jié)構(gòu)
右邊的網(wǎng)絡(luò)expansive path中的每1步都首先使用反卷積,將特征通道數(shù)量減半,特征圖尺寸加倍。反卷積過后,將反卷積的結(jié)果與contracting path中對應(yīng)步驟的特征圖拼接起來。contracting path中的特征圖尺寸稍大,將其修剪過后進(jìn)行拼接(圖中虛線部分表示修剪)[16]。對拼接后的map進(jìn)行2次3×3的卷積。最后1層的卷積核大小為1×1,將64通道的特征圖轉(zhuǎn)化為特定深度(分類數(shù)量,二分類為2)的結(jié)果。網(wǎng)絡(luò)總共23層。
本文采用的是數(shù)值二分類,分類閾值為0.5,所以在原有U-Net的結(jié)構(gòu)上,將最后1層通道數(shù)量改為1。由于原U-Net結(jié)構(gòu)中卷積層沒有采用補(bǔ)齊方式,每次卷積后特征圖尺寸會有所減小,導(dǎo)致輸入圖像與輸出圖像尺寸不同。本文使用全0補(bǔ)齊方式的卷積使圖像的輸入和輸出尺寸一致,改進(jìn)后的U-Net結(jié)構(gòu)如圖2所示。
由于本文使用的訓(xùn)練圖像分辨率較大,而U-Net模型的輸入尺寸較小(512×512),為了讓圖像中體積小的昆蟲特征不會丟失,本文將完整的輸入圖像切割為4份,分別訓(xùn)練。隨后,將得到的訓(xùn)練結(jié)果拼接起來,還原成完整輸入圖像的尺寸。雖然此方法能夠有效避免體積小的昆蟲丟失,但是在拼接的時候會導(dǎo)致拼接線上的昆蟲輪廓變大,所以本文將完整輸入圖像(Complete input)與分割輸入圖像(Split inputs)得到的結(jié)果折衷,通過1個融合層(Merge)和卷積層(Conv2D)處理后得到最終的結(jié)果。本文將此模型命名為Insect-Net,模型結(jié)構(gòu)如圖3所示,模型輸入包括左邊降低分辨率后的完整圖像和右邊的分割圖像。
圖3中的U-Net為圖1中的U-Net結(jié)構(gòu);Concatenate將4幅分割圖像順序拼接成1幅大圖,相當(dāng)于Split的逆操作;Resize改變圖像分辨率;Merge將2個特征矩陣在第3維度拼接;Conv2D采用1×1卷積核,步長為1,使用激活函數(shù)Sigmoid。
這里采用Merge方法,仿照U-Net中卷積層和反卷積層對應(yīng)的特征圖拼接,將分割結(jié)果(Split result)和完整結(jié)果(Complete result)作為2個不同通道的特征拼接。而1×1的卷積核早在2014年就被Lin等[17]使用,其作用主要是將不同通道同一位置的信息融合,一定程度上減少了網(wǎng)絡(luò)的參數(shù),其原理如圖4所示。
Figure 2 Improved U-Net model structure圖2 改進(jìn)后的U-Net模型結(jié)構(gòu)
Figure 3 Insect-Net model structure圖3 Insect-Net模型結(jié)構(gòu)
Figure 4 1*1 convolution圖4 1*1卷積
通過對原始蟲情圖像做預(yù)處理構(gòu)建數(shù)據(jù)集,然后訓(xùn)練 Insect-Net,采用Open CV對分割結(jié)果進(jìn)行調(diào)整,獲取昆蟲的輪廓并計數(shù)。
圖像數(shù)據(jù)為監(jiān)測相機(jī)拍攝的6 960幅訓(xùn)練樣本圖像和720幅測試樣本圖像,這些圖像的長寬尺寸均在1 000~2 000像素,大致分為3種:純白色背景、方形網(wǎng)格背景和圓形網(wǎng)格背景,如圖5所示。所有圖像均來自農(nóng)業(yè)蟲情檢測實時監(jiān)控設(shè)備,為了更好地觀察昆蟲的數(shù)目,本文采用了性誘劑、誘捕器誘殺農(nóng)田昆蟲并采用蟲體分散技術(shù)將其平鋪在監(jiān)測區(qū)域,以減少堆疊。
在訓(xùn)練模型之前,對圖像進(jìn)行預(yù)處理。首先人工標(biāo)注出圖中昆蟲的輪廓,用白色填充昆蟲,其余部分變?yōu)楹谏?,作為?biāo)簽圖像(二值圖,白色為1,黑色為0),如圖5所示。
Figure 5 Manually labeled insect image圖5 蟲情圖像人工標(biāo)注
然后將原始RGB圖像轉(zhuǎn)為灰度圖,并等比例切割為4份,將標(biāo)簽圖像也等比例切割成4份。最后將以上所有圖像的尺寸(包括切割圖像的原完整圖像)統(tǒng)一為512×512像素,以JPG格式保存,這樣每幅圖像就產(chǎn)生了1組(共5對)輸入輸出,如圖6所示。
(1)對每1幅圖像按3.1節(jié)進(jìn)行預(yù)處理,得到5組輸入圖像和標(biāo)簽圖像。
(2)將所有輸入圖像和標(biāo)簽圖像打亂后訓(xùn)練U-Net模型。
(3)凍結(jié)U-Net模型的參數(shù),將5幅輸入圖像中的完整圖像作為Insect-Net模型(圖2)左邊的輸入,其余4幅分割圖像作為Insect-Net右邊的輸入。將5幅標(biāo)簽圖像中的完整標(biāo)簽圖像作為Insect-Net的標(biāo)簽圖像。訓(xùn)練Insect-Net。
(1)將1幅原始RGB蟲情圖像記為imageIn,按照3.1節(jié)中的步驟預(yù)處理后輸入訓(xùn)練好的Insect-Net模型中,產(chǎn)生模型的預(yù)測圖像,記為imageOut。
Figure 6 A set of input images and their labels圖6 1組輸入圖像及其標(biāo)簽圖像
(2)對imageOut進(jìn)行二值化,所有像素值大于0.5的像素都設(shè)置為1,否則設(shè)為0。提取所有像素值為1的輪廓,本文采用Open CV里的findContours方法,該方法參照Suzuki等[18]的思想。
(3)在imageIn中標(biāo)記(2)中提取的輪廓,并根據(jù)輪廓的數(shù)量確定蟲子的數(shù)量,按順序標(biāo)出。如圖7所示。在計數(shù)過程中對于輪廓面積小于imageIn面積1/10000的輪廓,視為污點雜質(zhì)并將其拋棄,不計入總數(shù);大于ImageIn面積1/100的輪廓,用白色虛線標(biāo)注出,視為體積較大的蟲;其余輪廓視為體積較小的蟲。
Figure 7 Counting process圖7 計數(shù)流程
本文實驗環(huán)境為:Windows 10操作系統(tǒng),使用NVIDIA GeForce GTX 1080 Ti顯卡,核心頻率為1480-1582 MHz,顯存為11 GB,軟件編程環(huán)境為 Python 3.6,CUDA顯卡運算平臺和cuDNN 神經(jīng)網(wǎng)絡(luò)GPU加速庫。
定義1將訓(xùn)練樣本中的每幅圖像序號記為i,i=1,2,3,…,n。其中,n為訓(xùn)練樣本的數(shù)量。
定義2第i幅圖像的昆蟲真實數(shù)目,即人工標(biāo)注數(shù)目為y(i)。
定義3第i幅圖像的昆蟲預(yù)測數(shù)目為pred(i)。
定義4對比二值化后的預(yù)測圖像與它所對應(yīng)的標(biāo)簽圖像,第i幅圖像的像素值(0或1)正確率為p(i):
(1)
定義5第i幅圖像預(yù)測結(jié)果T(i):
(2)
所以,總的昆蟲預(yù)測數(shù)目正確率T為:
(3)
同時,本文采用像素值正確率P來評價Insect-Net模型。
(4)
另一方面,定義單幅圖像訓(xùn)練的平均時間t為:
(5)
2014年Kingma等[19]提出了Adam優(yōu)化器,其在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練優(yōu)化上表現(xiàn)突出。本文采用文獻(xiàn)[19]中推薦的參數(shù)設(shè)置α=0.001,β1=0.9,β2=0.9999 和ε=10-8。
損失函數(shù)均采用二分類交叉熵?fù)p失函數(shù):
(1-yi,j)ln(1-y′i,j)])/d
(6)
其中,d表示圖像的像素點個數(shù),n表示訓(xùn)練樣本個數(shù)。yi,j表示第i幅圖像的第j個像素真實值,y′i,j表示第i幅圖像的第j個像素的預(yù)測值。
(1)U-Net訓(xùn)練采用Adam算法優(yōu)化損失,批次大小為2(顯卡最大容量),訓(xùn)練樣本迭代50輪。
(2)Insect-Net訓(xùn)練采用Adam算法優(yōu)化損失,批次大小為16,訓(xùn)練樣本迭代50輪。
訓(xùn)練采用十折交叉驗證,每次預(yù)留1/10的訓(xùn)練數(shù)據(jù)對模型進(jìn)行評估,保留L最小的模型作為最終模型。驗證集的損失函數(shù)值L和正確率P與迭代次數(shù)的關(guān)系分別如圖8a和圖8b所示。
Figure 8 Curve of loss value and correct rate圖8 損失值和正確率曲線
為了更好地說明Insect-Net模型的分割效果,本文進(jìn)行了對比實驗。利用上述的評估標(biāo)準(zhǔn),分別提取了使用完整圖像(Complete input)和分割圖像(Split inputs)輸入U-Net后的分割結(jié)果,以及使用Insect-Net模型的分割結(jié)果。此外,將完整的高分辨率圖像輸入1024×1024的U-Net模型中,得到1組高分辨率結(jié)果。接著采用完全相同的處理方法對得到的4組分割結(jié)果進(jìn)行輪廓提取和計數(shù)。實驗結(jié)果如表1所示,本文所有的測試數(shù)據(jù)全部來自于3.1節(jié)中的720幅測試圖像。
Table 1 Model test results表1 各模型測試結(jié)果
從表1中的實驗結(jié)果來看,使用Insect-Net模型的分割和計數(shù)效果達(dá)到最優(yōu),但其訓(xùn)練時間也最長。與輸入分辨率為512×512的U-Net(Complete input)相比,輸入分辨率較大的U-Net(1024×1024 imput)對分割效果的提升并不明顯,時間消耗反而增加至4倍多。通過對數(shù)據(jù)的分析發(fā)現(xiàn),測試集中影響計數(shù)準(zhǔn)確率的主要原因是,昆蟲之間的粘連導(dǎo)致將多個連續(xù)的昆蟲被識別為1個昆蟲。其次,模型在白色背景圖像上的表現(xiàn)最佳,而在圓形網(wǎng)格背景圖像上表現(xiàn)最差,可能與背景的復(fù)雜性有關(guān)。
本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的農(nóng)作物蟲情分割和計數(shù)方法。該方法利用U-Net模型,有效地將昆蟲與背景分離,提取出昆蟲輪廓并計數(shù),實現(xiàn)了從大量蟲情圖像中自動計算出昆蟲的數(shù)目和提取其輪廓。
Insect-Net模型利用分割圖像輸入U-Net有效改善了小體積蟲體丟失問題;融合完整輸入圖像減少了拼接線上蟲體誤差,提高了分割和計數(shù)的精度,但訓(xùn)練時間也隨之增長。
Insect-Net模型生成的分割結(jié)果,經(jīng)過篩選后可以作為無背景昆蟲的樣本圖像,可充當(dāng)深度學(xué)習(xí)方法下的昆蟲種類識別的數(shù)據(jù)集。
在下一步的工作中,應(yīng)該減少昆蟲粘連對昆蟲數(shù)目計算造成的影響,并進(jìn)一步利用本文得到的昆蟲輪廓圖像,在去背景的情況下對昆蟲種類進(jìn)行識別。