孫 妍 宋雪樺 陳 靜 蔣思瑋
(江蘇大學(xué)計(jì)算機(jī)科學(xué)與通信工程學(xué)院 鎮(zhèn)江 212013)
民以食為天,在糧食存儲(chǔ)過(guò)程中,常因蟲害造成嚴(yán)重的損失[1],我國(guó)儲(chǔ)糧中農(nóng)戶的儲(chǔ)糧損失為6%~9%,國(guó)家糧庫(kù)的糧食損失為0.2%[2]。糧食是食品加工的重要原料,儲(chǔ)糧害蟲也造成了巨大的經(jīng)濟(jì)損失。為了防止儲(chǔ)糧害蟲,糧庫(kù)每年都會(huì)對(duì)儲(chǔ)糧進(jìn)行多次以磷化氫為主的化學(xué)藥劑熏蒸[3],但是過(guò)多的熏蒸會(huì)不僅會(huì)污染環(huán)境,還會(huì)導(dǎo)致害蟲的抗藥性增加[4],因此對(duì)儲(chǔ)糧害蟲進(jìn)行精準(zhǔn)檢測(cè)非常重要。早期,工作人員主要采用取樣篩選的檢查方法[5]。該方法是通過(guò)采樣裝置獲取糧倉(cāng)不同位置的糧食,然后由人工對(duì)樣本中的害蟲進(jìn)行定性和定量。這種方法具有較高的識(shí)別準(zhǔn)確性且不受環(huán)境影響,但是費(fèi)時(shí)費(fèi)力、效率低、時(shí)效性差。隨后,基于聲信號(hào)的儲(chǔ)糧害蟲檢測(cè)技術(shù)[6]出現(xiàn),該方法通過(guò)采集害蟲成蟲活動(dòng)時(shí)發(fā)出的聲信號(hào),將其轉(zhuǎn)化為電信號(hào),分析得出儲(chǔ)糧害蟲行為的脈沖信號(hào)。由于環(huán)境噪聲的影響,該方法存在一定的技術(shù)難點(diǎn),即區(qū)分多重儲(chǔ)糧害蟲聲信號(hào)。隨著光學(xué)技術(shù)的發(fā)展,出現(xiàn)基于光學(xué)原理的儲(chǔ)糧害蟲檢測(cè)技術(shù),主流技術(shù)分別是基于軟X 射線檢測(cè)法[7]和基于近紅外光譜檢測(cè)法[8]。前者利用X射線成像技術(shù),對(duì)比害蟲產(chǎn)生前后儲(chǔ)糧密度成像的變化。后者利用近紅外譜,分析害蟲產(chǎn)生前后糧食內(nèi)的成分變化?;诠鈱W(xué)原理的儲(chǔ)糧害蟲檢測(cè)技術(shù)可以提高檢測(cè)的效率和實(shí)時(shí)性,但是由于光學(xué)設(shè)備儀器成本較高,且部署困難,不利于該技術(shù)的應(yīng)用推廣。
近年來(lái),基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法取得了很大的突破,主要分為兩大類。一是基于區(qū)域推薦的目標(biāo)檢測(cè)算法。首先利用區(qū)域目標(biāo)生成候選目標(biāo),然后利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行處理,該類算法也稱雙階段目標(biāo)檢測(cè)算法。代表算法有RCNN[9]、Fast RCNN[10]等。另一種是基于回歸方法的目標(biāo)檢測(cè)算法,將檢測(cè)問題視為回歸問題,直接預(yù)測(cè)目標(biāo)的類別和位置,也稱單階段目標(biāo)檢測(cè)算法,是一種端到端的目標(biāo)檢測(cè)算法,因此具有更快的檢測(cè)速度。代表算法有SSD[11]、YOLO系列算法[12~15]等。
為了提高目標(biāo)檢測(cè)算法對(duì)儲(chǔ)糧害蟲目標(biāo)檢測(cè)的精度和速度,本文以端到端的目標(biāo)檢測(cè)算法YOLOv4 為基礎(chǔ),與YOLOv3 相比,YOLOv4 對(duì)小目標(biāo)以及有遮擋和重疊的物體有更好的檢測(cè)性能。由于儲(chǔ)糧害蟲檢測(cè)的主要難點(diǎn)是害蟲的目標(biāo)較小,且存在重疊和遮擋的現(xiàn)象,YOLOv4 比YOLOv3 更適合作為儲(chǔ)糧害蟲的檢測(cè)算法。本文提出了一種改進(jìn)YOLOv4 的儲(chǔ)糧害蟲檢測(cè)算法。首先引入K-means 聚類算法,對(duì)害蟲圖像聚類分析,選取更合適的先驗(yàn)框,以提高檢測(cè)的精度和速度。同時(shí)對(duì)YOLOv4 的主干網(wǎng)絡(luò)進(jìn)行改進(jìn),在三個(gè)不同尺度大小的檢測(cè)頭前,加入空間金字塔池化(Spatial Pyramid Pooling,SPP[16])結(jié)構(gòu)。最后將儲(chǔ)糧害蟲作為實(shí)驗(yàn)對(duì)象,并與其他算法進(jìn)行比較,結(jié)果表明,改進(jìn)后的YOLOv4 算法,在儲(chǔ)糧害蟲檢測(cè)中有較好的檢測(cè)精度和速度。
用于儲(chǔ)糧害蟲檢測(cè)的YOLOv4 算法是一種基于深度學(xué)習(xí)的回歸算法,在降低目標(biāo)檢測(cè)訓(xùn)練硬件成本的同時(shí),提高了檢測(cè)的精度和速度。YOLOv4模型結(jié)構(gòu)由CSPDarknet53、路徑聚合網(wǎng)絡(luò)(Path Aggregation Network,PANet[17])和三個(gè)YOLO檢測(cè)頭組成,如圖1 所示。作為YOLOv4 的主干網(wǎng)絡(luò),CSPDarknet53 網(wǎng)絡(luò)由Darknet53 和CSPNet[18]構(gòu)成,通過(guò)5 個(gè)CSP Residual Block 模塊提取輸入害蟲圖像的深層特征,改善了梯度消失的問題。該網(wǎng)絡(luò)包含72 個(gè)卷積層,卷積大小分別為1×1 和3×3,每個(gè)卷積層連接一個(gè)批歸一化層(Batch Normalization,BN)和一個(gè)Mish激活函數(shù)。
圖1 YOLOv4模型結(jié)構(gòu)
此外,YOLOv4 中其余的激活函數(shù)都采用需要較少計(jì)算量的Leaky relu激活函數(shù)。
Mish函數(shù)為
Leaky relu函數(shù)為
其中α是(0,1)區(qū)間內(nèi)的固定參數(shù)。PANet 采用自頂向下和自底向上的方法聚集儲(chǔ)糧害蟲的特征,結(jié)合低層和高層的特征語(yǔ)義信息和目標(biāo)位置信息,三個(gè)YOLO 檢測(cè)頭通過(guò)對(duì)多尺度融合特征圖進(jìn)行獨(dú)立檢測(cè),有效提高了對(duì)不同大小目標(biāo)的檢測(cè)效果。
YOLOv4 算法中使用的損失函數(shù)由三個(gè)部分組成:置信度損失函數(shù)Lconf、分類損失函數(shù)Lcla、定位偏移損失函數(shù)Lloc,如式(3)所示,其中λ為平衡系數(shù)。
在式(4)中Obji表示預(yù)測(cè)框i中是否由對(duì)象,結(jié)果為0 或1。pi表示預(yù)測(cè)框中存在一個(gè)真實(shí)物體的概率。式(5)中,Oij和pij分別表示預(yù)測(cè)框i中是否存在對(duì)象j,以及存在的概率。YOLOv4 采用的CIOU[19]算法計(jì)算定位偏移損失,如式(6)所示,計(jì)算長(zhǎng)寬比αν以及預(yù)測(cè)框A和真實(shí)框B中心點(diǎn)的歐幾里得距離(Actr,Bctr)。
本文的研究對(duì)象是儲(chǔ)糧害蟲,通過(guò)聚類算法找到合適的先驗(yàn)框,有助于提升儲(chǔ)糧害蟲檢測(cè)的精度。K-means 算法是解決聚類問題的無(wú)監(jiān)督學(xué)習(xí)算法之一,該算法遵循的是一種簡(jiǎn)單且容易的方式,通過(guò)預(yù)先固定的一定數(shù)量的群集(假設(shè)K個(gè)群集)來(lái)對(duì)給定數(shù)據(jù)集進(jìn)行分類。其主要思想是定義K個(gè)聚類中心,每個(gè)集群一個(gè)聚類中心,根據(jù)每個(gè)對(duì)象到中心的距離不同聚類,然后分配到最近的群集中。然后重新計(jì)算每個(gè)群集的平均值,直到聚類中心不在發(fā)生改變,該算法的最終目標(biāo)是最小化一個(gè)目標(biāo)函數(shù)。通常K-means 算法的距離度量是用的是歐幾里得距離,其定義如式(7)所示:
其中xi和yi是d維歐幾里得空間中的兩個(gè)點(diǎn)。目標(biāo)函數(shù)則使用誤差平方和函數(shù),其定義如式(8)所示:
其中,J是所有對(duì)象數(shù)據(jù)集的誤差平方和,(xi(j)-cj)2是對(duì)象點(diǎn)xi(j)和聚類中心cj之間的距離度量。
在YOLOv4 算法中,針對(duì)3 種不同尺度的特征圖輸出訓(xùn)練與檢測(cè),借鑒了9 個(gè)先驗(yàn)框,以便獲取不同尺度大小的目標(biāo)信息,先驗(yàn)框的大小分別為(12,16)、(19,36)、(40,28)、(36,75)、(76,55)、(72,146)、(142,110),(192,243)、(459,401)。針對(duì)本文的儲(chǔ)糧害蟲數(shù)據(jù)集,YOLOv4 的先驗(yàn)框都不是適用于訓(xùn)練與檢測(cè)儲(chǔ)糧害蟲目標(biāo),因此針對(duì)本文的數(shù)據(jù)集進(jìn)行聚類分析,得到合適大小的先驗(yàn)框。K-means算法輸入的具體步驟:
輸入:先驗(yàn)框數(shù)m和一個(gè)包含n個(gè)對(duì)象的數(shù)據(jù)集
輸出:聚類得到的m個(gè)適用于害蟲數(shù)據(jù)集的先驗(yàn)框
步驟:
1)從n個(gè)對(duì)象中隨機(jī)選擇m個(gè)對(duì)象為初始聚類中心;
2)重復(fù)3)至4),直到每個(gè)對(duì)象不再改變;
3)根據(jù)對(duì)象與聚類中心的距離,將對(duì)象分配到相似的聚類;
4)為每個(gè)聚類重新計(jì)算聚類中心。
K-means聚類流程如圖2所示。
圖2 K-means算法流程圖
針對(duì)本文的害蟲數(shù)據(jù)集,選取m=9,進(jìn)行K-means 聚類后,得到的9 個(gè)先驗(yàn)框大小為(16,21)、(20,24)、(21,14)、(23,18)、(26,38)、(36,27)、(40,49)、(47,82)、(60,53)。
表1 展示了在儲(chǔ)糧害蟲數(shù)據(jù)集上,先驗(yàn)框聚類前后對(duì)檢測(cè)平均精度均值(mean Average Precision,mAP)的結(jié)果對(duì)比。從表1 可以看出,重新聚類后的先驗(yàn)框在儲(chǔ)糧害蟲檢測(cè)上有明顯的精度提升,mAP比原YOLOv4提高了1.9%。
表1 不同的先驗(yàn)框檢測(cè)結(jié)果對(duì)比
在卷積神經(jīng)網(wǎng)絡(luò)中,卷積層接受任意大小圖像的輸入,即卷積后的輸出大小也是可變的,但是全連接層需要固定大小的輸入,一般使用扭曲或者裁剪滿足這一需求。然而,扭曲和裁剪后的區(qū)域可能不包含所需的對(duì)象。卷積后需要考慮如何有效地利用卷積激活的空間信息,傳統(tǒng)的聚合方法,如平均池化、最大池化不能充分利用卷積激活的空間信息。SPP 模塊解決了這一些問題,SPP 可以接受任意大小的輸入,通過(guò)使用多層空間區(qū)域劃分特征圖,并在子區(qū)域內(nèi)池化局部特征,從而產(chǎn)生固定大小的輸出,保證了檢測(cè)對(duì)象的存在,并滿足了全連接層的輸入需求。SPP 對(duì)卷積后特征進(jìn)行聚合,獲得更具有代表性、空間信息豐富的紋理特征。在針對(duì)YOLOv4 有三個(gè)不同大小尺度的輸出,本文網(wǎng)絡(luò)選用SPP模塊對(duì)卷積后的特征圖進(jìn)行池化操作,使全局上下文特征能夠與多尺度特征保持一致。對(duì)于大小為m×m的特征圖和具有l(wèi)級(jí)n×n大小的金字塔,l級(jí)的輸出串聯(lián)是全連接層的輸入。例如,如果一個(gè)3級(jí)金字塔池(1×1,2×2,3×3),對(duì)于給定的任何特征圖的輸入,全連接層的輸入大小固定為(max pooling 1×1,max pooling 2×2 ,max pooling 3×3),如圖3 所示。本文的SPP 模塊,采用1×1,5×5,9×9,13×13 最大池化四種量表。
圖3 SPP
原YOLOv4 的54 層、85 層、107 層的輸出都是作為多尺度檢測(cè)模塊的輸入,在三個(gè)不同尺度的輸入前加入SPP 模塊,增加視覺感受野,從而提高網(wǎng)絡(luò)的特征提取能力,得到更多的目標(biāo)信息,進(jìn)而提高儲(chǔ)糧害蟲目標(biāo)的檢測(cè)精度,如圖4所示。
圖4 基于改進(jìn)YOLOv4的算法模型
本文使用的數(shù)據(jù)來(lái)源于拍攝人工飼養(yǎng)的儲(chǔ)糧害蟲制作的數(shù)據(jù)集,主要研究對(duì)象為儲(chǔ)糧中高爆發(fā)的五類害蟲,分別是銹赤扁谷盜(Cryptolestes ferrugineus,Cf)、鋸谷盜(Oryzaephilus surinamensis,Os)、谷蠹(Rhizopertha dominica,Rd)、米象(Sitophilus oryzae,So)和赤擬谷盜(Tribolium castaneum,Tc)[20]。拍攝的害蟲圖像,經(jīng)篩選標(biāo)記后,共選出1425 張害蟲圖片,共分為兩個(gè)部分,其中1324 張圖片作為訓(xùn)練集,91 張圖片作為測(cè)試集。在訓(xùn)練過(guò)程中按9∶1的比例劃分訓(xùn)練集與驗(yàn)證集進(jìn)行訓(xùn)練交叉驗(yàn)證。
硬件配置:CPU 型號(hào)是Intel(R)Core(TM)i7-9700K,頻率為3.6Hz,內(nèi)存為16GB;GPU 型號(hào)是NVDIA GeForce RTX 2070。軟件環(huán)境:tensorflow-gpu1.13.2,CUDA10.0,CUDNN7.4.1.5。
儲(chǔ)糧害蟲目標(biāo)檢測(cè)算法,采用平均精度(Average Precision,AP)、平均精度均值(mean Average Precision,mAP)和檢測(cè)速度(Frames Per Second,F(xiàn)PS)作為算法模型的評(píng)價(jià)指標(biāo)。
mAP首先計(jì)算每個(gè)類別的AP,AP是指該類別的準(zhǔn)確率P(Precision)和召回率R(Recall)之和,再對(duì)所有類別的平均精度求均值得到,計(jì)算公式如式(12)所示。
以害蟲檢測(cè)為例,其中TP(True Positive)為測(cè)試數(shù)據(jù)集中害蟲被正確檢測(cè)的個(gè)數(shù),F(xiàn)P(False Positive)為測(cè)試數(shù)據(jù)集中非害蟲被檢測(cè)為害蟲的個(gè)數(shù),F(xiàn)N(False Negative)為測(cè)試數(shù)據(jù)集中真正的害蟲被檢錯(cuò)的個(gè)數(shù),s是害蟲類別數(shù)。
選取五類害蟲圖片,分別使用原始YOLOv4 算法和改進(jìn)后的YOLOv4 算法進(jìn)行儲(chǔ)糧害蟲檢測(cè),并加入YOLOv3 算法的檢測(cè),圖5 展示了三種算法模型的檢測(cè)結(jié)果。相較于YOLOv3 算法,YOLOv4 算法對(duì)儲(chǔ)糧害蟲有較好的檢測(cè)結(jié)果,例如米象(So),YOLOv3 算法檢測(cè)存在漏檢的現(xiàn)象,YOLOv4 算法有效的檢測(cè)出了所有的害蟲。改進(jìn)后的YOLOv4算法,相較于原始的YOLOv4 算法檢測(cè),有更高的檢測(cè)精度。
圖5 三種算法檢測(cè)結(jié)果
為了進(jìn)一步驗(yàn)證本文改進(jìn)的算法有效的提高了儲(chǔ)糧害蟲檢測(cè)的準(zhǔn)確率,采用mAP 指標(biāo)對(duì)改進(jìn)后的YOLOv4 算法進(jìn)行評(píng)估。圖6 展示了YOLOv4算法改進(jìn)前后在儲(chǔ)糧害蟲上檢測(cè)的AP 對(duì)比結(jié)果,原始的YOLOv4 算法的AP 值在75%~99%之間,改進(jìn)后的YOLOv4 的AP 值在85%~99%之間,雖然不是每類害蟲的AP 值都高于原始的YOLOv4 網(wǎng)絡(luò),但是改進(jìn)后的算法對(duì)五類害蟲的檢測(cè)性能整體優(yōu)于原始算法。
圖6 儲(chǔ)糧害蟲AP的檢測(cè)結(jié)果
表2展示了改進(jìn)前后的YOLOv4算法在害蟲檢測(cè)上的mAP對(duì)比實(shí)驗(yàn)結(jié)果,相較于原YOLOv4算法相比,改進(jìn)后的YOLOv4 儲(chǔ)糧害蟲檢測(cè)算法,mAP從89.50%提升至93.99%,說(shuō)明該算法整體上提升了精測(cè)精度,再如銹赤扁谷盜(Cf),原YOLOv4 算法檢測(cè)AP 為76.51%,改進(jìn)后的YOLOv4 算法AP 提升到了89.56%。
表2 改進(jìn)后的YOLOv4與原YOLOv4算法檢測(cè)效果對(duì)比
將本文改進(jìn)的YOLOv4 算法與YOLOv3、YOLOv4兩種經(jīng)典的多尺度目標(biāo)檢測(cè)算法對(duì)mAP、FPS值進(jìn)行對(duì)比,結(jié)果如表3 所示。與YOLOv3 相比,YOLOv4的主干網(wǎng)絡(luò)采用CSPnet結(jié)合YOLOv3的主干網(wǎng)絡(luò)Darknet53 構(gòu)成CSPDarknet53,提高了算法的檢測(cè)精度。為了進(jìn)一步改善儲(chǔ)糧害蟲檢測(cè)精度,在網(wǎng)絡(luò)的三個(gè)不同尺度的檢測(cè)前加入SPP模塊,通過(guò)不同的最大池化層,在不增加計(jì)算開銷的情況下有效地增加了儲(chǔ)糧害蟲圖像的深層感受野,獲得更加豐富的儲(chǔ)糧害蟲紋理特征,并且?guī)缀醪粫?huì)降低網(wǎng)絡(luò)檢測(cè)的速度。相較于YOLOv4,本文改進(jìn)的YOLOv4 算法在儲(chǔ)糧害蟲檢測(cè)中,mAP 提高了4.49%。同時(shí),檢測(cè)速度超過(guò)了原始YOLOv4 算法,每秒達(dá)到26.36幀。
表3 三種方法性能比較
本文針對(duì)儲(chǔ)糧害蟲的檢測(cè),提出了基于改進(jìn)YOLOv4 的糧倉(cāng)害蟲檢測(cè)算法。該算法使用K-means 算法,調(diào)整訓(xùn)練檢測(cè)使用的先驗(yàn)框的大小,在模型中加入SPP結(jié)構(gòu),增加模型感受野,得到了一種適合儲(chǔ)糧害蟲檢測(cè)的算法模型。實(shí)驗(yàn)結(jié)果表明,相較于原YOLOv4 算法,本文提出的改進(jìn)的YOLOv4 算法,在儲(chǔ)糧害蟲檢測(cè)中mAP 提升了4.49%,且檢測(cè)速度達(dá)到了26.36 幀/s。與YOLOv3相比,改善了儲(chǔ)糧害蟲的漏檢效果。