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