呂宗旺 金會(huì)芳 甄 彤 孫福艷 桂崇文
(河南工業(yè)大學(xué)信息科學(xué)與工程學(xué)院1,鄭州 450001) (糧食信息處理與控制教育部重點(diǎn)實(shí)驗(yàn)室2,鄭州 450001)
隨著科學(xué)技術(shù)的發(fā)展,糧食產(chǎn)量得到了很大的提高,儲(chǔ)糧的數(shù)量也與日俱增。由于儲(chǔ)糧量的增大,如何在儲(chǔ)糧過程中減少糧食的損失變的越來越重要[1]。糧食霉變、蟲蝕和生芽是影響糧食數(shù)量和質(zhì)量的重要因素,其中蟲蝕不僅會(huì)造成糧食數(shù)量減少,而且啃食之后的糧食會(huì)產(chǎn)生霉變從而影響糧食的質(zhì)量[2]。因此高效、精準(zhǔn)的檢測(cè)糧倉害蟲的種類和數(shù)量成為一項(xiàng)重要的任務(wù)。隨著技術(shù)的進(jìn)步,糧蟲檢測(cè)由傳統(tǒng)的人工法、誘捕法[3],逐漸發(fā)展成聲檢測(cè)[4]、圖像識(shí)別、生物光子檢測(cè)和深度學(xué)習(xí)圖像處理。傳統(tǒng)的糧蟲圖像識(shí)別的方法針對(duì)不同的糧蟲單獨(dú)設(shè)計(jì)其特征,送入分類器最終確定糧蟲種類。基于深度學(xué)習(xí)圖像處理技術(shù)避免了手工設(shè)計(jì)特征的繁瑣過程,能夠自動(dòng)學(xué)習(xí)糧蟲特征,具有速度快、精度高等優(yōu)點(diǎn),逐漸成為研究熱點(diǎn)。
經(jīng)典的目標(biāo)檢測(cè)算法在糧蟲檢測(cè)的應(yīng)用包括雙階段和單階段兩大方向。雙階段中以Faster R-CNN和R-FCN為代表,包括region proposal和class兩個(gè)階段,特點(diǎn)是精度較高、運(yùn)算速度較慢、訓(xùn)練起來相對(duì)困難[5-8]。單階段的目標(biāo)檢測(cè)以YOLO和SSD為代表,region proposal和class同時(shí)進(jìn)行,特點(diǎn)是運(yùn)算速度較快,效率高,但精度相對(duì)較差。由于糧蟲小目標(biāo)的特性,兩階段的目標(biāo)檢測(cè)算法的研究?jī)?nèi)容主要包括更換特征提取網(wǎng)絡(luò),例如將結(jié)構(gòu)簡(jiǎn)單的VGG-16更換為可以提取更加復(fù)雜特征 ResNet50、ResNet101、Inception或DenseNet[9-12];將原本的NMS算成Soft-NMS、更改或刪除網(wǎng)絡(luò)結(jié)構(gòu)、進(jìn)行特征融合等方面。單階段的YOLO和SSD目標(biāo)檢測(cè)算法大多應(yīng)用在農(nóng)田害蟲檢測(cè)上,在小目標(biāo)多姿態(tài)的糧倉害蟲的應(yīng)用較少[13]。
本研究基于經(jīng)典目標(biāo)檢測(cè)算法YOLOv3,使用自制的糧倉害蟲數(shù)據(jù)集,針對(duì)米象/玉米象、赤擬谷盜、谷蠹、銹赤扁谷盜和印度谷螟五種小麥常見的害蟲設(shè)計(jì)了一個(gè)檢測(cè)算法。為了提升檢測(cè)效果應(yīng)用K-means聚類算法[14]聚類出適合的預(yù)選框,彌補(bǔ)原本預(yù)選框在糧倉害蟲小目標(biāo)檢測(cè)不準(zhǔn)確問題;將GIoU替代原模型中的IoU應(yīng)用到算法,同時(shí)優(yōu)化損失函數(shù)進(jìn)行實(shí)驗(yàn),檢測(cè)效果得到了很大的提升。
圖1 YOLOv3網(wǎng)絡(luò)
YOLOv3算法在2018年提出,在YOLO和YOLOv2基礎(chǔ)上進(jìn)行了優(yōu)化,不僅保證了檢測(cè)速度而且使用了比YOLOv2更深的網(wǎng)絡(luò)提高了檢測(cè)精度[15,16]。在YOLOv3中,輸入的圖片大小為416×416,采用了多尺度預(yù)測(cè)的思想,對(duì)3種大小不同的特征圖進(jìn)行預(yù)測(cè),分別為32倍下采樣的13×13的特征圖、16倍下采樣的26×26的特征圖和8倍下采樣的52×52的特征圖;針對(duì)不同大小的特征圖,每種特征圖分別有3個(gè)不同anchors,在特征圖上根據(jù)各自的anchors,生成目標(biāo)框以及相應(yīng)的confs和probs[17]。如圖1所示,YOLOv3采用darknet-53作為基礎(chǔ)網(wǎng)絡(luò)提取特征,采用上采樣技術(shù)將深層特征圖和淺層特征圖進(jìn)行concat融合,融合之后的特征圖擁有更加豐富的語義信息;之后通過DBL模塊和卷積之后,將預(yù)測(cè)結(jié)果輸出。
在訓(xùn)練過程中,YOLOv3對(duì)每個(gè)特征圖計(jì)算損失,損失主要包括boxes損失(中心坐標(biāo)損失和寬高坐標(biāo)損失)、置信度損失和分類損失。其中中心坐標(biāo)損失為式(1)所示,首先將網(wǎng)絡(luò)輸出的tx和ty乘以步長(zhǎng)映射到原圖416×416上的目標(biāo),計(jì)算方法如式(2)所示,即若當(dāng)?shù)趇個(gè)網(wǎng)絡(luò)的第j個(gè)anchor box負(fù)責(zé)某個(gè)真實(shí)目標(biāo)時(shí),計(jì)算該anchor box所產(chǎn)生的bounding box與真實(shí)目標(biāo)的box比較,得到中心坐標(biāo)誤差;寬高坐標(biāo)損失為式(3)所示,首先將網(wǎng)絡(luò)輸出的bw和bh映射到原圖上的目標(biāo)如式(4)所示,即若第i個(gè)網(wǎng)絡(luò)的第j個(gè)anchor box負(fù)責(zé)某個(gè)真實(shí)目標(biāo)時(shí),計(jì)算該anchor box所產(chǎn)生的bounding box與真實(shí)目標(biāo)的box比較,得到寬高坐標(biāo)誤差;置信度損失部分如式(5)所示,首先將正樣本和負(fù)樣本進(jìn)行分離,分離的依據(jù)是計(jì)算boxes和ground truth的IoU,將IoU小于0.5的boxes判定為負(fù)樣本,其他的判定為正樣本,分別計(jì)算正負(fù)樣本的損失值,其中負(fù)樣本貢獻(xiàn)的權(quán)重λnoobj=0.5,最后計(jì)算正負(fù)損失值的平均交叉熵作為置信度損失;分類損失部分如式(6)所示,只有正樣本才會(huì)計(jì)算分類損失。darknet-53中沒有pooling層使用conv的stride來實(shí)現(xiàn)下采樣,整個(gè)網(wǎng)絡(luò)中全部使用stride=2卷積代替pooling操作;使用殘差思想增加了shortcut connection結(jié)構(gòu),使網(wǎng)絡(luò)增加對(duì)小目標(biāo)檢測(cè)效果,有效防止了過擬合同時(shí)也降低了池化帶來的梯度負(fù)面效果。
(1)
bx=σ(tx)+cx,by=σ(ty)+cy
(2)
(3)
bw=awetw,bh=aheth
(4)
(5)
(6)
根據(jù)YOLOv3算法的原理,為了解決YOLOv3對(duì)小目標(biāo)檢測(cè)不敏感、精度差等問題,采用K-means算法對(duì)自制數(shù)據(jù)集進(jìn)行聚類分析,得到適應(yīng)訓(xùn)練集的聚類數(shù)據(jù)。然后根據(jù)GIoU的特點(diǎn),將其引用到Y(jié)OLOv3的算法中,以提升小目標(biāo)的檢測(cè)效果。
K-means聚類是目標(biāo)檢測(cè)算法獲取適合自己數(shù)據(jù)集anchors的常見手段,使用各ground truth與初始聚類box的IoU作為距離度量進(jìn)行迭代計(jì)算,計(jì)算方式如式(7)所示,最后得到所需的K個(gè)初始聚類anchors。具體步驟如下:首先初始化聚類中心,即從N(N為ground truth的總個(gè)數(shù))個(gè)ground truth隨機(jī)選K個(gè),然后計(jì)算每個(gè)ground truth和K個(gè)anchor的距離,用1-IoU來表示;對(duì)于每個(gè)ground truth,選取距離最小的anchor,并存下其索引;每次迭代之后更新anchors與所有g(shù)round truth框的距離均值和每個(gè)ground truth距離最近的Anchor索引;如果當(dāng)前索引和上次一樣,則聚類結(jié)束。
dJ(b1,b2)=1-J(b1,b2)
(7)
經(jīng)典的YOLOv3算法中,使用IoU作為度量判別正負(fù)樣本,并根據(jù)此依據(jù)計(jì)算置信度損失。IoU 具有尺度不變性,可以有效比較兩個(gè)任意形狀之間的相似性。根據(jù)圖2的計(jì)算原理,如果A、B兩個(gè)框之間沒有重疊時(shí),則IoU為0并且無法判斷A、B兩個(gè)框之間的距離[18]?;谏鲜鲈?,GIoU作為IoU的升級(jí)版誕生了,既繼承了IoU的優(yōu)點(diǎn),又彌補(bǔ)了IoU無法衡量無重疊框之間距離的缺點(diǎn)[19,20]。
圖2 IoU的計(jì)算原理
計(jì)算方式如式(8)所示,在IoU的基礎(chǔ)上尋找一個(gè)最小閉包面積Ac(同時(shí)包含了預(yù)測(cè)框和真實(shí)框的最小框的面積)再計(jì)算出IoU,接著計(jì)算閉包區(qū)域中不屬于兩個(gè)框的區(qū)域占閉包區(qū)域的比重,最后再用IoU減去這個(gè)比重得到GIoU。式(8)中U為兩個(gè)框的Union,|Ac-U|即為整個(gè)閉包區(qū)域中不屬于兩個(gè)框的區(qū)域。根據(jù)GIoU的計(jì)算原理可知,兩個(gè)框之間的距離越遠(yuǎn),Ac越大,|Ac-U|所占的比重越大,GIoU越小,可以準(zhǔn)確的衡量?jī)蓚€(gè)不重疊的框之間的距離。GIoU是IoU的下界,取值范圍[-1,1],當(dāng)兩個(gè)框無限重合的情況下,GIoU=loU=1,當(dāng)兩者無交集且無限遠(yuǎn)時(shí)取最小值-1。如圖3所示GIoU可以更好的度量?jī)蓚€(gè)框的重合度以及重合的方式。
(8)
當(dāng)GIoU應(yīng)用到Y(jié)OLOv3算法中作為兩個(gè)框之間的距離度量時(shí)[21],其損失函數(shù)為:LGloU=1-GIoU,其損失函數(shù)變?yōu)槿糠?,GIoU損失、置信度損失和分類損失。
圖3 IoU和GIoU的重合度計(jì)算對(duì)比
實(shí)驗(yàn)數(shù)據(jù)集為自制,包括小麥中5種常見的害蟲,有玉米象(mxymx)、赤擬谷盜(xngd)、谷蠹(gudu)、銹赤扁谷盜(xcbgd)和印度谷螟(ydgm),如圖4所示。采集圖像時(shí),使用活體成蟲進(jìn)行拍攝,由于活體蟲子較為活潑,可以保證采集樣本的多樣性。采用拍視頻的方式,后期使用軟件截圖完成數(shù)據(jù)集圖片的制作[22]。合計(jì)采集1 998張圖像,每幅圖像大小為640×480,每幅圖像有3~10只蟲子,且每幅圖片只有一種蟲子。
采用5種目標(biāo)檢測(cè)常見的數(shù)據(jù)增強(qiáng)手段,對(duì)原版數(shù)據(jù)集進(jìn)行增強(qiáng),分別為調(diào)整亮度,加噪、水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)和縮放,5種增強(qiáng)方式效果分別如下圖5所示。最終生成9 990數(shù)據(jù)集,其中訓(xùn)練集大小為7 192,驗(yàn)證集為1 799,測(cè)試集為999。
采用精確率(Precision)、召回率(Recall)、AP(average precision)以及平均準(zhǔn)確率mAP(mean Average Precision)和FPS(Frame Per Second)來衡量模型的好壞。所有指標(biāo)都是數(shù)值取值越大,代表檢測(cè)性能越好。
FPS代表檢測(cè)速度,數(shù)值越大,代表檢測(cè)速度越快。其中Precision和Recall的計(jì)算如式(9)所示。
圖4 數(shù)據(jù)集的蟲子樣本
圖5 數(shù)據(jù)增強(qiáng)方法
(9)
其中TP為被正確劃分為正樣本的正樣本個(gè)數(shù)(True positive),FP為被錯(cuò)誤劃分為正樣本的負(fù)樣本個(gè)數(shù)(False positive),all detectioons=TP+FP;FN為被錯(cuò)誤劃分為負(fù)樣本的正樣本數(shù)量(False negative),all ground truthes=FN+TP。
實(shí)驗(yàn)環(huán)境硬件配置:Intel i7-10750H處理器,RTX2060顯卡。軟件環(huán)境配置:Windows10系統(tǒng),CUDA,OpenCV,tensorflow框架,主要超參數(shù)的設(shè)置如表1所示。
表1 通用超參數(shù)設(shè)置
數(shù)據(jù)集主要包括兩個(gè)拍攝尺寸的糧蟲圖片分別如圖6和圖7所示。原始YOLOv3的檢測(cè)結(jié)果mAP如表2所示。
圖6 小尺寸糧蟲
圖7 大尺寸糧蟲
表2 數(shù)據(jù)集1 998的mAP
使用K-means算法對(duì)于所有糧蟲進(jìn)行聚類,聚類之后的先驗(yàn)框結(jié)果如表3所示。
表3 聚類之后的先驗(yàn)框
使用K-means聚類算法前后的mAP結(jié)果對(duì)比如表4所示,使用聚類算法之后,YOLOv3的檢測(cè)mAP相比于之前提升了10.04%。
表4 數(shù)據(jù)集1 998和+K-means前后mAP對(duì)比
在4.2實(shí)驗(yàn)基礎(chǔ)上,引用GIoU算法優(yōu)化模型并進(jìn)行相應(yīng)的實(shí)驗(yàn),結(jié)果如表5所示,mAP達(dá)到了97.19%相比4.2節(jié)提升了9.57%,同時(shí)檢測(cè)速度為25幀/s依然能夠達(dá)到實(shí)時(shí)的效果。
表5 GIoU算法的mAP
如圖8和9所示,方框中為優(yōu)化后的模型檢測(cè)結(jié)果,從結(jié)果來看對(duì)于糧蟲的漏檢、錯(cuò)檢以及由于糧蟲抱團(tuán)、遮擋造成的漏檢錯(cuò)檢情況都有較好的改善。
圖8 優(yōu)化前后對(duì)比圖
圖9 優(yōu)化前后對(duì)比圖
表6為基于數(shù)據(jù)增強(qiáng)后的數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果,根據(jù)結(jié)果來看,基于數(shù)據(jù)增強(qiáng)數(shù)據(jù)集訓(xùn)練的YOLOv3 mAP由87.62%提升至91.93%,增加了GIoU算法的YOLOv3相比未優(yōu)化的YOLOv3,mAP提升至99.43%,實(shí)驗(yàn)證明,優(yōu)化后的YOLOv3性能有了很大的提升。圖10為999張測(cè)試集的檢測(cè)結(jié)果。
表6 基于數(shù)據(jù)增強(qiáng)數(shù)據(jù)集優(yōu)化前后mAP對(duì)比
圖10 測(cè)試集檢測(cè)結(jié)果
由于實(shí)際使用中,采集的圖片存在單張圖片多種糧蟲的情況,故手動(dòng)拼了20張圖片進(jìn)行驗(yàn)證。在測(cè)試集中均勻采集了20張圖片,每種蟲子4張,將每張圖片切分為4塊,然后4張圖片組合成4張混合的圖片每種蟲子的個(gè)數(shù)如下圖11左所示,測(cè)試結(jié)果如下圖11右所示。根據(jù)結(jié)果來看,含多種蟲子的圖片確實(shí)存在檢測(cè)種類錯(cuò)誤的情況。
圖11 單張含多種蟲子的結(jié)果
針對(duì)小目標(biāo)糧蟲的檢測(cè)問題以及原始YOLOv3模型對(duì)于小目標(biāo)檢測(cè)時(shí)表征能力和檢測(cè)效率兩方面的不足,提出了一種融合GIoU算法的YOLOv3檢測(cè)模型。一方面使用GIoU算法彌補(bǔ)IoU算法對(duì)于不相交box無法量化的問題,同時(shí)使用GIoU優(yōu)化損失函數(shù);另一方面使用數(shù)據(jù)增強(qiáng)手段對(duì)拍攝的數(shù)據(jù)集進(jìn)行增強(qiáng),使數(shù)據(jù)集由1 998變?yōu)? 990,并K-means聚類算法對(duì)自制數(shù)據(jù)集進(jìn)行聚類分析,聚類出符合糧蟲小目標(biāo)檢測(cè)的先驗(yàn)框。針對(duì)自制的1 998張糧蟲的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)獲得了mAP 97.16%和每幅圖像0.040 s的檢測(cè)速度;針對(duì)9 990張?jiān)鰪?qiáng)的數(shù)據(jù)集,mAP達(dá)到99.43%,實(shí)驗(yàn)表明本文提出YOLOv3算法針對(duì)小目標(biāo)糧蟲的檢測(cè)效果有很大的提升。本研究的數(shù)據(jù)集采用的單張圖片一種蟲子的形式,實(shí)際應(yīng)用中拍攝的圖片中單張含多種蟲子,根據(jù)4.5的驗(yàn)證結(jié)果來看,實(shí)際應(yīng)用中識(shí)別的精度會(huì)有一定程度的降低,所以在后續(xù)的研究中會(huì)在數(shù)據(jù)集中增加單張含多種蟲子的圖片進(jìn)行訓(xùn)練,以提升識(shí)別精度。