孫 妍 宋雪樺 陳 靜 蔣思瑋
(江蘇大學計算機科學與通信工程學院 鎮江 212013)
民以食為天,在糧食存儲過程中,常因蟲害造成嚴重的損失[1],我國儲糧中農戶的儲糧損失為6%~9%,國家糧庫的糧食損失為0.2%[2]。糧食是食品加工的重要原料,儲糧害蟲也造成了巨大的經濟損失。為了防止儲糧害蟲,糧庫每年都會對儲糧進行多次以磷化氫為主的化學藥劑熏蒸[3],但是過多的熏蒸會不僅會污染環境,還會導致害蟲的抗藥性增加[4],因此對儲糧害蟲進行精準檢測非常重要。早期,工作人員主要采用取樣篩選的檢查方法[5]。該方法是通過采樣裝置獲取糧倉不同位置的糧食,然后由人工對樣本中的害蟲進行定性和定量。這種方法具有較高的識別準確性且不受環境影響,但是費時費力、效率低、時效性差。隨后,基于聲信號的儲糧害蟲檢測技術[6]出現,該方法通過采集害蟲成蟲活動時發出的聲信號,將其轉化為電信號,分析得出儲糧害蟲行為的脈沖信號。由于環境噪聲的影響,該方法存在一定的技術難點,即區分多重儲糧害蟲聲信號。隨著光學技術的發展,出現基于光學原理的儲糧害蟲檢測技術,主流技術分別是基于軟X 射線檢測法[7]和基于近紅外光譜檢測法[8]。前者利用X射線成像技術,對比害蟲產生前后儲糧密度成像的變化。后者利用近紅外譜,分析害蟲產生前后糧食內的成分變化。基于光學原理的儲糧害蟲檢測技術可以提高檢測的效率和實時性,但是由于光學設備儀器成本較高,且部署困難,不利于該技術的應用推廣。
近年來,基于深度學習的目標檢測算法取得了很大的突破,主要分為兩大類。一是基于區域推薦的目標檢測算法。首先利用區域目標生成候選目標,然后利用卷積神經網絡進行處理,該類算法也稱雙階段目標檢測算法。代表算法有RCNN[9]、Fast RCNN[10]等。另一種是基于回歸方法的目標檢測算法,將檢測問題視為回歸問題,直接預測目標的類別和位置,也稱單階段目標檢測算法,是一種端到端的目標檢測算法,因此具有更快的檢測速度。代表算法有SSD[11]、YOLO系列算法[12~15]等。
為了提高目標檢測算法對儲糧害蟲目標檢測的精度和速度,本文以端到端的目標檢測算法YOLOv4 為基礎,與YOLOv3 相比,YOLOv4 對小目標以及有遮擋和重疊的物體有更好的檢測性能。由于儲糧害蟲檢測的主要難點是害蟲的目標較小,且存在重疊和遮擋的現象,YOLOv4 比YOLOv3 更適合作為儲糧害蟲的檢測算法。本文提出了一種改進YOLOv4 的儲糧害蟲檢測算法。首先引入K-means 聚類算法,對害蟲圖像聚類分析,選取更合適的先驗框,以提高檢測的精度和速度。同時對YOLOv4 的主干網絡進行改進,在三個不同尺度大小的檢測頭前,加入空間金字塔池化(Spatial Pyramid Pooling,SPP[16])結構。最后將儲糧害蟲作為實驗對象,并與其他算法進行比較,結果表明,改進后的YOLOv4 算法,在儲糧害蟲檢測中有較好的檢測精度和速度。
用于儲糧害蟲檢測的YOLOv4 算法是一種基于深度學習的回歸算法,在降低目標檢測訓練硬件成本的同時,提高了檢測的精度和速度。YOLOv4模型結構由CSPDarknet53、路徑聚合網絡(Path Aggregation Network,PANet[17])和三個YOLO檢測頭組成,如圖1 所示。作為YOLOv4 的主干網絡,CSPDarknet53 網絡由Darknet53 和CSPNet[18]構成,通過5 個CSP Residual Block 模塊提取輸入害蟲圖像的深層特征,改善了梯度消失的問題。該網絡包含72 個卷積層,卷積大小分別為1×1 和3×3,每個卷積層連接一個批歸一化層(Batch Normalization,BN)和一個Mish激活函數。

圖1 YOLOv4模型結構
此外,YOLOv4 中其余的激活函數都采用需要較少計算量的Leaky relu激活函數。
Mish函數為
Leaky relu函數為
其中α是(0,1)區間內的固定參數。PANet 采用自頂向下和自底向上的方法聚集儲糧害蟲的特征,結合低層和高層的特征語義信息和目標位置信息,三個YOLO 檢測頭通過對多尺度融合特征圖進行獨立檢測,有效提高了對不同大小目標的檢測效果。
YOLOv4 算法中使用的損失函數由三個部分組成:置信度損失函數Lconf、分類損失函數Lcla、定位偏移損失函數Lloc,如式(3)所示,其中λ為平衡系數。
在式(4)中Obji表示預測框i中是否由對象,結果為0 或1。pi表示預測框中存在一個真實物體的概率。式(5)中,Oij和pij分別表示預測框i中是否存在對象j,以及存在的概率。YOLOv4 采用的CIOU[19]算法計算定位偏移損失,如式(6)所示,計算長寬比αν以及預測框A和真實框B中心點的歐幾里得距離(Actr,Bctr)。
本文的研究對象是儲糧害蟲,通過聚類算法找到合適的先驗框,有助于提升儲糧害蟲檢測的精度。K-means 算法是解決聚類問題的無監督學習算法之一,該算法遵循的是一種簡單且容易的方式,通過預先固定的一定數量的群集(假設K個群集)來對給定數據集進行分類。其主要思想是定義K個聚類中心,每個集群一個聚類中心,根據每個對象到中心的距離不同聚類,然后分配到最近的群集中。然后重新計算每個群集的平均值,直到聚類中心不在發生改變,該算法的最終目標是最小化一個目標函數。通常K-means 算法的距離度量是用的是歐幾里得距離,其定義如式(7)所示:
其中xi和yi是d維歐幾里得空間中的兩個點。目標函數則使用誤差平方和函數,其定義如式(8)所示:
其中,J是所有對象數據集的誤差平方和,(xi(j)-cj)2是對象點xi(j)和聚類中心cj之間的距離度量。
在YOLOv4 算法中,針對3 種不同尺度的特征圖輸出訓練與檢測,借鑒了9 個先驗框,以便獲取不同尺度大小的目標信息,先驗框的大小分別為(12,16)、(19,36)、(40,28)、(36,75)、(76,55)、(72,146)、(142,110),(192,243)、(459,401)。針對本文的儲糧害蟲數據集,YOLOv4 的先驗框都不是適用于訓練與檢測儲糧害蟲目標,因此針對本文的數據集進行聚類分析,得到合適大小的先驗框。K-means算法輸入的具體步驟:
輸入:先驗框數m和一個包含n個對象的數據集
輸出:聚類得到的m個適用于害蟲數據集的先驗框
步驟:
1)從n個對象中隨機選擇m個對象為初始聚類中心;
2)重復3)至4),直到每個對象不再改變;
3)根據對象與聚類中心的距離,將對象分配到相似的聚類;
4)為每個聚類重新計算聚類中心。
K-means聚類流程如圖2所示。

圖2 K-means算法流程圖
針對本文的害蟲數據集,選取m=9,進行K-means 聚類后,得到的9 個先驗框大小為(16,21)、(20,24)、(21,14)、(23,18)、(26,38)、(36,27)、(40,49)、(47,82)、(60,53)。
表1 展示了在儲糧害蟲數據集上,先驗框聚類前后對檢測平均精度均值(mean Average Precision,mAP)的結果對比。從表1 可以看出,重新聚類后的先驗框在儲糧害蟲檢測上有明顯的精度提升,mAP比原YOLOv4提高了1.9%。

表1 不同的先驗框檢測結果對比
在卷積神經網絡中,卷積層接受任意大小圖像的輸入,即卷積后的輸出大小也是可變的,但是全連接層需要固定大小的輸入,一般使用扭曲或者裁剪滿足這一需求。然而,扭曲和裁剪后的區域可能不包含所需的對象。卷積后需要考慮如何有效地利用卷積激活的空間信息,傳統的聚合方法,如平均池化、最大池化不能充分利用卷積激活的空間信息。SPP 模塊解決了這一些問題,SPP 可以接受任意大小的輸入,通過使用多層空間區域劃分特征圖,并在子區域內池化局部特征,從而產生固定大小的輸出,保證了檢測對象的存在,并滿足了全連接層的輸入需求。SPP 對卷積后特征進行聚合,獲得更具有代表性、空間信息豐富的紋理特征。在針對YOLOv4 有三個不同大小尺度的輸出,本文網絡選用SPP模塊對卷積后的特征圖進行池化操作,使全局上下文特征能夠與多尺度特征保持一致。對于大小為m×m的特征圖和具有l級n×n大小的金字塔,l級的輸出串聯是全連接層的輸入。例如,如果一個3級金字塔池(1×1,2×2,3×3),對于給定的任何特征圖的輸入,全連接層的輸入大小固定為(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 層的輸出都是作為多尺度檢測模塊的輸入,在三個不同尺度的輸入前加入SPP 模塊,增加視覺感受野,從而提高網絡的特征提取能力,得到更多的目標信息,進而提高儲糧害蟲目標的檢測精度,如圖4所示。

圖4 基于改進YOLOv4的算法模型
本文使用的數據來源于拍攝人工飼養的儲糧害蟲制作的數據集,主要研究對象為儲糧中高爆發的五類害蟲,分別是銹赤扁谷盜(Cryptolestes ferrugineus,Cf)、鋸谷盜(Oryzaephilus surinamensis,Os)、谷蠹(Rhizopertha dominica,Rd)、米象(Sitophilus oryzae,So)和赤擬谷盜(Tribolium castaneum,Tc)[20]。拍攝的害蟲圖像,經篩選標記后,共選出1425 張害蟲圖片,共分為兩個部分,其中1324 張圖片作為訓練集,91 張圖片作為測試集。在訓練過程中按9∶1的比例劃分訓練集與驗證集進行訓練交叉驗證。
硬件配置:CPU 型號是Intel(R)Core(TM)i7-9700K,頻率為3.6Hz,內存為16GB;GPU 型號是NVDIA GeForce RTX 2070。軟件環境:tensorflow-gpu1.13.2,CUDA10.0,CUDNN7.4.1.5。
儲糧害蟲目標檢測算法,采用平均精度(Average Precision,AP)、平均精度均值(mean Average Precision,mAP)和檢測速度(Frames Per Second,FPS)作為算法模型的評價指標。
mAP首先計算每個類別的AP,AP是指該類別的準確率P(Precision)和召回率R(Recall)之和,再對所有類別的平均精度求均值得到,計算公式如式(12)所示。
以害蟲檢測為例,其中TP(True Positive)為測試數據集中害蟲被正確檢測的個數,FP(False Positive)為測試數據集中非害蟲被檢測為害蟲的個數,FN(False Negative)為測試數據集中真正的害蟲被檢錯的個數,s是害蟲類別數。
選取五類害蟲圖片,分別使用原始YOLOv4 算法和改進后的YOLOv4 算法進行儲糧害蟲檢測,并加入YOLOv3 算法的檢測,圖5 展示了三種算法模型的檢測結果。相較于YOLOv3 算法,YOLOv4 算法對儲糧害蟲有較好的檢測結果,例如米象(So),YOLOv3 算法檢測存在漏檢的現象,YOLOv4 算法有效的檢測出了所有的害蟲。改進后的YOLOv4算法,相較于原始的YOLOv4 算法檢測,有更高的檢測精度。

圖5 三種算法檢測結果
為了進一步驗證本文改進的算法有效的提高了儲糧害蟲檢測的準確率,采用mAP 指標對改進后的YOLOv4 算法進行評估。圖6 展示了YOLOv4算法改進前后在儲糧害蟲上檢測的AP 對比結果,原始的YOLOv4 算法的AP 值在75%~99%之間,改進后的YOLOv4 的AP 值在85%~99%之間,雖然不是每類害蟲的AP 值都高于原始的YOLOv4 網絡,但是改進后的算法對五類害蟲的檢測性能整體優于原始算法。

圖6 儲糧害蟲AP的檢測結果
表2展示了改進前后的YOLOv4算法在害蟲檢測上的mAP對比實驗結果,相較于原YOLOv4算法相比,改進后的YOLOv4 儲糧害蟲檢測算法,mAP從89.50%提升至93.99%,說明該算法整體上提升了精測精度,再如銹赤扁谷盜(Cf),原YOLOv4 算法檢測AP 為76.51%,改進后的YOLOv4 算法AP 提升到了89.56%。

表2 改進后的YOLOv4與原YOLOv4算法檢測效果對比
將本文改進的YOLOv4 算法與YOLOv3、YOLOv4兩種經典的多尺度目標檢測算法對mAP、FPS值進行對比,結果如表3 所示。與YOLOv3 相比,YOLOv4的主干網絡采用CSPnet結合YOLOv3的主干網絡Darknet53 構成CSPDarknet53,提高了算法的檢測精度。為了進一步改善儲糧害蟲檢測精度,在網絡的三個不同尺度的檢測前加入SPP模塊,通過不同的最大池化層,在不增加計算開銷的情況下有效地增加了儲糧害蟲圖像的深層感受野,獲得更加豐富的儲糧害蟲紋理特征,并且幾乎不會降低網絡檢測的速度。相較于YOLOv4,本文改進的YOLOv4 算法在儲糧害蟲檢測中,mAP 提高了4.49%。同時,檢測速度超過了原始YOLOv4 算法,每秒達到26.36幀。

表3 三種方法性能比較
本文針對儲糧害蟲的檢測,提出了基于改進YOLOv4 的糧倉害蟲檢測算法。該算法使用K-means 算法,調整訓練檢測使用的先驗框的大小,在模型中加入SPP結構,增加模型感受野,得到了一種適合儲糧害蟲檢測的算法模型。實驗結果表明,相較于原YOLOv4 算法,本文提出的改進的YOLOv4 算法,在儲糧害蟲檢測中mAP 提升了4.49%,且檢測速度達到了26.36 幀/s。與YOLOv3相比,改善了儲糧害蟲的漏檢效果。