宋 宇, 付珍艷, 紀超群, 徐連杰
(長春工業(yè)大學(xué) 計算機科學(xué)與工程學(xué)院, 吉林 長春 130012)
隨著計算機性能的不斷提高和卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用,基于深度學(xué)習的目標檢測算法不斷被完善,從最初的一種基于CNN的目標檢測框架Over Feat到深度學(xué)習檢測模型R-CNN[1],再到進一步地改進 R-CNN 的網(wǎng)絡(luò)結(jié)構(gòu),提出了 Fast-RCNN和Faster-RCNN,其已達到高檢測精度。但Fast-RCNN[2]和Faster-RCNN[3]是基于區(qū)域建議提取目標候選區(qū)域的兩步檢測網(wǎng)絡(luò)(two-stage),檢測速度不能達到實時性,進而又提出基于回歸思想的單步檢測模型(one-stage)來提高檢測速度,如SSD[4]和YOLO[5]系列YOLOV1、YOLOV2[6]、YOLOV3[7]。短短幾年時間,基于深度學(xué)習的目標檢測被廣泛應(yīng)用在汽車、交通領(lǐng)域,如公路上的車牌識別,自動駕駛可進行行人、來往車輛、紅綠燈的識別;其次在航空航天方面,可利用該技術(shù)偵測行星、隕石、太空垃圾等;在醫(yī)療領(lǐng)域方面可用于細胞的病變、是否細菌感染以及病毒的檢測;常見的視頻、攝像功能,如在日常生活中經(jīng)常接觸的拍照時可能用到的人臉識別、物體檢測等功能,手寫字體識別、手機的面部識別登入系統(tǒng)、百度的“以圖搜圖”等多種新穎又實用的技術(shù)都是以目標檢測技術(shù)為基礎(chǔ)的;還有在消費電子領(lǐng)域,目標檢測技術(shù)應(yīng)用于體感游戲,可以讓系統(tǒng)讀取到玩家體型信息,再識別出玩家的攻擊、跳躍等一系列的動作等。目前,專門應(yīng)用于蝴蝶生長過程檢測的相關(guān)算法研究較少,文中研究了相關(guān)的目標檢測算法,發(fā)現(xiàn)大多數(shù)通用目標檢測算法都可以適用于蝴蝶生長過程的檢測任務(wù),但是由于自然界復(fù)雜場景下存在種類眾多和小尺度目標檢測等問題,導(dǎo)致如果將通用目標檢測算法直接應(yīng)用于蝴蝶生長過程檢測任務(wù),效果并不理想。
文中對 YOLOV3 進行改進,應(yīng)用于蝴蝶生長過程檢測研究領(lǐng)域。標記蝴蝶生長階段的形態(tài),從卵、幼蟲、蛹到蝴蝶,在自己制作的數(shù)據(jù)樣本中訓(xùn)練模型,將訓(xùn)練得到的模型用于測試集進行測試,測試結(jié)果顯示,能檢測出蝴蝶的各個生長過程,具有較高的準確性和實時性。目的是為了保證蝴蝶的生產(chǎn)數(shù)量,維持自然界的生態(tài)平衡。
You Only Look Once(YOLO)最初是由Redmon J等[5]提出的one-stage算法,僅使用一個CNN網(wǎng)絡(luò)訓(xùn)練預(yù)測不同目標的class和位置,簡單化實現(xiàn)了end到end的目標檢測網(wǎng)絡(luò)。在2017-2018年,Redmon J等[7]在 YOLO 的基礎(chǔ)上,繼續(xù)改進并提出YOLOV2與 YOLOV3算法,增強了檢測精度,縮短了檢測時間,并且在數(shù)據(jù)集上的 mAP 率大幅度提高。
YOLOV3是以YOLOV2的darknet-19框架結(jié)構(gòu)為基礎(chǔ)發(fā)展到 darknet-53[8]。darknet-53包含53個卷積層和5個殘差塊[9],在每一卷積層后設(shè)置批量歸一化操作,避免了過擬合現(xiàn)象的發(fā)生。YOLOV3網(wǎng)絡(luò)結(jié)構(gòu)[10]如圖1所示。
由圖1可知,整個網(wǎng)絡(luò)使用了全卷積層,3×3和1×1兩種類型是YOLOV3的主要卷積尺寸,1×1可以通過改變channel的通道數(shù)目,以及作為bottlenet層,從而有效降低網(wǎng)絡(luò)的參數(shù)量,加快網(wǎng)絡(luò)的訓(xùn)練和收斂。采用三種先驗框 13×13、26×26、52×52,可在特征圖上進行不同尺度的檢測,提高了小尺度目標檢測識別的能力。
YOLOV3先將輸入的圖片縮放到一定大小,然后劃分為N×N個單元格,每個單元格負責預(yù)測K個物體檢測框,每個物體檢測框包括5個參數(shù),即(x,y,w,h,Cr)。其中(x,y)是物體檢測框的中心坐標,w和h分別是物體檢測邊框的寬和高。Cr(置信度)由物體檢測框和真實框的IOU(交并比)以及檢測框中是否含有檢測目標共同決定。置信度計算公式為

(1)
式中:p(object)----單元格中是否包含檢測目標的概率,當p=1時,說明單元格中有既定目標,反之則說明沒有;

通過設(shè)定閾值T,除去置信度低于T的邊界框,保留置信度較高的邊界框。YOLOV3 算法通過K-Means聚類算法聚類9個不同尺寸固定大小的錨框anchor。把9個錨框按照大小分別分配給3個不同尺度,3個不同尺度的輸出包括目標的坐標位置、目標是正樣本還是負樣本,以及目標屬于哪個類別的Cr。對于3個不同尺度的分支而言,在每個網(wǎng)格中會預(yù)測出3個結(jié)果(因為每個尺度下會有3個錨框anchor),最終將3個尺度的結(jié)果合并進行非極大值抑制后,輸出最終檢測結(jié)果。
先使用歐幾里得距離對樣本點和質(zhì)心的距離計算,接著將離一個質(zhì)心最近樣本點規(guī)劃其中,這種度量樣本間的相似性進行聚類就是K-means[12]。在候選框聚類過程中,若使用歐幾里得距離的標準k均值,則較大邊界框(box)會比較小邊界框產(chǎn)生更多的誤差。真正想要選擇的樣本間距離度量(D)應(yīng)該與box本身大小無關(guān),因此,計算兩個box的IOU,即2個box的相似程度,計算公式為
D(box1,box_cluster)=
1-IOU(box1,box_cluster),
(2)
式中:box1----真實框的集合;
box_cluster----邊界框簇中心集合。
距離越小,IOU越大,說明box1與box_cluster越類似,將box劃歸為box_cluster。對于給定的box1,計算box1與Box_cluster的交集與并集的比值來度量D的大小,避免box自身大小所帶來的誤差。首先將數(shù)據(jù)集分為k個cluster,不斷更新使得cluster內(nèi)的邊框距離盡可能小,而cluster間盡量大,然后通過目標函數(shù)變化值確定候選框的尺寸大小。

圖1 YOLOV3網(wǎng)絡(luò)結(jié)構(gòu)
原YOLOV3是對VOC 數(shù)據(jù)集上的K-means聚類方法來生成9個錨框anchor,3個不同尺寸的特征圖分別對應(yīng)3個錨框,用來檢測大、中、小尺寸的目標。并非專門針對蝴蝶生長過程設(shè)計。而文中所需檢測的是蝴蝶的生長過程,采用的是自制蝴蝶的數(shù)據(jù)集,屬于特殊目標檢測,所以需要重新進行聚類。通過數(shù)據(jù)集標注的有遮擋和無遮擋的目標框尺寸大小對其進行聚類分析,得到效果更好的先驗框 anchor 參數(shù)[13],提高檢測效果。
YOLOV3的主干特征提取網(wǎng)絡(luò)Darknet53借鑒了ResNet的殘差思想[14],先進行一次3×3,步長為2的卷積,接著進行1×1的卷積,減少通道數(shù)目,再進行一次3×3的卷積加強特征提取,擴張通道數(shù)目,最后通過殘差結(jié)構(gòu)。如果檢測目標是單個物體,其參數(shù)多,數(shù)據(jù)量需求大,過于復(fù)雜和多余,檢測速度慢。文中針對這一問題,提出一種改進的網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)在過渡模塊中使用卷積核進一步降低維數(shù)。為了提高目標檢測精確率和提升更深層網(wǎng)絡(luò)特征的細粒度,可以通過在淺層網(wǎng)絡(luò)中增加卷積層和殘差連接結(jié)構(gòu)數(shù)量,以及網(wǎng)絡(luò)使用step=2的卷積層代替池化層來完成。對原YOLOV3的特征網(wǎng)絡(luò)結(jié)構(gòu)進行改進[15-16],見表1。

表1 改進YOLOV3的特征提取網(wǎng)絡(luò)
改進YOLOV3的特征提取網(wǎng)絡(luò)為解決梯度消失的問題采用層連接方式,傳遞特征的方式得到了強化,參數(shù)數(shù)量減少,大幅減少了計算量。增加1×1和3×3卷積核使網(wǎng)絡(luò)結(jié)構(gòu)的信息表達更豐富。在昆蟲生長發(fā)育過程的檢測過程中發(fā)現(xiàn),13×13的特征分辨率易造成小目標丟失。因此刪除了13×13的特征分辨率模塊,取而代之的是104×104的特征分辨率模塊,減少感受野,提高對小目標的檢測。
利用改進的YOLOV3對樣本數(shù)據(jù)集進行訓(xùn)練,如果數(shù)據(jù)集的數(shù)量不夠,將直接影響訓(xùn)練的好壞。目前還沒有基于昆蟲生長過程的圖片數(shù)據(jù)庫,因此,首先向一些有過此類研究專業(yè)的學(xué)生和老師收集圖片,又從百度圖庫中進行網(wǎng)絡(luò)爬蟲和昆蟲生長過程的視頻中提取得到圖片。蝴蝶生長的每個狀態(tài)收集了3 000張圖片,然后進行標注,形成自己的數(shù)據(jù)集。對蝴蝶生長過程的自動檢測識別能夠為生態(tài)環(huán)境監(jiān)測、生物多樣性保護等領(lǐng)域提供技術(shù)支持,減少對專家人工鑒定的依賴。
手動對收集到的圖片進行標注。文中使用專門的標注工具Labelimg對圖片進行標注。打開labelimg點擊open,導(dǎo)入所需要標注的圖片,點擊create RectBox選項,用矩形標注框選取所需要的工件圖像,并對標注框進行自定義命名。完成后會生成.xml格式文件。生成的文件內(nèi)容包括:工件圖像所在磁盤位置,標注框坐標,標注框長度和高度,以及標注框的自定義類別信息。
蝴蝶生長過程標注如圖2所示。

(a) 卵標注 (b) 幼蟲標注 (c) 蛹標注 (d) 蝴蝶標注
文中算法是在Pycharm2018下使用python3.6進行編程,搭建 TensorFlow-Keras框架,然后進行算法的訓(xùn)練和測試。在 PC 機上進行了實驗,機器配置為Ubantu16.04操作系統(tǒng)、Intel(R) Core(TM)i7-10750H處理器、NVIDIA GTX1080Ti獨立顯卡、11 G顯存、16 G內(nèi)存。時長為24 h。實驗環(huán)境配置見表2。

表2 實驗環(huán)境配置
文中所用的算法運行環(huán)境是Keras,樣本訓(xùn)練共進行12 000次迭代,以 10 000張蝴蝶生長圖像為訓(xùn)練集,5 000張做測試集,其中批量大小設(shè)置為bactch=64,修改類別數(shù)目的值,本次實驗檢測了4種類別,故class=4,修改輸出特征圖的數(shù)量 filter ,計算公式為
filter=(class+5)×3,
(3)
初始階段將學(xué)習率設(shè)置為lr=0.001,衰減值為0.000 5,在迭代次數(shù)為8 000次后,損失值Loss穩(wěn)定在0.381左右,迭代至10 000次停止。損失值Loss隨迭代次數(shù)變化,如圖3所示。

圖3 改進后YOLO的Loss曲線
采用Precision(精確率)、Recall(召回率)和times(每張檢測時間)作為模型檢測好壞的評價標準。精確率是已識別為蝴蝶生長發(fā)育過程的概率,召回率是能夠正確識別蝴蝶生長發(fā)育過程的概率。

(4)

(5)
式中:TP----檢測模型將蝴蝶生長過程檢測正確;
FP----檢測模型將蝴蝶生長過程檢測錯誤;
FN----檢測錯誤的數(shù)量。
使用文中訓(xùn)練數(shù)據(jù)集,同時訓(xùn)練了Faster-RCNN、SSD、YOLOV3模型,測試集5 000幅圖片中有 2 000個里面含有檢測目標,不同算法測試對比見表3。

表3 不同算法測試對比
通過對比可以看到,在時間上,F(xiàn)aster-RCNN的檢測時間最慢,為2.560 s,SSD算法的檢測時間為0.189 s,原YOLOV3的檢測時間為0.039 s,文中算法的檢測時間為0.041 s,相比原YOLOV3的檢測時間慢了0.002 s,但比SSD和Faster-RCNN分別快了0.148 s和2.519 s,能夠滿足實時性要求。文中算法的精確率達到了95.4%,相比未改進的YOLOV3提高了1.1%,比SSD提高了1.6%,比Faster-RCNN提高了0.1%;在召回率方面,F(xiàn)aster-RCNN的召回率為93.5%,SSD的召回率為92.7%,原YOLOV3的召回率為93.15%,文中改進YOLOV3的召回率均比其他算法略高,在實際應(yīng)用中,能夠準確實時檢測出蝴蝶的生長過程,滿足要求。改進算法測試結(jié)果如圖4所示。

圖4 改進算法檢測結(jié)果
基于改進的YOLOV3 目標檢測算法實現(xiàn)了蝴蝶各生長階段的實時檢測功能。實驗結(jié)果表明,進行改進后的YOLOV3在蝴蝶生長過程檢測中與原YOLOV3、Faster-RCNN、SSD相比較,精確率和召回率都有提高,檢測效果更好。在5 000張測試集圖片上進行測試,達到95%以上的精確率。研究結(jié)果表明,使用改進的YOLOV3對蝴蝶生長過程檢測切實可行,能夠及時觀察蝴蝶的生長階段,及時發(fā)現(xiàn)是否健康,是否面臨危險,提高蝴蝶成活率,為以后運用到生物領(lǐng)域打下基礎(chǔ)。