魏宏彬, 張端金, 杜廣明, 肖文福
(鄭州大學(xué) 信息工程學(xué)院, 河南 鄭州 450001)
目前,目標(biāo)檢測主要包括傳統(tǒng)目標(biāo)檢測技術(shù)和深度學(xué)習(xí)目標(biāo)檢測技術(shù)。傳統(tǒng)的識(shí)別技術(shù)主要利用滑動(dòng)窗口實(shí)現(xiàn)圖片內(nèi)目標(biāo)的搜索,然后通過HOG(histogram of oriented gradient)或者SIFT(scale-invariant feature transform)手工設(shè)計(jì)特征輸入到SVM[1]內(nèi)進(jìn)行識(shí)別。多尺度形變部件模型(DPM)[2]的提出實(shí)現(xiàn)了目標(biāo)檢測。但傳統(tǒng)的檢測方法不僅檢測精度較低,而且魯棒性較差。
Girshick等[3]采用候選區(qū)域和卷積神經(jīng)網(wǎng)絡(luò)結(jié)合的目標(biāo)檢測方法取代了傳統(tǒng)方法。目前,基于深度卷積神經(jīng)網(wǎng)絡(luò)經(jīng)典的目標(biāo)檢測算法主要有兩大類。一類是兩階段目標(biāo)檢測方法,例如Faster RCNN[4]、R-FCN[5]和FPN[6]。該類算法第一階段對(duì)前景和背景進(jìn)行分類以及邊界框回歸,第二階段利用第一階段的輸出再進(jìn)一步地分類和邊界框回歸。另一類是一階段目標(biāo)檢測算法,例如YOLO系列算法[7-9]和SSD算法[10]。與兩階段算法相比,該類算法利用深度卷積神經(jīng)網(wǎng)絡(luò)提取的特征直接對(duì)目標(biāo)進(jìn)行識(shí)別和定位,滿足了實(shí)時(shí)性的要求,但識(shí)別精度較低。在實(shí)際應(yīng)用中,目標(biāo)檢測既要保證精度又要滿足實(shí)時(shí)性的要求,所以一階段目標(biāo)檢測算法使用范圍較廣。其中YOLOv3算法[9]在一階段目標(biāo)算法中檢測效果最佳,在COCO數(shù)據(jù)集上 51 ms內(nèi)mAP為57.9%。
為提高超市的運(yùn)行效率,使稱重設(shè)備能夠自動(dòng)檢測蔬菜的種類,從而快速地為散裝蔬菜稱重打碼,筆者采用高清攝像機(jī)和網(wǎng)絡(luò)爬蟲技術(shù)收集蔬菜數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行篩選和標(biāo)注,制作成用于檢測的蔬菜數(shù)據(jù)集。為保證能實(shí)時(shí)地檢測蔬菜目標(biāo),筆者以YOLOv3算法為基礎(chǔ)模型。由于YOLOv3算法是針對(duì)COCO數(shù)據(jù)集的優(yōu)化,為適應(yīng)新的數(shù)據(jù)集,筆者提出了改進(jìn)型YOLOv3算法。首先,通過K-means算法[11]分析獲得適應(yīng)于蔬菜數(shù)據(jù)的15組先驗(yàn)框;其次,采用一種新的邊界框回歸損失函數(shù)DIoU來提高檢測性能;最后,因蔬菜數(shù)據(jù)集中的大目標(biāo)較多,因此通過增強(qiáng)特征提取網(wǎng)絡(luò),獲取5組不同尺度的特征構(gòu)成特征金字塔,從而實(shí)現(xiàn)蔬菜檢測任務(wù)。經(jīng)實(shí)驗(yàn)驗(yàn)證,改進(jìn)型YOLOv3算法對(duì)蔬菜數(shù)據(jù)具有較好的檢測性能。
YOLOv3算法性能得到提升的主要原因?yàn)樘卣魈崛【W(wǎng)絡(luò)的增強(qiáng)。與YOLOv2[8]的DarkNet-19網(wǎng)絡(luò)相比,YOLOv3借鑒了ResNet[12]的殘差結(jié)構(gòu),構(gòu)造出更深的DarkNet-53網(wǎng)絡(luò)。DarkNet-53特征提取網(wǎng)絡(luò)由3×3和1×1卷積層構(gòu)成,采用5個(gè)步長為2的3×3卷積層替換最大池化層(max pooling)實(shí)現(xiàn)下采樣。該網(wǎng)絡(luò)在ImageNet數(shù)據(jù)集測試,網(wǎng)絡(luò)性能比ResNet網(wǎng)絡(luò)更加有效,結(jié)果如表1[9]。表中,pTop-1和pTop-5分別是模型進(jìn)行圖片識(shí)別時(shí)得到前1個(gè)結(jié)果和前5個(gè)結(jié)果中有1個(gè)是正確的概率;計(jì)算量表示浮點(diǎn)運(yùn)算的次數(shù);運(yùn)算速度是每秒多少次浮點(diǎn)運(yùn)算;幀速率為每秒刷新圖片的幀數(shù)。
表1 特征提取網(wǎng)絡(luò)Table 1 Feature extraction network
由表1可知,DarkNet-53網(wǎng)絡(luò)的速度約是ResNet-101網(wǎng)絡(luò)的1.5倍,并且與ResNet-152網(wǎng)絡(luò)性能幾乎一樣;同時(shí),幀速率提高至78 f·s-1。因此DarkNet-53在滿足檢測實(shí)時(shí)性的同時(shí)比DarkNet-19具有更高的準(zhǔn)確率。
FPN算法通過高低層特征融合的方式增強(qiáng)低層特征的語義信息,從而提高小目標(biāo)的檢測準(zhǔn)確率[6]。YOLOv3采用了類似的方法,利用特征金字塔預(yù)測不同尺度的目標(biāo);同時(shí),YOLOv3將Softmax[13]替換為多個(gè)獨(dú)立邏輯分類器,使用二元交叉熵?fù)p失函數(shù)進(jìn)行類別預(yù)測。因此,YOLOv3與其他主流檢測網(wǎng)絡(luò)相比,無論在速度還是檢測準(zhǔn)確率上,均表現(xiàn)出優(yōu)異的檢測性能。
相比于其他檢測網(wǎng)絡(luò),YOLOv3具有速度快、精確度高等優(yōu)點(diǎn)。對(duì)于蔬菜數(shù)據(jù)集,因數(shù)據(jù)之間的差異需重新設(shè)計(jì)特征提取網(wǎng)絡(luò)。筆者受DenseNet[14]啟發(fā),將DenseBlock結(jié)構(gòu)[14]添加到DarkNet-53網(wǎng)絡(luò)中,提高了檢測大目標(biāo)的性能。此外,筆者還提出一種新的邊界框回歸損失函數(shù)DIoU,DIoU與YOLOv3的邊界框回歸損失函數(shù)MSE相比,定位精度更高。
若在YOLOv3算法中輸入的圖片尺寸為512×512,經(jīng)過下采樣32倍后輸出特征圖的尺寸是16×16。根據(jù)FPN可知,原圖片被下采樣了64倍,這對(duì)于提高大目標(biāo)的檢測精度起到一定的作用。針對(duì)YOLOv3算法存在的特征圖尺寸偏大、感受野偏小、預(yù)測不準(zhǔn)確等問題,筆者在DarkNet-53的基礎(chǔ)上加入2個(gè)DenseBlock來構(gòu)造深度卷積神經(jīng)網(wǎng)絡(luò)以提高檢測精度。單個(gè)DenseBlock結(jié)構(gòu)如圖1所示。
圖1 DenseBlock 結(jié)構(gòu)Figure 1 DenseBlock structure
圖1中X0是輸入特征,第n層的輸入不但與第n-1層的輸出特征有關(guān),而且也與之前所有卷積層的輸出有關(guān),其定義的公式如下:
Xn=Yn([X0,X1,…Xn-1]),
(1)
式中: []表示將第0層的輸出X0到第n-1層輸出Xn-1進(jìn)行通道拼接后作為第n層的輸入;非線性變換Yn表示將第n層輸入經(jīng)過批量歸一化、ReLU激活函數(shù)和卷積層之后得到輸出特征Xn。DenseBlock內(nèi)每個(gè)卷積層由1×1和3×3卷積構(gòu)成。1×1卷積主要是為了減少特征通道的數(shù)量、降低計(jì)算量以及融合特征各通道之間的信息。此外,1×1卷積核的數(shù)量是4×k,k表示3×3卷積核的數(shù)量,稱為增長率,在文中設(shè)置k=48。
在DarkNet-53網(wǎng)絡(luò)的后面添加2個(gè)Dense-Block結(jié)構(gòu)達(dá)到加深網(wǎng)絡(luò)的目的。而不使用殘差單元的主要原因?yàn)椋簹埐顔卧啾扔贒enseBlock而言參數(shù)量較高。例如,若輸入的特征通道數(shù)是2 048個(gè),殘差單元1×1和3×3的卷積核的數(shù)量分別是1 024個(gè)和2 048個(gè);而DenseBlock結(jié)構(gòu)中1×1和3×3的卷積核的數(shù)量分別是192個(gè)和48個(gè)。此外,根據(jù)DSOD[15]網(wǎng)絡(luò)結(jié)構(gòu)可知,在沒有預(yù)訓(xùn)練的前提下DenseBlock結(jié)構(gòu)更易于訓(xùn)練,這主要源于該結(jié)構(gòu)密集連接的方式。 改進(jìn)型YOLOv3特征提取網(wǎng)絡(luò)詳細(xì)結(jié)構(gòu)如圖2所示。
圖2 改進(jìn)的特征提取網(wǎng)絡(luò)結(jié)構(gòu)Figure 2 Improved feature extraction network structure
圖2中每個(gè)DenseBlock采用4組1×1和3×3卷積構(gòu)成,每組的輸入均由前面所有組的輸出經(jīng)過通道拼接獲得。若輸入圖片是512×512像素,則由殘差單元和DenseBlock輸出的且用于檢測的特征圖尺寸分別是64×64、32×32、16×16、8×8和4×4。為增強(qiáng)每個(gè)特征圖的上下文語義信息,提高特征的表達(dá)能力,改進(jìn)型YOLOv3利用以上5組特征通過最近鄰插值法上采樣來構(gòu)造特征金字塔,從而共享高低層特征信息,進(jìn)行目標(biāo)檢測。
目標(biāo)檢測、目標(biāo)跟蹤以及圖像分割都需要依靠精確的邊界框回歸,現(xiàn)有的網(wǎng)絡(luò)大多采用L1和L2范數(shù)作為邊界框回歸損失函數(shù),卻忽略了真實(shí)框和預(yù)測框之間的交并比IoU在邊界框回歸中的重要性,IoU定義如下。
(2)
式中:P是目標(biāo)的預(yù)測框;G是目標(biāo)的真實(shí)框;IoU是真實(shí)框和預(yù)測框面積之間的交并比。
在目標(biāo)檢測中IoU是比較預(yù)測框與真實(shí)框之間最常用的度量標(biāo)準(zhǔn),是評(píng)價(jià)網(wǎng)絡(luò)性能的重要指標(biāo)。通過證明可知,采用L1和L2范數(shù)作為邊界框回歸損失函數(shù)與改善IoU值沒有較強(qiáng)的關(guān)聯(lián),如圖3所示。圖3中L2范數(shù)均相等,但I(xiàn)oU值卻不同,可以直觀地感受到第3個(gè)預(yù)測框最好,因此采用L1、L2范數(shù)作為邊界框回歸損失函數(shù)并不能較好地優(yōu)化網(wǎng)絡(luò)。
圖3 L2范數(shù)相同IoU不同F(xiàn)igure 3 L2 norm is the same and IoU is diff erent
圖4 真實(shí)框與預(yù)測框之間關(guān)系Figure 4 The relation between ground truth box and predicted box
針對(duì)以上問題,可以很自然地想到將IoU作為邊界框回歸損失函數(shù)對(duì)優(yōu)化網(wǎng)絡(luò)的性能十分重要。但將IoU直接作為邊界框損失函數(shù)會(huì)存在一些問題。如圖4所示,黑色框是預(yù)測框,紅色虛線框是真實(shí)框。當(dāng)預(yù)測框與真實(shí)框不重合時(shí),則IoU的值為0,導(dǎo)致無法優(yōu)化網(wǎng)絡(luò),使得網(wǎng)絡(luò)性能較差。
為了在邊界框回歸損失函數(shù)中利用IoU,如公式(3)所示,將FIoU作為邊界框回歸損失函數(shù),它表示預(yù)測框和真實(shí)框之間的偏差。
FIoU=1-IoU,
(3)
式中:FIoU的取值范圍(0,1]。當(dāng)IoU=0時(shí),F(xiàn)IoU一直為1,則無法反映預(yù)測框與真實(shí)框之間的距離關(guān)系,如圖4中的(b)和(c)兩種情況。
為了體現(xiàn)不相交兩個(gè)框之間距離關(guān)系,受YOLOv1[7]損失函數(shù)啟發(fā),筆者利用真實(shí)框和預(yù)測框之間中心點(diǎn)距離D解決此問題,如式(4)所示:
D=(x-x′)2+(y-y′)2,
(4)
式中:(x,y) 是真實(shí)框的中心坐標(biāo);(x′,y′)是預(yù)測框的中心坐標(biāo);其值均是相對(duì)整張圖片的坐標(biāo)位置,取值范圍(0,1)。筆者提出最終的邊界框回歸損失函數(shù)DIoU,如式(5)所示:
DIoU=λD+FIoU,
(5)
DIoU是由式(3)和式(4)的結(jié)合,式中λ是為了平衡兩個(gè)損失函數(shù)值之間的差距,取λ=10。
由于目前沒有公開的蔬菜數(shù)據(jù)集,因此需要自己采集數(shù)據(jù)。蔬菜數(shù)據(jù)的來源主要是采用高清攝像機(jī)拍攝和爬蟲技術(shù)獲取。拍攝的數(shù)據(jù)占主要部分,爬蟲技術(shù)獲取的數(shù)據(jù)為次要部分。蔬菜數(shù)據(jù)集目前有20類,均為超市常見的蔬菜種類,總共7 632張圖片,圖片內(nèi)的蔬菜類別為隨機(jī)拍攝,如圖5所示。
圖5 蔬菜數(shù)據(jù)集Figure 5 Vegetable dataset
數(shù)據(jù)集的類別分別是上海青、白菜、蘿卜、黃瓜、西紅柿、茄子、土豆、香菇、杏鮑菇、西葫蘆、山藥、洋蔥、辣椒、西蘭花、胡蘿卜、萵筍、紅薯、包菜、苦瓜和豆角等。筆者對(duì)蔬菜數(shù)據(jù)集內(nèi)的目標(biāo)進(jìn)行統(tǒng)計(jì)分析得到總目標(biāo)數(shù)是22 493個(gè),表2是VOC2007數(shù)據(jù)集和蔬菜數(shù)據(jù)集分別在某個(gè)像素范圍內(nèi)的目標(biāo)占總目標(biāo)的比重。
表2 目標(biāo)像素大小分布Table 2 Object pixel size distribution
通過表2可知,蔬菜數(shù)據(jù)集的小目標(biāo)相對(duì)較少,而大目標(biāo)占據(jù)了較大的比重。因YOLOv3是針對(duì)VOC數(shù)據(jù)集和COCO數(shù)據(jù)集進(jìn)行優(yōu)化,對(duì)于蔬菜數(shù)據(jù)集無法獲得較好的性能,因此筆者提出了改進(jìn)型YOLOv3目標(biāo)檢測算法,使其適應(yīng)于蔬菜數(shù)據(jù)集。
實(shí)驗(yàn)的蔬菜數(shù)據(jù)集共有7 632張圖片,其中1 232張是測試集,6 400張是訓(xùn)練集,在顯卡NVIDIA TITAN V上運(yùn)行。改進(jìn)型YOLOv3算法輸入圖片像素尺寸設(shè)置為512×512,對(duì)5組不同尺度的特征上采樣構(gòu)成特征金字塔,預(yù)測蔬菜目標(biāo)的位置和種類。YOLOv3的9組先驗(yàn)框是基于COCO數(shù)據(jù)集產(chǎn)生的,蔬菜數(shù)據(jù)集的目標(biāo)尺度普遍偏大,因此原始的9組先驗(yàn)框已不適應(yīng)蔬菜數(shù)據(jù)集。
為獲得合適的先驗(yàn)框,筆者采用了K-means算法對(duì)蔬菜數(shù)據(jù)進(jìn)行聚類分析,獲取的15組先驗(yàn)框依次是(88,88)、(115,121)、(150,142)、(128,200)、(310,100)、(107,297)、(194,170)、(99,432)、(176,262)、(235,220)、(380,152)、(152,390)、(314,260)、(235,354)和(396,394)。再分別將15組先驗(yàn)框均分到5組不同尺度的特征金字塔上。小尺寸的先驗(yàn)框在高分辨率特征圖上用于檢測小目標(biāo);大尺寸的先驗(yàn)框在低分辨率特征圖上用于檢測大目標(biāo)。
訓(xùn)練時(shí),改進(jìn)型YOLOv3算法進(jìn)行50 000次迭代,其中momentum與weight decay分別配置為0.9與0.000 5,批 (batch size)設(shè)置為8,初始學(xué)習(xí)率為0.000 1,迭代次數(shù)為30 000和40 000時(shí),學(xué)習(xí)率分別降至0.000 1、0.000 001。利用改進(jìn)型YOLOv3算法對(duì)蔬菜數(shù)據(jù)進(jìn)行目標(biāo)檢測的結(jié)果如圖6所示。
圖6 檢測結(jié)果Figure 6 Detection results
在目標(biāo)檢測算法中,邊界框回歸損失函數(shù)作為衡量預(yù)測框與真實(shí)框之間的誤差,其對(duì)目標(biāo)定位效果起到重要作用。為驗(yàn)證FIoU和DIoU對(duì)YOLOv3算法的影響,筆者將YOLOv3的邊界框回歸損失函數(shù)MSE分別替換為式(3)和式(5)的FIoU和DIoU。 3種損失函數(shù)對(duì)YOLOv3算法影響如表3所示。
表3 邊界框回歸損失函數(shù)Table 3 Bounding box regression loss function
由表3可知,采用邊界框回歸損失函數(shù)FIoU訓(xùn)練YOLOv3,與MSE相比mAP提升1.1%,從而可知將IoU考慮進(jìn)邊界框回歸損失函數(shù)對(duì)網(wǎng)絡(luò)性能的提升具有重要作用。此外,YOLOv3采用DIoU邊界框回歸損失函數(shù)與FIoU相比,mAP提升0.4%,因此在考慮IoU的同時(shí),引入預(yù)測框與真實(shí)框之間的中心點(diǎn)距離可以更好地優(yōu)化YOLOv3算法。
圖7是YOLOv3采用不同邊界框回歸損失函數(shù)訓(xùn)練時(shí)每輪的網(wǎng)絡(luò)對(duì)測試集的檢測結(jié)果。由此可知,與另外兩種損失函數(shù)相比,DIoU可以更快地提升網(wǎng)絡(luò)的性能。 不同邊界框回歸損失函數(shù)對(duì)蔬菜的檢測效果如圖8所示,其中紅色框是目標(biāo)真實(shí)框。由圖8可知,以IoU為基礎(chǔ)的FIoU和DIoU方法對(duì)目標(biāo)的定位精度基本相同,而MSE方法的定位精度稍差。
圖7 不同邊界框回歸損失函數(shù)對(duì)網(wǎng)絡(luò)的影響Figure 7 Effect of regression loss functions of different bounding box on network
圖8 不同損失函數(shù)檢測結(jié)果Figure 8 Detection results of different loss functions
原YOLOv3算法對(duì)蔬菜數(shù)據(jù)集的檢測結(jié)果如圖9所示。 由圖9可知,YOLOv3在檢測蔬菜時(shí)存在一些問題,如 圖9(a)和(c)中山藥和黃瓜出現(xiàn)漏檢,圖9(b)中將香菇錯(cuò)誤檢測為土豆,以及圖9(d)中同一個(gè)目標(biāo)被多個(gè)框標(biāo)記。
改進(jìn)型YOLOv3算法輸入圖片的像素尺寸設(shè)置為512×512,從而獲得5組特征圖,其像素尺寸分別是64×64、32×32、16×16、8×8和4×4,再將5組特征圖上采樣構(gòu)成特征金字塔進(jìn)行目標(biāo)檢測。改進(jìn)型YOLOv3算法采用多尺度特征金字塔之后在蔬菜數(shù)集上的檢測性能如表4所示。 由4組、5組特征構(gòu)成特征金字塔的YOLOv3-1、YOLOv3-2的mAP依次是92.6%、93.2%,與YOLOv3算法相比分別提升1.3%和1.9%。 而YOLOv3-2算法提升較大的原因是新的先驗(yàn)框、圖片尺寸的增大以及更深的網(wǎng)絡(luò)。
雖然YOLOv3-2檢測速度與YOLOv3相比有一定的下降,但是YOLOv3-2算法利用5組不同尺度特征構(gòu)成的特征金字塔進(jìn)行目標(biāo)檢測時(shí)仍能滿足實(shí)時(shí)性要求,并且檢測精度更高。改進(jìn)型YOLOv3算法在蔬菜數(shù)據(jù)集上的檢測結(jié)果如圖10所示。從圖10可以直觀地看到,增強(qiáng)特征提取網(wǎng)絡(luò)可以較好地解決漏檢、錯(cuò)檢和重復(fù)檢測等問題。
表4 改進(jìn)型YOLOv3對(duì)蔬菜數(shù)據(jù)集的檢測結(jié)果Table 4 Detection results of improved YOLOv3 on vegetable dataset
圖10 改進(jìn)型YOLOv3檢測結(jié)果Figure 10 Improved YOLOv3 detection results
筆者使用蔬菜測試集分別在Faster RCNN、SSD、YOLOv3和改進(jìn)型YOLOv3進(jìn)行測試。由表5可知,改進(jìn)型YOLOv3比原YOLOv3的mAP提高了3.4%,雖然檢測速度有所降低,但仍能滿足實(shí)時(shí)性要求。同時(shí),改進(jìn)型YOLOv3算法的mAP比SSD和Faster RCNN分別高出6.8%和5.4%,說明改進(jìn)型YOLOv3算法對(duì)蔬菜數(shù)據(jù)更有效。
表5 不同方法在蔬菜數(shù)據(jù)集上的性能對(duì)比Table 5 Performance comparison of different methods on vegetable dataset
筆者針對(duì)蔬菜數(shù)據(jù)集設(shè)計(jì)了改進(jìn)型YOLOv3的特征提取網(wǎng)絡(luò),并且采用一種新的邊界框回歸損失函數(shù)DIoU來提高精度。首先,改進(jìn)型YOLOv3算法將DenseBlock和DarkNet-53相結(jié)合,獲取具有更高語義信息的5組特征,進(jìn)而構(gòu)成特征金字塔,這在一定程度上解決了漏檢、錯(cuò)檢以及重復(fù)檢測等問題。其次,通過K-means聚類分析得到適應(yīng)于蔬菜數(shù)據(jù)集的先驗(yàn)框;同時(shí),DIoU邊界框回歸損失函數(shù)增強(qiáng)了目標(biāo)定位精度。改進(jìn)型YOLOv3算法在蔬菜數(shù)據(jù)集上的mAP達(dá)到93.2%,并獲得35 f·s-1的檢測速度。在后續(xù)的工作中,將收集更多種類的蔬菜數(shù)據(jù),并且利用改進(jìn)型YOLOv3算法和硬件結(jié)合實(shí)現(xiàn)電子秤智能化,解決散裝蔬菜稱重問題,提高超市的運(yùn)行效率。