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