高 星,劉劍飛,郝祿國,董琪琪
(1.河北工業(yè)大學電子信息工程學院,天津 300401;2.廣東工業(yè)大學信息工程學院,廣東 廣州 510006)
近年來,隨著當代經(jīng)濟和科學技術(shù)的快速發(fā)展,人工智能已經(jīng)成為了當今社會主要探討的話題,基于深度學習的目標檢測算法也逐漸成為了目前研究的重要領(lǐng)域。在傳統(tǒng)的目標檢測中,研究者們?yōu)榱诉x取圖像的候選區(qū)域,先通過不同尺寸的滑動窗口框住未檢測圖像的某一部分,再使用人工設(shè)計的特征完成特征提取,最后用支持向量機SVM(Support Vector Machine)[1]、DPM(Deformable Part Model)[2]等進行分類操作。由于檢測目標具有復(fù)雜多變的尺度,使得傳統(tǒng)目標檢測算法計算量變大,速度變慢,精確度也比較低。因此,針對目標檢測算法的研究主要有2個方面:(1)如何提高算法的檢測精度;(2)尋找在檢測速度上的優(yōu)化方法。
Figure 1 YOLOv3 structure圖1 YOLOv3 結(jié)構(gòu)圖
當前目標檢測算法可按照深度學習的方法分為2類:(1)以Fast R-CNN[3]、R-FCN[4]算法為代表的雙步(Two Stage)檢測方法;(2)以SSD(Single Shot Detector)[5]、YOLO(You Only Look Once)[6]算法為典型的單步(One Stage)檢測方法。兩者都是以卷積神經(jīng)網(wǎng)絡(luò)CNN(Convolutional Neural Network)[7]為核心架構(gòu),通過卷積層、池化層等基礎(chǔ)網(wǎng)絡(luò)進行區(qū)域特征的提取,再經(jīng)過一系列的分類過程,最后利用非極大值抑制NMS(Non-Maximum Suppression)算法[8]得到輸出結(jié)果。算法中引入了損失函數(shù)便于模型的訓練和檢測,還可以實時監(jiān)測以防止過擬合現(xiàn)象的產(chǎn)生。二者的不同點主要是:雙步檢測方法的準確度高,但實時性相對較差;單步檢測方法的準確度較前者稍低,但實時性很好,檢測速度也較快。
針對小目標檢測算法的研究主要集中在對SSD算法的改進方面,如DSSD(Deconvolutional SSD)[9]和FSSD(Feature-fused SSD)[10]。DSSD算法把基礎(chǔ)網(wǎng)絡(luò)VGG-16替換成了ResNet-101,同時利用反卷積將模型中的上下卷積層進行信息融合,雖然在一定程度上提升了檢測精度,但由于網(wǎng)絡(luò)層數(shù)比較深,檢測速度也比較慢。FSSD算法的基礎(chǔ)網(wǎng)絡(luò)仍選用VGG-16,但作者提出了2種在特定卷積層之間的融合模塊進行改進,既提升了小目標的檢測精度又保證了較快的檢測速度。
YOLO是一種單步目標檢測算法,其將目標檢測的過程看作是一種區(qū)域預(yù)測和目標識別的回歸問題,從真正意義上實現(xiàn)了端到端的檢測。YOLO算法檢測速度快,但在檢測精度上略顯不足,尤其是對小目標物體的識別性能明顯下降,雖然最新提出的 YOLOv3算法在小目標物體的檢測效果上有所提高,但仍不能完全排除漏檢現(xiàn)象。
針對小目標檢測上存在的問題,本文提出了一種基于YOLOv3算法的訓練集優(yōu)化和檢測方法,在小目標檢測精度和漏檢現(xiàn)象上都有較好的改善。本文的主要貢獻有2方面:(1)以聚類算法K-means[11]為基礎(chǔ),通過對標準數(shù)據(jù)集VOC2007+2012[12]和自建的舉手行為數(shù)據(jù)集做聚類分析,分別獲得2組適應(yīng)數(shù)據(jù)集的anchor大小后繼續(xù)訓練,使得到的訓練模型具有更好的檢測性能;(2)針對YOLOv3算法在深度卷積層提取到的特征信息較少問題,提出了一種圖層處理方法,進而增加了模型對小目標的檢測敏感度,提升了檢測效果。
YOLO算法發(fā)展至今已有3個版本,每1個新版本的出現(xiàn)都是在保證實時性的基礎(chǔ)上提高了檢測精度。YOLOv3[13]相比YOLOv1和YOLOv2[14],在網(wǎng)絡(luò)結(jié)構(gòu)和預(yù)測方式上都做了改進,在檢測精度和實時性上也有一定的突破。
圖1所示為YOLOv3算法的結(jié)構(gòu)原理,其基礎(chǔ)網(wǎng)絡(luò)是Darknet-53。相比于之前的YOLO版本,YOLOv3一方面去掉了所有的池化層和全連接層,另一方面引入了residual結(jié)構(gòu)。在Darknet-53網(wǎng)絡(luò)中,DBL(Darknetcon2D_BN_Leaky)代表YOLOv3的最小組件,由卷積層、BN(Batch Normalization)層和Leaky ReLU激活函數(shù)組成。Resn表示這個Res_block里含有n個Res_unit,是算法中的大組件。YOLOv3算法通過上采樣層與卷積層進行銜接,其中concat層代表了拼接過程,從而實現(xiàn)了以多尺度融合的方式來預(yù)測,產(chǎn)生了3個不同尺度的輸出特征層y1,y2和y3。YOLOv3設(shè)定每個網(wǎng)格單元上預(yù)測3個bounding boxes,每個box包含位置坐標(x,y,w,h)信息和置信度(confidence)信息,對于VOC數(shù)據(jù)集有20個種類,所以每個box都會對每類輸出1個類別概率,最終每個網(wǎng)格中輸出的參數(shù)量為3*(4+1+20)=75。bounding box的坐標預(yù)測延續(xù)了YOLOv2的預(yù)測方式,用式(1)表示如下:
(1)
其中,tx,ty,tw,th代表bounding boxes的位置預(yù)測值;cx,cy表示目標物體所在網(wǎng)格相對于整個圖像左上頂點的偏移量;pw,ph表示預(yù)測前bounding boxes的寬度和高度。
YOLOv3算法中,初始的anchor尺寸是通過聚類的方式得到的,在COCO數(shù)據(jù)集上通過聚類得到的9個anchor大小為(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116×90),(156×198),(373×326)。但是,這些anchor的尺寸只適用于COCO的80類數(shù)據(jù)集,且訓練圖像的輸入尺寸為416×416,不能用于自建的舉手行為數(shù)據(jù)集和VOC2007+2012數(shù)據(jù)集,需要進一步聚類得到訓練數(shù)據(jù)集初始的anchor大小。
由于YOLOv3算法具有很深的網(wǎng)絡(luò)結(jié)構(gòu),其中采用了多尺度的預(yù)測方式,隨著卷積層數(shù)的加深,提取到的特征信息會越來越少,這將導致算法對密集和復(fù)雜的小目標物體的檢測精度下降。為此,本文提出了一種基于YOLOv3算法的圖層處理檢測方法。
為了進一步解決YOLOv3對小目標物體檢測不敏感等問題,本節(jié)采用K-means算法對VOC 2007+2012和舉手行為數(shù)據(jù)集做聚類分析,以得到適應(yīng)訓練集初始anchor大小的2組聚類數(shù)據(jù);然后介紹一種圖層處理方法的具體過程,在一定程度上提升了算法的檢測效果。
在數(shù)據(jù)挖掘中,K-means算法是通過不斷地取離種子點最近的均值來對數(shù)據(jù)進行聚集的算法。對于1個給定數(shù)據(jù)點數(shù)為n的數(shù)據(jù)集X={x1,x2,…,xi,…,xn},其中xi∈Rd,R表示全部數(shù)據(jù)的集合,d表示數(shù)據(jù)的維數(shù)信息,K表示要生成的數(shù)據(jù)子集數(shù)量。
K-means算法將數(shù)據(jù)集中所有的數(shù)據(jù)聚集為K個劃分C={ck,k=1,2,3,…,K}。根據(jù)K值的大小即獲得K個聚類ck,每個聚類有1個特定的類別中心μi。通過歐氏距離計算方式得出每1類中各數(shù)據(jù)點到聚類中心μi的距離平方和:
(2)
聚類分析的目的是使各類的總距離平方和最小,即:
(3)
根據(jù)最小二乘法法則和拉格朗日相關(guān)定理可知,聚類中心μi應(yīng)該選取每1類中所有數(shù)據(jù)點的平均值。
K-means算法通過預(yù)先選擇K值來確定劃分為多少個類,即獲得K個聚類中心,對于數(shù)據(jù)集中的全部數(shù)據(jù),根據(jù)其與聚類中心的最小歐氏距離來確定所屬的類別,經(jīng)過反復(fù)迭代,使各類所包含的數(shù)據(jù)點到其聚類中心的總距離平方和最小。
YOLOv3算法在COCO數(shù)據(jù)集上進行聚類分析時選取K值為9,進一步得出了anchor的大小。通過K-means算法對VOC2007+2012和舉手行為數(shù)據(jù)集做聚類分析時仍選擇K=9,分別得到了2組適應(yīng)訓練過程的聚類結(jié)果,如圖2所示。由于訓練環(huán)境是在Tensorflow框架下,所以anchor的大小(width×height)是歸一化的結(jié)果。圖2中N代表了聚類中心范圍內(nèi)的數(shù)據(jù)個數(shù)。
Figure 2 Clustering results on VOC2007+2012 and behavioral datasets圖2 VOC2007+2012和舉手行為數(shù)據(jù)集聚類結(jié)果
由圖2a可見,VOC2007+2012數(shù)據(jù)集種類多,數(shù)據(jù)量大,得到的聚類結(jié)果比較密集,其中c0,c1,c2,…,c8表示9個聚類中心的數(shù)值,具體數(shù)據(jù)為:(0.052,0.088),(0.074,0.211),(0.146,0.136),(0.146,0.349),(0.316,0.276),(0.252,0.553),(0.650,0.450),(0.440,0.747),(0.853,0.862),IoU(Intersection over Union)表示box和K個聚類之間的聯(lián)合交叉,其值為0.69。
由圖2b可見,舉手行為數(shù)據(jù)集種類單一,數(shù)據(jù)量少,得到的聚類結(jié)果相對稀疏,具體數(shù)據(jù)為:(0.061,0.074),(0.052,0.104),(0.064,0.149),(0.082,0.120),(0.078,0.165),(0.121,0.157),(0.100,0.207),(0.123,0.239),(0.114,0.329),IoU的值為0.84。
通過聚類算法得出的2組數(shù)據(jù)分別對應(yīng)訓練過程中預(yù)先設(shè)定的anchor大小。在檢測時,9個anchor會被3個尺度不同的輸出層平分,根據(jù)大、中、小3種尺度獲取自己相應(yīng)的anchor尺寸,來進一步預(yù)測不同大小的目標物體。
圖層處理方法是基于YOLOv3網(wǎng)絡(luò)進行目標檢測過程中提出的一種改進方法。YOLOv3算法在小目標物體的識別上敏感程度較低,深度卷積層提取到的特征信息較少,導致小目標映射到預(yù)測區(qū)域不能被區(qū)分而發(fā)生漏檢現(xiàn)象。圖層處理的目的在于提高算法對小目標物體的檢測敏感度,圖3是圖層處理的流程。此過程主要包含圖層處理模塊和融合模塊2部分。
Figure 3 Flow chart of layer processing圖3 圖層處理流程
圖層處理模塊的主要操作是區(qū)域劃分和有效目標圖層提取,圖4給出了1個圖層處理模塊操作示例。
Figure 4 An example of layer processing module operation圖4 圖層處理模塊操作示例
區(qū)域劃分根據(jù)輸入圖像的大小,將整個圖像按規(guī)則分為N個區(qū)域,以N=4為例,將圖像等大小劃分為1,2,3,4個矩形區(qū)域,如圖5所示。若整幅圖像的中心區(qū)域有被折斷的目標時,可增加第5個區(qū)域,具體為取每個矩形靠近中心位置2條邊的中點,依次連接組成1個菱形區(qū)域,和4個矩形一起作為檢測樣本的圖像區(qū)域,若菱形區(qū)域內(nèi)無明顯目標則可不執(zhí)行此操作。區(qū)域劃分的目的在于將整個圖像中的小目標物體細致地劃分為多個待檢測的子區(qū)域,如圖4中對應(yīng)的區(qū)域a,b,c,d,這便于后續(xù)對每個子區(qū)域進行放大操作,再結(jié)合有效目標圖層提取步驟,使局部區(qū)域圖像的檢測更加合理。
Figure 5 Schematic diagram of area division圖5 區(qū)域劃分示意圖
有效目標圖層提取是區(qū)域劃分步驟的銜接部分,在提取圖層之前先將以上4個區(qū)域放大至原來的2~4倍,目的是增加原圖像中bounding boxes對小目標的敏感程度,使其更容易被檢測區(qū)分。再對每個區(qū)域圖像進行2次有效目標的圖層提取,具體操作見圖4中區(qū)域c的處理過程。
區(qū)域劃分和有效目標圖層提取的結(jié)合,大大增加了預(yù)測框?qū)π∧繕宋矬w的敏感度,相比做單獨區(qū)域劃分或圖層提取的效果更好,解決了較高卷積層上感受野小的問題,使檢測過程中提取的有效信息更多、更準確。
經(jīng)圖層處理模塊得到的8幅局部圖像,可輸入到網(wǎng)絡(luò)中進行檢測。由于檢測完成后的局部圖像是完全獨立的,并且在檢測結(jié)果中可能出現(xiàn)被切割的現(xiàn)象,為了進一步得到與原圖等大的完整檢測圖,可參照毗鄰邊界線[15]的評判標準在融合模塊中進行處理。
本文在Tensorflow框架下實現(xiàn)了聚類算法分析和訓練驗證。硬件服務(wù)器設(shè)備包括:型號為Intel Xeon E5-2678 v3的CPU、RAM 32 GB和型號為GTX 1080Ti的獨立顯卡,操作系統(tǒng)為Linux下的Ubuntu16.04。
實驗數(shù)據(jù)集有2個:(1)標準數(shù)據(jù)集VOC2007+2012,由于數(shù)據(jù)集比較大,訓練階段初期的學習率為0.005,當?shù)螖?shù)達到50 000時降低為原來的1/10,batch size設(shè)置為16;(2)自建的舉手行為數(shù)據(jù)集,由于數(shù)據(jù)量較小,初始的學習率為0.01,迭代次數(shù)達到50 000時降低為原來的1/10,batch size設(shè)置為8。
對于舉手行為數(shù)據(jù)集的標注選擇Yolo_mark。常用數(shù)據(jù)集標注軟件包括labelImg、Vatic和Sloth等,而Yolo_mark是一種適用于YOLOv3算法訓練的數(shù)據(jù)集標注軟件。其不同之處在于常用數(shù)據(jù)集標注軟件將數(shù)據(jù)信息保存為xml格式的文件,Yolo_mark則會保存為一種適合于YOLO算法訓練的文件格式,這樣大大減少了訓練文件之間的轉(zhuǎn)換過程,避免了不必要的錯誤出現(xiàn)。
通過K-means算法的聚類分析,計算出適應(yīng)數(shù)據(jù)集訓練的anchor尺寸,分別在VOC2007+2012和舉手行為數(shù)據(jù)集上迭代80 000次進行訓練。訓練結(jié)果在VOC2007驗證集上的平均準確度mAP提高了1.4%,舉手行為數(shù)據(jù)集的平均準確度達到了73.04%。表1是VOC2007+2012數(shù)據(jù)集的檢測準確度,表2是聚類分析后YOLOv3算法和其他算法在VOC2007+2012數(shù)據(jù)集上的性能對比。
Table 1 VOC2007+2012 dataset detection accuracy 表1 VOC2007+2012數(shù)據(jù)集檢測準確度
Table 2 Performance comparison amongvarious detection algorithms表2 多種檢測算法的性能對比
圖6為訓練過程中mAP和迭代次數(shù)的關(guān)系。由圖6可知,在迭代過程中基于聚類分析后的VOC2007+2012和舉手行為數(shù)據(jù)集的mAP均高于未進行聚類分析的mAP。通過圖層處理之后,基于適應(yīng)anchor尺寸的訓練模型對于小目標的檢測效果提升很大,同時對小目標的漏檢現(xiàn)象也有所改善。檢測效果如圖7所示,其中圖7a是VOC2007+2012數(shù)據(jù)集上的檢測效果對比,圖7b是舉手行為數(shù)據(jù)集上的檢測效果對比,上下行分別代表原YOLOv3算法檢測效果和經(jīng)聚類分析及圖層處理后的檢測效果。
Figure 6 Relationship between average accuracy (mAP) and number of iterations圖6 平均準確度(mAP)和迭代次數(shù)的關(guān)系
本文對YOLOv3算法的訓練過程和檢測方法進行了研究,針對算法對復(fù)雜小目標檢測精度低的問題,提出了一種訓練集優(yōu)化和圖層處理的檢測方法。本文方法采用K-means對訓練數(shù)據(jù)集做聚類分析,同時設(shè)計了一種基于YOLOv3的圖層處理檢測方法,通過增加深度卷積層提取到的特征信息量,在一定程度上提高了算法對小目標物體的檢測精度,從而使單步目標檢測算法有了實質(zhì)性改善。雖然結(jié)合K-means聚類分析和圖層處理后的YOLOv3算法提高了檢測效果,但在訓練階段的召回率還是比較低,所以對于YOLOv3算法在小目標物體的檢測上仍需進一步深入研究。
Figure 7 Test effect圖7 檢測效果圖