宋 宇, 付珍艷, 紀(jì)超群, 徐連杰
(長(zhǎng)春工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院, 吉林 長(zhǎng)春 130012)
隨著計(jì)算機(jī)性能的不斷提高和卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用,基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法不斷被完善,從最初的一種基于CNN的目標(biāo)檢測(cè)框架Over Feat到深度學(xué)習(xí)檢測(cè)模型R-CNN[1],再到進(jìn)一步地改進(jìn) R-CNN 的網(wǎng)絡(luò)結(jié)構(gòu),提出了 Fast-RCNN和Faster-RCNN,其已達(dá)到高檢測(cè)精度。但Fast-RCNN[2]和Faster-RCNN[3]是基于區(qū)域建議提取目標(biāo)候選區(qū)域的兩步檢測(cè)網(wǎng)絡(luò)(two-stage),檢測(cè)速度不能達(dá)到實(shí)時(shí)性,進(jìn)而又提出基于回歸思想的單步檢測(cè)模型(one-stage)來提高檢測(cè)速度,如SSD[4]和YOLO[5]系列YOLOV1、YOLOV2[6]、YOLOV3[7]。短短幾年時(shí)間,基于深度學(xué)習(xí)的目標(biāo)檢測(cè)被廣泛應(yīng)用在汽車、交通領(lǐng)域,如公路上的車牌識(shí)別,自動(dòng)駕駛可進(jìn)行行人、來往車輛、紅綠燈的識(shí)別;其次在航空航天方面,可利用該技術(shù)偵測(cè)行星、隕石、太空垃圾等;在醫(yī)療領(lǐng)域方面可用于細(xì)胞的病變、是否細(xì)菌感染以及病毒的檢測(cè);常見的視頻、攝像功能,如在日常生活中經(jīng)常接觸的拍照時(shí)可能用到的人臉識(shí)別、物體檢測(cè)等功能,手寫字體識(shí)別、手機(jī)的面部識(shí)別登入系統(tǒng)、百度的“以圖搜圖”等多種新穎又實(shí)用的技術(shù)都是以目標(biāo)檢測(cè)技術(shù)為基礎(chǔ)的;還有在消費(fèi)電子領(lǐng)域,目標(biāo)檢測(cè)技術(shù)應(yīng)用于體感游戲,可以讓系統(tǒng)讀取到玩家體型信息,再識(shí)別出玩家的攻擊、跳躍等一系列的動(dòng)作等。目前,專門應(yīng)用于蝴蝶生長(zhǎng)過程檢測(cè)的相關(guān)算法研究較少,文中研究了相關(guān)的目標(biāo)檢測(cè)算法,發(fā)現(xiàn)大多數(shù)通用目標(biāo)檢測(cè)算法都可以適用于蝴蝶生長(zhǎng)過程的檢測(cè)任務(wù),但是由于自然界復(fù)雜場(chǎng)景下存在種類眾多和小尺度目標(biāo)檢測(cè)等問題,導(dǎo)致如果將通用目標(biāo)檢測(cè)算法直接應(yīng)用于蝴蝶生長(zhǎng)過程檢測(cè)任務(wù),效果并不理想。
文中對(duì) YOLOV3 進(jìn)行改進(jìn),應(yīng)用于蝴蝶生長(zhǎng)過程檢測(cè)研究領(lǐng)域。標(biāo)記蝴蝶生長(zhǎng)階段的形態(tài),從卵、幼蟲、蛹到蝴蝶,在自己制作的數(shù)據(jù)樣本中訓(xùn)練模型,將訓(xùn)練得到的模型用于測(cè)試集進(jìn)行測(cè)試,測(cè)試結(jié)果顯示,能檢測(cè)出蝴蝶的各個(gè)生長(zhǎng)過程,具有較高的準(zhǔn)確性和實(shí)時(shí)性。目的是為了保證蝴蝶的生產(chǎn)數(shù)量,維持自然界的生態(tài)平衡。
You Only Look Once(YOLO)最初是由Redmon J等[5]提出的one-stage算法,僅使用一個(gè)CNN網(wǎng)絡(luò)訓(xùn)練預(yù)測(cè)不同目標(biāo)的class和位置,簡(jiǎn)單化實(shí)現(xiàn)了end到end的目標(biāo)檢測(cè)網(wǎng)絡(luò)。在2017-2018年,Redmon J等[7]在 YOLO 的基礎(chǔ)上,繼續(xù)改進(jìn)并提出YOLOV2與 YOLOV3算法,增強(qiáng)了檢測(cè)精度,縮短了檢測(cè)時(shí)間,并且在數(shù)據(jù)集上的 mAP 率大幅度提高。
YOLOV3是以YOLOV2的darknet-19框架結(jié)構(gòu)為基礎(chǔ)發(fā)展到 darknet-53[8]。darknet-53包含53個(gè)卷積層和5個(gè)殘差塊[9],在每一卷積層后設(shè)置批量歸一化操作,避免了過擬合現(xiàn)象的發(fā)生。YOLOV3網(wǎng)絡(luò)結(jié)構(gòu)[10]如圖1所示。
由圖1可知,整個(gè)網(wǎng)絡(luò)使用了全卷積層,3×3和1×1兩種類型是YOLOV3的主要卷積尺寸,1×1可以通過改變channel的通道數(shù)目,以及作為bottlenet層,從而有效降低網(wǎng)絡(luò)的參數(shù)量,加快網(wǎng)絡(luò)的訓(xùn)練和收斂。采用三種先驗(yàn)框 13×13、26×26、52×52,可在特征圖上進(jìn)行不同尺度的檢測(cè),提高了小尺度目標(biāo)檢測(cè)識(shí)別的能力。
YOLOV3先將輸入的圖片縮放到一定大小,然后劃分為N×N個(gè)單元格,每個(gè)單元格負(fù)責(zé)預(yù)測(cè)K個(gè)物體檢測(cè)框,每個(gè)物體檢測(cè)框包括5個(gè)參數(shù),即(x,y,w,h,Cr)。其中(x,y)是物體檢測(cè)框的中心坐標(biāo),w和h分別是物體檢測(cè)邊框的寬和高。Cr(置信度)由物體檢測(cè)框和真實(shí)框的IOU(交并比)以及檢測(cè)框中是否含有檢測(cè)目標(biāo)共同決定。置信度計(jì)算公式為
(1)
式中:p(object)----單元格中是否包含檢測(cè)目標(biāo)的概率,當(dāng)p=1時(shí),說明單元格中有既定目標(biāo),反之則說明沒有;
通過設(shè)定閾值T,除去置信度低于T的邊界框,保留置信度較高的邊界框。YOLOV3 算法通過K-Means聚類算法聚類9個(gè)不同尺寸固定大小的錨框anchor。把9個(gè)錨框按照大小分別分配給3個(gè)不同尺度,3個(gè)不同尺度的輸出包括目標(biāo)的坐標(biāo)位置、目標(biāo)是正樣本還是負(fù)樣本,以及目標(biāo)屬于哪個(gè)類別的Cr。對(duì)于3個(gè)不同尺度的分支而言,在每個(gè)網(wǎng)格中會(huì)預(yù)測(cè)出3個(gè)結(jié)果(因?yàn)槊總€(gè)尺度下會(huì)有3個(gè)錨框anchor),最終將3個(gè)尺度的結(jié)果合并進(jìn)行非極大值抑制后,輸出最終檢測(cè)結(jié)果。
先使用歐幾里得距離對(duì)樣本點(diǎn)和質(zhì)心的距離計(jì)算,接著將離一個(gè)質(zhì)心最近樣本點(diǎn)規(guī)劃其中,這種度量樣本間的相似性進(jìn)行聚類就是K-means[12]。在候選框聚類過程中,若使用歐幾里得距離的標(biāo)準(zhǔn)k均值,則較大邊界框(box)會(huì)比較小邊界框產(chǎn)生更多的誤差。真正想要選擇的樣本間距離度量(D)應(yīng)該與box本身大小無關(guān),因此,計(jì)算兩個(gè)box的IOU,即2個(gè)box的相似程度,計(jì)算公式為
D(box1,box_cluster)=
1-IOU(box1,box_cluster),
(2)
式中:box1----真實(shí)框的集合;
box_cluster----邊界框簇中心集合。
距離越小,IOU越大,說明box1與box_cluster越類似,將box劃歸為box_cluster。對(duì)于給定的box1,計(jì)算box1與Box_cluster的交集與并集的比值來度量D的大小,避免box自身大小所帶來的誤差。首先將數(shù)據(jù)集分為k個(gè)cluster,不斷更新使得cluster內(nèi)的邊框距離盡可能小,而cluster間盡量大,然后通過目標(biāo)函數(shù)變化值確定候選框的尺寸大小。
圖1 YOLOV3網(wǎng)絡(luò)結(jié)構(gòu)
原YOLOV3是對(duì)VOC 數(shù)據(jù)集上的K-means聚類方法來生成9個(gè)錨框anchor,3個(gè)不同尺寸的特征圖分別對(duì)應(yīng)3個(gè)錨框,用來檢測(cè)大、中、小尺寸的目標(biāo)。并非專門針對(duì)蝴蝶生長(zhǎng)過程設(shè)計(jì)。而文中所需檢測(cè)的是蝴蝶的生長(zhǎng)過程,采用的是自制蝴蝶的數(shù)據(jù)集,屬于特殊目標(biāo)檢測(cè),所以需要重新進(jìn)行聚類。通過數(shù)據(jù)集標(biāo)注的有遮擋和無遮擋的目標(biāo)框尺寸大小對(duì)其進(jìn)行聚類分析,得到效果更好的先驗(yàn)框 anchor 參數(shù)[13],提高檢測(cè)效果。
YOLOV3的主干特征提取網(wǎng)絡(luò)Darknet53借鑒了ResNet的殘差思想[14],先進(jìn)行一次3×3,步長(zhǎng)為2的卷積,接著進(jìn)行1×1的卷積,減少通道數(shù)目,再進(jìn)行一次3×3的卷積加強(qiáng)特征提取,擴(kuò)張通道數(shù)目,最后通過殘差結(jié)構(gòu)。如果檢測(cè)目標(biāo)是單個(gè)物體,其參數(shù)多,數(shù)據(jù)量需求大,過于復(fù)雜和多余,檢測(cè)速度慢。文中針對(duì)這一問題,提出一種改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)在過渡模塊中使用卷積核進(jìn)一步降低維數(shù)。為了提高目標(biāo)檢測(cè)精確率和提升更深層網(wǎng)絡(luò)特征的細(xì)粒度,可以通過在淺層網(wǎng)絡(luò)中增加卷積層和殘差連接結(jié)構(gòu)數(shù)量,以及網(wǎng)絡(luò)使用step=2的卷積層代替池化層來完成。對(duì)原YOLOV3的特征網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改進(jìn)[15-16],見表1。
表1 改進(jìn)YOLOV3的特征提取網(wǎng)絡(luò)
改進(jìn)YOLOV3的特征提取網(wǎng)絡(luò)為解決梯度消失的問題采用層連接方式,傳遞特征的方式得到了強(qiáng)化,參數(shù)數(shù)量減少,大幅減少了計(jì)算量。增加1×1和3×3卷積核使網(wǎng)絡(luò)結(jié)構(gòu)的信息表達(dá)更豐富。在昆蟲生長(zhǎng)發(fā)育過程的檢測(cè)過程中發(fā)現(xiàn),13×13的特征分辨率易造成小目標(biāo)丟失。因此刪除了13×13的特征分辨率模塊,取而代之的是104×104的特征分辨率模塊,減少感受野,提高對(duì)小目標(biāo)的檢測(cè)。
利用改進(jìn)的YOLOV3對(duì)樣本數(shù)據(jù)集進(jìn)行訓(xùn)練,如果數(shù)據(jù)集的數(shù)量不夠,將直接影響訓(xùn)練的好壞。目前還沒有基于昆蟲生長(zhǎng)過程的圖片數(shù)據(jù)庫,因此,首先向一些有過此類研究專業(yè)的學(xué)生和老師收集圖片,又從百度圖庫中進(jìn)行網(wǎng)絡(luò)爬蟲和昆蟲生長(zhǎng)過程的視頻中提取得到圖片。蝴蝶生長(zhǎng)的每個(gè)狀態(tài)收集了3 000張圖片,然后進(jìn)行標(biāo)注,形成自己的數(shù)據(jù)集。對(duì)蝴蝶生長(zhǎng)過程的自動(dòng)檢測(cè)識(shí)別能夠?yàn)樯鷳B(tài)環(huán)境監(jiān)測(cè)、生物多樣性保護(hù)等領(lǐng)域提供技術(shù)支持,減少對(duì)專家人工鑒定的依賴。
手動(dòng)對(duì)收集到的圖片進(jìn)行標(biāo)注。文中使用專門的標(biāo)注工具Labelimg對(duì)圖片進(jìn)行標(biāo)注。打開labelimg點(diǎn)擊open,導(dǎo)入所需要標(biāo)注的圖片,點(diǎn)擊create RectBox選項(xiàng),用矩形標(biāo)注框選取所需要的工件圖像,并對(duì)標(biāo)注框進(jìn)行自定義命名。完成后會(huì)生成.xml格式文件。生成的文件內(nèi)容包括:工件圖像所在磁盤位置,標(biāo)注框坐標(biāo),標(biāo)注框長(zhǎng)度和高度,以及標(biāo)注框的自定義類別信息。
蝴蝶生長(zhǎng)過程標(biāo)注如圖2所示。
(a) 卵標(biāo)注 (b) 幼蟲標(biāo)注 (c) 蛹標(biāo)注 (d) 蝴蝶標(biāo)注
文中算法是在Pycharm2018下使用python3.6進(jìn)行編程,搭建 TensorFlow-Keras框架,然后進(jìn)行算法的訓(xùn)練和測(cè)試。在 PC 機(jī)上進(jìn)行了實(shí)驗(yàn),機(jī)器配置為Ubantu16.04操作系統(tǒng)、Intel(R) Core(TM)i7-10750H處理器、NVIDIA GTX1080Ti獨(dú)立顯卡、11 G顯存、16 G內(nèi)存。時(shí)長(zhǎng)為24 h。實(shí)驗(yàn)環(huán)境配置見表2。
表2 實(shí)驗(yàn)環(huán)境配置
文中所用的算法運(yùn)行環(huán)境是Keras,樣本訓(xùn)練共進(jìn)行12 000次迭代,以 10 000張蝴蝶生長(zhǎng)圖像為訓(xùn)練集,5 000張做測(cè)試集,其中批量大小設(shè)置為bactch=64,修改類別數(shù)目的值,本次實(shí)驗(yàn)檢測(cè)了4種類別,故class=4,修改輸出特征圖的數(shù)量 filter ,計(jì)算公式為
filter=(class+5)×3,
(3)
初始階段將學(xué)習(xí)率設(shè)置為lr=0.001,衰減值為0.000 5,在迭代次數(shù)為8 000次后,損失值Loss穩(wěn)定在0.381左右,迭代至10 000次停止。損失值Loss隨迭代次數(shù)變化,如圖3所示。
圖3 改進(jìn)后YOLO的Loss曲線
采用Precision(精確率)、Recall(召回率)和times(每張檢測(cè)時(shí)間)作為模型檢測(cè)好壞的評(píng)價(jià)標(biāo)準(zhǔn)。精確率是已識(shí)別為蝴蝶生長(zhǎng)發(fā)育過程的概率,召回率是能夠正確識(shí)別蝴蝶生長(zhǎng)發(fā)育過程的概率。
(4)
(5)
式中:TP----檢測(cè)模型將蝴蝶生長(zhǎng)過程檢測(cè)正確;
FP----檢測(cè)模型將蝴蝶生長(zhǎng)過程檢測(cè)錯(cuò)誤;
FN----檢測(cè)錯(cuò)誤的數(shù)量。
使用文中訓(xùn)練數(shù)據(jù)集,同時(shí)訓(xùn)練了Faster-RCNN、SSD、YOLOV3模型,測(cè)試集5 000幅圖片中有 2 000個(gè)里面含有檢測(cè)目標(biāo),不同算法測(cè)試對(duì)比見表3。
表3 不同算法測(cè)試對(duì)比
通過對(duì)比可以看到,在時(shí)間上,F(xiàn)aster-RCNN的檢測(cè)時(shí)間最慢,為2.560 s,SSD算法的檢測(cè)時(shí)間為0.189 s,原YOLOV3的檢測(cè)時(shí)間為0.039 s,文中算法的檢測(cè)時(shí)間為0.041 s,相比原YOLOV3的檢測(cè)時(shí)間慢了0.002 s,但比SSD和Faster-RCNN分別快了0.148 s和2.519 s,能夠滿足實(shí)時(shí)性要求。文中算法的精確率達(dá)到了95.4%,相比未改進(jìn)的YOLOV3提高了1.1%,比SSD提高了1.6%,比Faster-RCNN提高了0.1%;在召回率方面,F(xiàn)aster-RCNN的召回率為93.5%,SSD的召回率為92.7%,原YOLOV3的召回率為93.15%,文中改進(jìn)YOLOV3的召回率均比其他算法略高,在實(shí)際應(yīng)用中,能夠準(zhǔn)確實(shí)時(shí)檢測(cè)出蝴蝶的生長(zhǎng)過程,滿足要求。改進(jìn)算法測(cè)試結(jié)果如圖4所示。
圖4 改進(jìn)算法檢測(cè)結(jié)果
基于改進(jìn)的YOLOV3 目標(biāo)檢測(cè)算法實(shí)現(xiàn)了蝴蝶各生長(zhǎng)階段的實(shí)時(shí)檢測(cè)功能。實(shí)驗(yàn)結(jié)果表明,進(jìn)行改進(jìn)后的YOLOV3在蝴蝶生長(zhǎng)過程檢測(cè)中與原YOLOV3、Faster-RCNN、SSD相比較,精確率和召回率都有提高,檢測(cè)效果更好。在5 000張測(cè)試集圖片上進(jìn)行測(cè)試,達(dá)到95%以上的精確率。研究結(jié)果表明,使用改進(jìn)的YOLOV3對(duì)蝴蝶生長(zhǎng)過程檢測(cè)切實(shí)可行,能夠及時(shí)觀察蝴蝶的生長(zhǎng)階段,及時(shí)發(fā)現(xiàn)是否健康,是否面臨危險(xiǎn),提高蝴蝶成活率,為以后運(yùn)用到生物領(lǐng)域打下基礎(chǔ)。