揭陽職業(yè)技術學院 黃玲玲
本文利用Faster-RCNN進行目標檢測,對收集到的3000多張害蟲圖片進行28個類別的訓練,達到自動識別害蟲類別的目的。首先對于所給數據進行數據預處理,對輸入的有效圖片進行原圖同比縮放bbox、垂直翻轉等方式進行數據增強,訓練過程中把圖片按90%:10%隨機分配到訓練集和驗證集中,最后利用已經訓練好的Faster-RCNN網絡模型進行目標檢測。模型訓練集上的損失值在經歷200個Epoch的訓練后逐漸收斂于橫軸,意味著模型在訓練集上的預測結果逐漸正確,Loss曲線在訓練到第200個Epoch時損失值就達到了0.11157,基本沒有出現(xiàn)大幅度震蕩的現(xiàn)象,表明模型的訓練是有效的。test_map曲線是表示模型在測試集上的mAP@0.5值,該值是用來表示檢測的精度值,該值越接近于1表明實驗結果精度越高。實驗結果表明,mAP@0.5值達到了24.696%。
病蟲害一直是農業(yè)生產中無法避免的問題,每年都會由此造成巨大的經濟損失。為了對農田病蟲害進行有效的預防和控制,需要收集有害生物信息,在此基礎上進行蟲情分析。由于農田害蟲的多樣性和復雜性,人工識別統(tǒng)計的檢測方式難以滿足現(xiàn)代大規(guī)模農業(yè)生產對蟲害預防工作的需要。近年來出現(xiàn)的蟲情測報燈是蟲情信息采集的智能設備,可以實現(xiàn)無人自動誘集、殺蟲、蟲體分散、拍照等作業(yè),并實時地將蟲情信息上傳至云平臺。蟲情測報燈的投入使用可幫助植保人員高效地進行蟲情分析,提高測報工作效率和準確率,避免農藥的濫用和誤用,減少農產品的農藥殘留,改善農田生態(tài)環(huán)境。
本文根據采集到的3000多張害蟲圖像,建立識別害蟲種類及位置的Faster-RCNN模型,并使用該模型對日常采集到的害蟲進行檢測,利用mAP@0.5值來評價模型的精度。
隨著大數據時代的到來和計算機視覺的發(fā)展,近年來目標檢測領域取得了突破性的進展?,F(xiàn)階段基于深度學習的圖像檢測算法大致可以分成兩大流派:一種是“一步走(One-stage)”算法——YOLO系列;一種是“兩步走(Two-stage)”算法,例如:Faster-RCNN,主要思路是先產生候選區(qū)域然后再進行分類;Faster-RCNN是改進的RCNN模型,融合了RPN與Fast RCNN基本結構。它最大的創(chuàng)新之處就在于通過添加RPN網絡,基于Anchor機制來生成候選框,代替Selective Search,最終將特征提取、候選框選取、邊框回歸和分類都整合到一個網絡中,從而有效地提高檢測精度和檢測效率。具體的流程就是將輸入圖像縮放以后進入到卷積層提取特征得到Feature Map,然后特征圖送入RPN網絡生成一系列Object可能的候選框,接下來將原始的Feature Maps和RPN輸出的所有候選框ROI矩陣(N×5)輸入到ROI Pooling層,提取收集Proposal,并計算出固定大小的Proposal Feature Maps,送入全連接層進行目標分類與坐標回歸。
Faster-RCNN實現(xiàn)了在深度網絡模型中集成了目標區(qū)域提取、深度特征提取、目標檢測和識別的過程,檢測精度較高,但是訓練的速度相對YOLO會慢一點。針對該模型的這個短板,本次實驗的解決方法是在GPU中運行來提高速度,本次實驗的檢測對象——農田害蟲屬于小目標檢測,存在重疊、緊挨的現(xiàn)象,為提高精度,故本次實驗采用Pytorch框架構建Faster-RCNN模型,更加方便地訓練自己的數據集,代碼易讀,直接高效。
3.1.1 數據標注
將圖片中能明確辨認類別的昆蟲進行標注,生成標注文件。<annotation>標簽代表了這是一個標注,<path>標簽代表了文件的路徑,其中在<size>標簽下,分別包含了圖像的寬度、高度以及通道數的信息,本次實驗采集的圖片標記為寬度5472和高度3648,圖像的通道數為3,意義為圖片是彩色圖;在<object>標簽下意味著檢測目標的類別,以及具體的坐標位置,其類別為棉鈴蟲,觀察檢測目標的檢測框,左上角的橫坐標3634,左上角的縱坐標33,右下角的橫坐標4508,右下角的縱坐標597。根據4個坐標,可以知道昆蟲在圖片的具體位置。標注文件示例如下:
<annotation>
<folder>datasets/JpegImages</foler>
<filename>00043.jpg</filename>
<path>datasets/JpegImages/00043.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>5472</width>
<height>5472</height>
<width>5472</width>
</size>
<segmented>0</segmented>
<object>
<name>棉鈴蟲</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>3634</xmin>
<ymin>33</ymin>
<xmax>4508</xmax>
<ymax>3634</ymax>
</bndbox>
</object>
</annotation>
3.1.2 數據分析
對標注文件中所有標簽數據進行目標昆蟲位置及大小歸一化處理,得到目標昆蟲相對位置及相對大小歸一圖(如圖1所示)。圖像顯示目標昆蟲相對集中于圖片的中部位置。目標框的相對寬度集中于0%~20%,目標框的相對高度集中于0%~30%,這說明該檢測任務是以中小目標為主,在改進網絡和訓練時需要重點照顧這部分中小比例的目標。
圖1 目標昆蟲相對位置(左)及相對大?。ㄓ遥w一圖Fig.1 Normalized graph about relative position (left) and relative size (right) of target insects
為了擴充數據量,避免產生過擬合的情況,F(xiàn)aster-RCNN應用了某些數據增廣策略,例如:按與原圖同等比例縮放bbox、進行垂直翻轉、進行水平翻轉、隨機填充、調節(jié)亮度、對比度等[1]。訓練過程中把圖片按90%:10%隨機分配到訓練集和驗證集中。
采用等比縮放將原始圖片的長和寬統(tǒng)一縮放為一個標準的尺寸,再進行自適應填充,然后輸送到網絡中。鑒于圖片長寬比不同,等比縮放時取最小縮放比,這不會造成信息損失。本次實驗將寬度5472和高度3648的圖片通過0.16的比率壓縮到876×584。
本次實驗選擇VGG16作為Faster-RCNN的骨干網絡,VGG主要由3個部分Conv層、Relu層和Pooling層組成,包括13個Conv層、13個Relu層和4個Pooling層疊得到的。
Faster-RCNN首先是支持輸入任意大小的圖片的,進入網絡之前對圖片進行了規(guī)整化尺度的設定,如可設定圖像短邊不超過600,圖像長邊不超過1000,假定M×N=1000×600(如果圖片少于該尺寸,可以邊緣補0,即圖像會有黑色邊緣)。
13 個 Conv 層 設 置 kernel_size=3,pad=1,stride=1,Conv層并不會改變圖片大?。矗狠斎氲膱D片大小=輸出的圖片大小),卷積公式如式(1)所示:
13個Relu層:激活函數,不改變圖片大小。
4個 Pooling 層設置 kernel_size=2,stride=2;pooling層會讓輸出圖片是輸入圖片的1/2。經過Conv Layers,圖片大小變成(M/16)×(N/16),即:60×40(1000/16≈60,600/16≈40);則,F(xiàn)eature Map就是60×40×512-d(注:VGG16是512-d,ZF是256-d),表示特征圖的大小為60×40,數量為512。
Faster-RCNN提出了一種加速區(qū)域建議計算的方法,即建立RPN網絡。它能夠同時預測輸入圖片的每個位置目標區(qū)域框是否是目標的得分[1]。
Faster-RCNN的整體結構可以看做是“RPN+Fast-CNN”的集合,RPN網絡用于生成高質量的區(qū)域建議框,F(xiàn)ast-CNN用于生成高質量區(qū)域建議特征以及分類的作用。在RPN網絡層中通過使用Softmax函數來將Anchors進行二分類,判斷是否目標物。接下來運用Bounding Box Regression對Anchors進行校正,這樣可以得到更準確的Proposal。
訓練過程具體過程如下:
輸入圖像經過VGGNet之后將得到一個特征圖(即CNN的輸出),用滑動窗口在這個特征圖上進行滑動,又會得到一個新的特征圖,把這個特征圖上的每一個點映射到原始輸入圖像上,每個單個元素其值對于原始圖像中的某個區(qū)域,對原始區(qū)域按事先定義的規(guī)則進行縮放和偏移,就可以得到k個新的區(qū)域,這k個新的區(qū)域就被叫做Anchor(這里k=9),之后再把這些區(qū)域進行分類和回歸[1]。
分類層經過一個卷積層后,維度變?yōu)?×18×37×55。這里18個Feature Map是有具體物理意義的,它對應9個Anchor的得分,每個Anchor有2個得分,分別是存在目標和不存在目標的得分,這2個得分概率之和為1。位置回歸層經過一個卷積層之后,維度變?yōu)?×36×37×55,共36個Feature Map,這36個Feature Map對應9個Anchor的調整參數,每個Anchor有4個調整參數。
把在第2個步驟得到的高維特征圖和第3個步驟得到的輸出區(qū)域一起運送到ROI層中,在神經網絡模型的末尾運用全連接層,把目標物進行分類別區(qū)分,實現(xiàn)目標物體的多分類。
利用Propasal Feature Maps計算每個Proposal所屬地的不同類別概率信息,利用Bounding Box Regression來得到物體檢測框的準確位置,從而得到目標對象的檢測結果[1]。
本文基于PyTorch1.6版本進行實驗,圖像檢測對硬件要求較高,實驗時采用了Intel酷睿i5-10400F的CPU中央處理器。同時使用NVDIA GeForce RTX2070 SUPER的GPU參與運算。
Faster-RCNN模型的參數設置表如表1所示。
表1 Faster-RCNN模型的參數設置表Tab.1 Parameter setting table of the Faster-RCNN model
在訓練Faster-RCNN時通常的數據流如下:
(1)從圖表中提取特征;
(2)產生Anchor目標;
(3)RPN網絡中得到位置和目標預測分值;
(4)取前N個坐標及其目標得分即建議層;
(5)傳遞前N個坐標通過Faster-CNN網絡,生成4中建議的每個位置的位置和CLS預測;
(6)對4中建議的每個坐標生成建議目標;
(7)采用2,3計算rpn_cls_loss和rpn_reg_loss;
(8)采用5,6計算roi_cls_loss和roi_reg_loss。
模型迭代200個Epoches后收斂,詳細結果如表2、圖2所示。
表2 目標檢測算法測試結果Tab.2 Target detection algorithm test results
圖2 目標檢測算法測試結果圖像Fig.2 Target detection algorithm test result image
total_loss曲線圖橫坐標含義為迭代次數,單位為(次),縱坐標含義為概率值p∈(0,1),無具體單位。模型訓練集上的損失值在經歷200個Epoche的訓練后逐漸收斂于橫軸,意味著模型在訓練集上的預測結果逐漸正確,Loss曲線在訓練到第200個Epoch時損失值就達到了0.11157,基本沒有出現(xiàn)大幅度震蕩的現(xiàn)象,表明模型的訓練是有效的。
test_map曲線是表示模型在測試集上的mAP@0.5值,該值是用來表示檢測的精度值,該值越接近于1表明實驗結果精度越高[2]。實驗結果表明,mAP@0.5 值達到了24.696%。
造成mAP@0.5值不夠理想的主要原因在于源數據集。一方面,源數據雖然有3000多張圖片,但是,其中做出標注的只有500多張,其他的由于背景噪聲、昆蟲殘缺無法辨認等原因,并沒有給出標注,依靠500多張圖片作為訓練集,想識別出28類昆蟲,有點不太現(xiàn)實。盡管已經做了數據增強,結果仍然不夠理想;另一方面,每個類別的圖片數量差距很大,例如“八點灰燈蛾”,數據集標注了244只,可以通過隨機裁剪、水平翻轉、垂直翻轉,隨機拼接來增加數據集。有的類別只給了1張圖片,例如:“豆野螟”和“干紋冬夜蛾”。如果訓練集只給了1張圖片的這類昆蟲的一種形態(tài),那么計算機將無法對其腹部圖片、遮擋圖片進行識別,就算是對其做了數據增強仍然不足以支撐深度學習網絡的要求,最后會對訓練結果、識別精度產生一定的影響。雖然實驗的訓練結果顯示不太滿意,但是其中某些類別實際檢測效果仍可以達到0.99,且該部分只是為了產生訓練數據。
驗證集的測試結果展示如圖3所示,結果表明,類似八點灰燈蛾這類數據量足夠的目標,盡管有緊挨、重疊現(xiàn)象,測試出來的最差的結果仍能達到0.99,而像蟋蟀這類數據量只有39的,測試結果相應的降低。目前模型還無法識別只提供1張圖片的豆野螟和干紋冬夜蛾,也存在漏測的情況。
圖3 驗證集的測試結果Fig.3 Test results of validation set
引用
[1]周佳淇.基于改進的Faster RCNN算法的目標檢測及定位[D].黑龍江:哈爾濱理工大學,2021.
[2]沈祥壯.Python數據分析入門——從數據獲取到可視化[M].北京:電子工業(yè)出版社,2018.