鄧壯來,汪 盼,宋雪樺,王昌達(dá),陳 娟,吳立亞
1.江蘇大學(xué) 計(jì)算機(jī)科學(xué)與通信工程學(xué)院,江蘇 鎮(zhèn)江212013
2.江蘇僅一聯(lián)合智造有限公司,江蘇 丹陽212300
在糧食儲(chǔ)藏過程中,蟲害是造成糧食損失的重要原因之一。據(jù)調(diào)研,全國每年因?yàn)楦黝惡οx造成的糧食損失約為總儲(chǔ)糧的10%,損失金額超過20億[1]。糧倉害蟲檢測是為了確保糧食儲(chǔ)存安全狀況的良好性,實(shí)現(xiàn)對(duì)糧倉害蟲的科學(xué)處理,以便及早采取相應(yīng)的殺蟲措施,減少損失。
在早期,國內(nèi)大部分糧倉主要采用人工取樣[2]來檢測害蟲,具體的害蟲類別需要根據(jù)專家經(jīng)驗(yàn)判斷。這種方法及時(shí)性差,且準(zhǔn)確率低。
隨著光學(xué)技術(shù)的發(fā)展,出現(xiàn)了基于光學(xué)原理支持下的糧倉害蟲檢測技術(shù)[3]。例如軟X射線檢測法[4]和近紅外光譜法[5]等。但這些方法存在著設(shè)備成本高、儀器校準(zhǔn)較為復(fù)雜和檢測范圍局限等問題。
2011 年后,深度學(xué)習(xí)進(jìn)入了一個(gè)新的階段,圖像處理技術(shù)不斷改進(jìn)。越來越多的學(xué)者研究基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的圖像檢測方法[6]。通過加深CNN,出現(xiàn)了R-CNN[7]、Fast-RCNN[8]、Faster-RCNN[9]、FPN[10]、RetinaNet[11]、SSD[12]和YOLO[13]等高效的目標(biāo)檢測方法。對(duì)于圖像的幾何變換、壓縮、亮度差異,目標(biāo)檢測方法具有一定的不變性,克服了由于目標(biāo)體積較小的問題帶來的各種檢測困難,能夠泛化原始圖像中的目標(biāo)。
SSD 使用一個(gè)卷積網(wǎng)絡(luò)完成目標(biāo)檢測。它將圖像劃分網(wǎng)格,通過對(duì)多個(gè)尺度的卷積特征圖進(jìn)行預(yù)測,檢測不同尺寸的目標(biāo),同時(shí)包含小目標(biāo)物體的檢測。由于糧倉害蟲檢測大都屬于小目標(biāo)檢測,因此本研究主要是優(yōu)化SSD模型,通過訓(xùn)練模型使其適用于檢測糧倉害蟲。
在ECCV2016 上Liu Wei 提出了SSD(Single Shot MultiBox Detector)目標(biāo)檢測算法。從它的英文名可知,SSD 是一種單次檢測(One-Stage)方法。它結(jié)合了YOLO的回歸思想和Faster-RCNN中的Anchor boxes[14]機(jī)制,加入了RPN 網(wǎng)絡(luò)的特征金字塔[15]的檢測方式。SSD 對(duì)不同卷積層的特征圖像執(zhí)行滑動(dòng)窗口掃描來檢測多尺度的目標(biāo),能夠檢測出卷積層輸出的特征圖像中的小目標(biāo)。
SSD模型的主干網(wǎng)絡(luò)結(jié)構(gòu)是VGG16[16],用卷積層替換最后2 個(gè)全連接層,然后添加4 個(gè)卷積層來構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu),這些層的大小逐漸減小,實(shí)現(xiàn)多尺度目標(biāo)檢測。SSD網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 SSD結(jié)構(gòu)圖
SSD 在Conv4_3、FC7、Conv6_2、Conv7_2、Conv8_2、Conv9_2 這組金字塔結(jié)構(gòu)的特征層上進(jìn)行目標(biāo)邊框的偏移以及不同類別得分的預(yù)測,并通過非極大值抑制算法[17](Non-Maximum Suppression,NMS)得到最終目標(biāo)檢測結(jié)果。
默認(rèn)框在SSD 框架內(nèi)指的是特征圖的每個(gè)小格上一系列固定大小的框(box),每個(gè)特征圖的默認(rèn)框的大小計(jì)算如公式(1)所示:
其中,Lmin是最底層尺度,Lmax是最高層尺度,n 為特征圖的個(gè)數(shù),Li表示第i 個(gè)特征圖的尺度。
SSD 模型采用了Anchors 機(jī)制,式(2)為默認(rèn)框?qū)挾?,式?)為高度:
由于SSD 模型的主干網(wǎng)絡(luò)仍是VGG16 結(jié)構(gòu),其結(jié)構(gòu)類似傳統(tǒng)卷積單元,網(wǎng)絡(luò)結(jié)構(gòu)在訓(xùn)練當(dāng)中存在損失量,其損失函數(shù)包括位置損失函數(shù)與置信損失函數(shù),這兩個(gè)函數(shù)可以對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行評(píng)估。根據(jù)以上匹配策略,總體目標(biāo)損失函數(shù)[18]是位置損失(loc)和置信損失(conf)的加權(quán)和,如式(4)所示:
其中,N 表示匹配的默認(rèn)框的數(shù)量,當(dāng)N 為0 時(shí),則損耗為0。位置損失是預(yù)測框l 和真實(shí)標(biāo)簽值框g 參數(shù)之間的smoothL1損失,回歸到中心為(cx;cy)和其寬度(w)高度(h)的默認(rèn)邊框d 的偏置,定義如式(5):
檢測糧倉害蟲采用SSD300 模型,其主干部分是VGG16。因?yàn)榧Z倉害蟲檢測過程更注重小目標(biāo)檢測,需要改變?cè)糞SD 模型的VGG16 網(wǎng)絡(luò)。首先修改Conv1~Conv5 的網(wǎng)絡(luò)寬度(number-out)的值,減少為原來的一半,然后去除Conv3_2、Conv4_2、Conv5_2、FC。VGG16 的特點(diǎn)是通過2×2 的卷積核和3×3 的池化核加深網(wǎng)絡(luò)深度來提升性能,但同時(shí)增加了計(jì)算量,對(duì)于目標(biāo)種類較少的訓(xùn)練時(shí),適當(dāng)減少卷積層數(shù)和網(wǎng)絡(luò)尺度,能夠提升訓(xùn)練的效果。網(wǎng)絡(luò)6 個(gè)分支部分則改為Conv4_3、Conv5_3、Conv6_2、Conv7_2、Conv8_2、Conv9_2,優(yōu)化后的SSD模型如圖2所示。
圖2 優(yōu)化后的SSD網(wǎng)絡(luò)
這6 個(gè)分支網(wǎng)絡(luò)的作用是通過綜合多層卷積特征圖輸出檢測結(jié)果,并擴(kuò)大所檢測物體的尺度范圍。如圖3 所示,圖3(a)為原始輸入圖像,害蟲框標(biāo)注對(duì)應(yīng)圖3(b)(8×8)中的實(shí)線框。
圖3 害蟲檢測框架
原始SSD 模型中,損失函數(shù)使用smoothL1(x),N表示匹配成功的默認(rèn)框數(shù)量,當(dāng)N=0 時(shí)損耗將不存在。由于負(fù)默認(rèn)框數(shù)量會(huì)遠(yuǎn)大于正默認(rèn)框數(shù)量,導(dǎo)致網(wǎng)絡(luò)會(huì)過于重視負(fù)樣本。為了平衡訓(xùn)練樣本,訓(xùn)練時(shí)根據(jù)置信度(confidience score)高低來排序默認(rèn)框,并選擇高置信度的框訓(xùn)練,以確保總的正負(fù)樣本比率為1∶3。對(duì)糧倉害蟲檢測而言,原始的SSD分類損失函數(shù)會(huì)由于數(shù)據(jù)集中沒有害蟲的圖片而直接將loss置為0,N=0 時(shí)會(huì)使得一部分圖片沒有被充分利用;在線將置信度進(jìn)行排序的方法速度較慢。
本文通過優(yōu)化原始SSD 的損失函數(shù)來解決上述問題。在準(zhǔn)備害蟲圖片數(shù)據(jù)集時(shí),計(jì)算出用于分類和回歸任務(wù)的加權(quán)target[19],使模型訓(xùn)練過程更專注于分類難度高的樣本。加權(quán)target 計(jì)算方式如下:
假設(shè)有k 個(gè)默認(rèn)框,正樣本數(shù)為n,負(fù)樣本數(shù)為m,則k=n+m,設(shè)定用于分類的標(biāo)簽Label。
當(dāng)n >0 時(shí),則正樣本分類的加權(quán)為:
當(dāng)m >0,且設(shè)定正負(fù)樣本比例為1∶3時(shí),則負(fù)樣本分類的加權(quán)為:
整個(gè)分類任務(wù)的加權(quán)為:
加入回歸任務(wù)的權(quán)重系數(shù)為θ,回歸任務(wù)的加權(quán)為:
實(shí)驗(yàn)以糧倉高爆發(fā)的6 類害蟲為主要研究對(duì)象,分別是米象(Sitophilus oryzae,So)、銹赤扁谷盜(Cryptolestes ferrugineus,Cf)、谷蠹(Rhizopertha dominica,Rd)、麥蛾(Sitotroga cerealella,Sc)、鋸谷盜(Oryzaephilus surinamensis,Os)和赤擬谷盜(Tribolium castaneum,Tc)[20],如圖4所示。
圖4 糧倉高爆發(fā)的害蟲
本實(shí)驗(yàn)采用的圖像是將人工飼養(yǎng)的害蟲進(jìn)行拍攝得到的。為了增加檢測的難度,模擬真實(shí)糧倉,在背景中加入了細(xì)碎的谷物。在拍攝多張照片同時(shí)隨機(jī)選擇一些圖片作為測試集,其余的圖片則作為訓(xùn)練集。
為了豐富訓(xùn)練集,準(zhǔn)確提取圖像特征,減小圖像過度擬合,圖像數(shù)據(jù)集通過翻轉(zhuǎn)和顏色調(diào)整來進(jìn)行數(shù)據(jù)增強(qiáng)。考慮到的光照變化和害蟲的不同姿態(tài),圖像的顏色調(diào)整是通過隨機(jī)調(diào)整飽和度、對(duì)比度、亮度和清晰度。經(jīng)過增強(qiáng)處理后,雖然訓(xùn)練集的數(shù)量比原始訓(xùn)練集增加了1 倍,但仍需要剔除質(zhì)量太差的圖片。此外,為了提高訓(xùn)練和檢測速度并且降低GPU 消耗,將原始圖像分辨率降低,從而有力地提升網(wǎng)絡(luò)的訓(xùn)練性能。經(jīng)過這些處理之后,共選出600張圖片作為訓(xùn)練集,180張圖片作為測試集,最后采用labelImg 進(jìn)行標(biāo)記,標(biāo)記名稱為英文首字母縮寫。
本實(shí)驗(yàn)采用64位Linux(Ubuntu-16.04版本)系統(tǒng)計(jì)算機(jī),計(jì)算機(jī)的CPU 為Intel?Core?i7-8700,6 核12 線程,基礎(chǔ)頻率為3.20 GHz,內(nèi)存為16 GB。GPU 的型號(hào)為GeForce GTX 1080,顯存為8 GB,采用cuda8.0 和cudnn6.0 輔助計(jì)算,在此基礎(chǔ)上搭建Caffe 框架以及Python2.7的運(yùn)行環(huán)境。
在原始SSD 模型中6 個(gè)預(yù)測分支分別對(duì)應(yīng)的anchor 類別數(shù)為4,6,6,6,4,4,但是因?yàn)閳D片害蟲大多為小目標(biāo),為了使小目標(biāo)的檢測率更高,將第一個(gè)分支的anchor 的種類由4 提高到6,即6,6,6,6,4,4,因此anchor 的總數(shù)量也由原來的8 732 提高到11 620,最后用非極大值抑制算法消除多余窗口。本實(shí)驗(yàn)的SSD 訓(xùn)練迭代次數(shù)為60 000次。
精確度(Precision)、mAP 和AP(Average Precision,平均準(zhǔn)確率)是衡量目標(biāo)檢測方法的主要參數(shù)。其中精確度是指在被判斷為準(zhǔn)確的圖片中,真正判斷準(zhǔn)確的害蟲的比例。精確度、AP 和mAP 的計(jì)算公式如式(15)~(17)。
將本文的SSD 與原始SSD 進(jìn)行在相同數(shù)據(jù)集中進(jìn)行對(duì)比實(shí)驗(yàn),6類害蟲AP值如圖5所示。
圖5 糧倉害蟲AP的檢測結(jié)果
從圖5 中發(fā)現(xiàn)本文的SSD 方法AP 值在74%~89%之間,而原始SSD 方法的AP 值在72%~86%之間,盡管不是每類蟲的AP 值都高于原始SSD,但總體來說本文的SSD 方法檢測性能是優(yōu)于原始SSD 方法的。另外,因?yàn)辂湺辏⊿c)目標(biāo)體積遠(yuǎn)大于其他5 類害蟲,所以AP值也比較高。
在相同迭代次數(shù)的前提下,將本文的SSD 方法與Faster-RCNN、原始SSD 以及YOLO 在訓(xùn)練時(shí)間、mAP和平均檢測時(shí)間上進(jìn)行了對(duì)比,這4種方法均使用相同的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)。
從表1可以看出,本文的SSD的mAP是78.5%,F(xiàn)aster-RCNN 的mAP 是75.3%,原始SSD 的mAP 是76.7%,YOLO 的mAP 是70.4%。在對(duì)相同害蟲圖像進(jìn)行檢測時(shí),優(yōu)化過的SSD 模型的mAP 比基于Faster-RCNN 模型、原始SSD 模型和基于YOLO 模型高;并且本文的SSD 模型比另外3 個(gè)模型的訓(xùn)練時(shí)間和平均檢測時(shí)間都要短。
表1 害蟲檢測方法結(jié)果對(duì)比
此外,這4種方法訓(xùn)練迭代60 000次的訓(xùn)練損失曲線如圖6所示。
圖6 訓(xùn)練過程的損失函數(shù)曲線
從圖6可知,本文的SSD方法在迭代到10 000次之前,訓(xùn)練損失下降速度明顯快于其他方法,10 000 次之后訓(xùn)練損失曲線逐漸趨于平滑,4種方法差距不大。
圖7 為不同種類害蟲的檢測結(jié)果,從圖7(a)和(b)中可以看出,害蟲都能被檢測到;從圖7(c)和(d)中可以看出,絕大多數(shù)害蟲都能被檢測,少量害蟲出現(xiàn)了漏檢的情況,原因是害蟲的頭數(shù)較多,密度較大,甚至出現(xiàn)重疊;圖7(e)為目標(biāo)較大的麥蛾(Sc)檢測結(jié)果,得到置信度較高。圖8 為不同光照下的害蟲檢測結(jié)果,對(duì)比圖8(a)和(b),光照較亮的害蟲比較暗的害蟲檢測得到的置信度更高。圖9是不同姿態(tài)的害蟲檢測結(jié)果,圖中不同姿態(tài)的害蟲檢測得到的置信度也不同。
為了減少糧食損失,本文針對(duì)糧倉中6類高爆發(fā)的害蟲提出了一種基于SSD 的糧倉害蟲檢測方法。該方法是在原始SSD 模型上進(jìn)行輕量化處理,加快模型收斂速度。另外對(duì)損失函數(shù)進(jìn)行優(yōu)化,從而平衡了正負(fù)樣本數(shù)量,提高了訓(xùn)練效率。實(shí)驗(yàn)表明:本文提出的SSD 檢測模型能夠較好地實(shí)現(xiàn)糧倉害蟲檢測,并提高了魯棒性。
圖7 糧倉害蟲檢測結(jié)果
圖8 不同光照下的害蟲檢測結(jié)果
圖9 不同姿態(tài)的害蟲檢測結(jié)果