張 震 李孟洲 李浩方 馬軍強(qiáng)
(鄭州大學(xué)電氣工程學(xué)院 河南 鄭州 450001)
隨著互聯(lián)網(wǎng)儲(chǔ)存大量的數(shù)據(jù),計(jì)算機(jī)擁有強(qiáng)大的運(yùn)算能力以及國(guó)內(nèi)外在深度學(xué)習(xí)取得多方面的突破,目標(biāo)檢測(cè)也應(yīng)運(yùn)而生。Girshick等[1]在2014年提出R-CNN促使深度學(xué)習(xí)在目標(biāo)檢測(cè)領(lǐng)域飛速發(fā)展,緊接著SPP-Net(Spatial Pyramid Pooling Networks)、Fast-R-CNN[2]、Faster-R-CNN[3]、YOLO[4-5]、YOLO2、SSD[6]、DSSD[7]等也進(jìn)一步促進(jìn)了目標(biāo)檢測(cè)的發(fā)展。目前,目標(biāo)檢測(cè)已應(yīng)用于多個(gè)領(lǐng)域,也成為當(dāng)前的研究熱點(diǎn)。
近年來(lái),深度學(xué)習(xí)在目標(biāo)檢測(cè)衍生出來(lái)的主流算法大致分為兩類。一類是基于R-CNN展開的各種算法,主要包括Fast-R-CNN、Faster-R-CNN、Mask-R-CNN、RFCN[8];另一類則為YOLO、YOLO2、SSD等。其中第一類會(huì)先進(jìn)行區(qū)域選取(region proposals),再對(duì)所選區(qū)域進(jìn)行分類(classification)。第二類則是直接將產(chǎn)生的proposal同時(shí)進(jìn)行了regression+classification。因此,第二類相比于第一類在速度方面更占優(yōu)勢(shì),但是精確度(Precision)和召回率(Recall)皆有所下降。
Fast-R-CNN是在SPP-Net基礎(chǔ)上進(jìn)行了改進(jìn),并將它嫁接到VGG16上所形成的網(wǎng)絡(luò),將SPP改成RoI Layer pooling層,通過(guò)Softmax Classifer和Bounding-Box Regressors聯(lián)合訓(xùn)練的方式來(lái)更新所有參數(shù),實(shí)現(xiàn)了整個(gè)網(wǎng)絡(luò)端到端的訓(xùn)練;Faster-R-CNN與Fast-R-CNN最大的區(qū)別是融合了一種新的網(wǎng)絡(luò)RPN(Region Proposal Network)來(lái)替代之前的search selective;Mask-R-CNN主要是對(duì)Faster-R-CNN的輸出進(jìn)行了改進(jìn),增添了一個(gè)新的輸出object mask;RFCN與Faster-R-CNN的網(wǎng)絡(luò)結(jié)構(gòu)不同之處在于不再以VGG16作為基礎(chǔ)網(wǎng)絡(luò),而以ResNet為基礎(chǔ)網(wǎng)絡(luò)。YOLO使用了全新的訓(xùn)練方式篩選候選框—采用整圖的方式來(lái)訓(xùn)練模型,并且可以一次性預(yù)測(cè)多個(gè)Box的類別和位置;YOLO2在YOLO的基礎(chǔ)上去掉了網(wǎng)絡(luò)與類別的預(yù)測(cè)綁定在一起,也使用了anchor box模式,更多地使用了卷積來(lái)代替全連接網(wǎng)絡(luò),并增加了BN算法,同時(shí)提升了網(wǎng)絡(luò)的入口分辨率,去掉最后的池化層,保證有更好的分辨率;SSD則是在YOLO的基礎(chǔ)上融合了RPN,與以上各種算法相比,綜合性能優(yōu)異,但是小目標(biāo)檢測(cè)與識(shí)別效果低一直都是SSD難以擺脫的缺點(diǎn),文獻(xiàn)[7,9-11]也證實(shí)了這一點(diǎn)。
目前,針對(duì)SSD對(duì)小目標(biāo)識(shí)別率低的問(wèn)題提出了FSSD(Feature fusion Single Shot multibox Detector)、DSSD(Deconvolutional Single Shot Detector)、R-SSD等。文獻(xiàn)[12-13]提出的FSSD,是一種SSD+FPN思想的結(jié)合,重新構(gòu)造出一組新的特征金字塔,相比于傳統(tǒng)的SSD在小目標(biāo)檢測(cè)與識(shí)別上具有更高的精確度;文獻(xiàn)[7]中DSSD是將SSD的基礎(chǔ)網(wǎng)絡(luò)由VGG16改為ResNet,并引入反卷積層用于傳遞信息,雖然也提高了識(shí)別小目標(biāo)的準(zhǔn)確率,但是降低了識(shí)別速度,實(shí)時(shí)性變差;文獻(xiàn)[14]提出的R-SSD則是通過(guò)增加不同層feature map的聯(lián)系以及feature map的個(gè)數(shù)來(lái)提高檢測(cè)小目標(biāo)的識(shí)別率。本文則提出輕量級(jí)網(wǎng)絡(luò)融合+層級(jí)特征融合的方法來(lái)解決SSD對(duì)小目標(biāo)識(shí)別率低的問(wèn)題。
SSD是Liu等[6]提出的一種目標(biāo)檢測(cè)算法,它在YOLO的基礎(chǔ)上融合了RPN的思想,在不同的卷積層所輸出的不同尺度的卷積結(jié)果(Feature Map)上面畫格子,在多種尺度的格子上提取目標(biāo)中心點(diǎn)。雖然改善了算法中每個(gè)網(wǎng)絡(luò)預(yù)測(cè)的物體個(gè)數(shù)是指定的,容易造成遺漏(如指定檢測(cè)2個(gè),但是實(shí)際有3個(gè))和算法對(duì)物體尺度相對(duì)比較敏感,對(duì)尺度變化較大的物體泛化能力較差的缺點(diǎn),但是,仍然存在著容易漏檢小目標(biāo)、重復(fù)檢出多個(gè)邊界框的問(wèn)題。
SSD使用的是一種基于VGG 16改進(jìn)的模型結(jié)構(gòu),其使用了Conv4_3、Conv_7(FC7)、Conv6_2、Conv7_2、Conv8_2、Conv9_2六個(gè)不同特征圖來(lái)檢測(cè)不同尺度的目標(biāo),低層主要用于預(yù)測(cè)小目標(biāo),而高層則用來(lái)預(yù)測(cè)大目標(biāo),能夠直接預(yù)測(cè)目標(biāo)的位置和類別,同時(shí)也能夠大大提高檢測(cè)精度,SSD算法的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 SSD算法的網(wǎng)絡(luò)結(jié)構(gòu)
SSD的損失函數(shù)包含用于分類的log loss 和用于回歸的smooth L1,即:
傳統(tǒng)SSD算法采用六個(gè)不同特征圖來(lái)檢測(cè)不同尺度的目標(biāo),其低層次的定位效果好但分類精度低,由于六個(gè)不同特征圖相互獨(dú)立,造成傳統(tǒng)SSD算法對(duì)小目標(biāo)的檢測(cè)效果一般。針對(duì)以上問(wèn)題,本文提出輕量級(jí)網(wǎng)絡(luò)融合+層級(jí)特征融合的方法來(lái)改進(jìn)傳統(tǒng)SSD算法,其主要針對(duì)金字塔結(jié)構(gòu)中的特征層進(jìn)行融合以及對(duì)空洞卷積層輸出的結(jié)果依次進(jìn)行求和,并將后邊所有輸出的求和與第一個(gè)輸出連接(Concatenate)起來(lái),然后輸出結(jié)果。
本文提出改進(jìn)的SSD算法整體網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,首先對(duì)Conv4_3、Conv_7、Conv6_2、Conv7_2、Conv8_2(簡(jiǎn)記為ConvY_Y)這五個(gè)特征層進(jìn)行卷積操作(由于Conv9_2特征層尺寸很小,包含較多的語(yǔ)義信息,故不需對(duì)其進(jìn)行卷積操作)[15]。為了免去特征融合后再進(jìn)行特征降維的操作,要求進(jìn)行卷積操作后生成的Conv4_3_0、Conv_7_0、Conv6_2_0、Conv7_2_0、Conv8_2_0(簡(jiǎn)記為ConvY_Y_0)的特征維數(shù)不能超過(guò)原始的特征維數(shù)[15]。然后將Conv4_3和Conv4_3_0、Conv_7和Conv_7_0、Conv6_2和Conv6_2_0、Conv7_2和Conv7_2_0、Conv8_2和Conv8_2_0這五對(duì)分別進(jìn)行融合,依次得到Conv4_3_1、Conv_7_1、Conv6_2_1、Conv7_2_1、Conv8_2_1并與Conv9_2形成新的金字塔特征層[15]。之后對(duì)Conv_7_1、Conv6_2_1、Conv7_2_1、Conv8_2_1、Conv9_2(簡(jiǎn)記為ConvY_Y_1)五個(gè)新特征層的空洞卷積層進(jìn)行特征融合,依次得到Conv_7_2、Conv6_2_2、Conv7_2_2、Conv8_2_2、Conv9_2_2(簡(jiǎn)記為ConvY_Y_2),與Conv4_3_1形成最終的金字塔特征層[16]。
圖2 改進(jìn)SSD算法的網(wǎng)絡(luò)結(jié)構(gòu)
ConvY_Y_0相比于ConvY_Y具有更強(qiáng)的語(yǔ)義信息和更大的卷積特征尺度。此外,由于本文提出的卷積不改變補(bǔ)邊的特征尺寸,因此原特征圖的邊緣信息得到更好的保留。
本文基于層級(jí)特征融合的思想,對(duì)ConvY_Y_1的空洞卷積層輸出結(jié)果依次進(jìn)行求和,并將后邊所有輸出的求和與第一個(gè)輸出連接(Concatenate)起來(lái),得到ConvY_Y_2,然后與Conv4_3_1形成最終的金字塔特征層[15]。此方法與別的通過(guò)使用小的擴(kuò)張參數(shù)來(lái)增加學(xué)習(xí)參數(shù)的一般方法相比,不僅操作更為簡(jiǎn)單,而且解決了增加卷積結(jié)構(gòu)復(fù)雜性的問(wèn)題。
本文最終形成的金字塔特征層相比于傳統(tǒng)SSD算法的金字塔特征層增強(qiáng)了特征層的語(yǔ)義信息,并引入層級(jí)特征融合使得數(shù)據(jù)更加連續(xù),最終達(dá)到改善SSD算法對(duì)小物體識(shí)別率低的問(wèn)題。由于生成的特征層相比于最初的特征層,特征維數(shù)沒(méi)有升高,特征圖的邊緣特征沒(méi)有損失,因此在特征融合時(shí)高層特征不僅不用調(diào)整尺寸,而且不用進(jìn)行降維操作,相比于傳統(tǒng)的特征融合操作,本文采用的特征融合方法更具有優(yōu)勢(shì)。
特征連接以及特征對(duì)應(yīng)元素相加[7,10-12,17]是目前進(jìn)行特征增強(qiáng)最流行的兩種特征融合方式,本文基于特征連接設(shè)計(jì)了一種輕量級(jí)網(wǎng)絡(luò)融合策略對(duì)傳統(tǒng)SSD算法的金字塔特征層進(jìn)行特征增強(qiáng)。因?yàn)镃onvY_Y_0不僅特征尺寸與ConvY_Y相同,而且前者的特征維數(shù)不高于后者,故可直接進(jìn)行融合。
在進(jìn)行特征融合時(shí),如果x為輸入特征,f(x)為對(duì)x卷積操作,y為卷積后的特征,則y=f(x),若令(x,y)為特征x和特征y首尾相連的操作,則相應(yīng)的特征進(jìn)行首尾相連的操作可表示為Fconcat=(x,y),F(xiàn)concat為特征x和特征y首尾相連后得到的特征[15]。
特征元素首尾相連的特征融合如圖3所示,將卷積生成的ConvY_Y_0的特征維數(shù)統(tǒng)一設(shè)置為128維,低于ConvY_Y特征層的特征維數(shù),然后將ConvY_Y與ConvY_Y_0直接串聯(lián)得到ConvY_Y_1,將這種特征融合稱為輕量級(jí)網(wǎng)絡(luò)融合[15]。
圖3 特征元素首尾相連的特征融合
引入空洞卷積層可以增大卷積核感受野并保證層及特征信息不丟失,但是使用空洞卷積層會(huì)使卷積核操作數(shù)據(jù)不連續(xù)以及不能較好地識(shí)別小目標(biāo)[16]??斩淳矸e層結(jié)構(gòu)表示為輸入通道、感受野、輸出通道,其中空洞卷積核的有效感受野為nk×nk,nk=2k-1(n-1)+1;k=1,2,…,K層級(jí)特征融合則是將空洞卷積層輸出的結(jié)果依次進(jìn)行求和,并將后邊所有輸出的求和與第一個(gè)輸出連接(Concatenate)起來(lái),然后輸出結(jié)果,可以解決上述空洞卷積層存在的問(wèn)題[16]。此方法與別的通過(guò)使用小的擴(kuò)張參數(shù)來(lái)增加學(xué)習(xí)參數(shù)的一般方法相比,不僅操作更為簡(jiǎn)單,而且解決了增加卷積結(jié)構(gòu)復(fù)雜性的問(wèn)題,圖4表示為層級(jí)特征融合結(jié)構(gòu)[16],其中:左邊的d表示輸入通道;右邊的d表示輸出通道。
圖4 層級(jí)特征融合結(jié)構(gòu)
因?yàn)楸疚乃惴▽?duì)應(yīng)的金字塔特征層與傳統(tǒng)的SSD算法相差較多,所以不適合直接在已經(jīng)訓(xùn)練好的SSD算法模型上進(jìn)行相應(yīng)的修改。本文算法同樣以在ImageNet上訓(xùn)練好的VGG16網(wǎng)絡(luò)作為基礎(chǔ)框架,在訓(xùn)練本文算法時(shí)所采用的損失函數(shù)、對(duì)數(shù)據(jù)擴(kuò)張的決策、挖掘決策困難樣本,以及提取每個(gè)特征層對(duì)應(yīng)Box的長(zhǎng)寬比率與傳統(tǒng)SSD算法相同。同時(shí),訓(xùn)練本文算法的學(xué)習(xí)率與傳統(tǒng)的SSD算法的學(xué)習(xí)率相同,IOU值設(shè)置為0.5。
本文算法主要針對(duì)于改進(jìn)傳統(tǒng)SSD算法對(duì)小目標(biāo)識(shí)別率低的問(wèn)題,為了驗(yàn)證本文算法的可行性,將其與傳統(tǒng)SSD算法在PASCAL-VOC2007小目標(biāo)數(shù)據(jù)集上對(duì)mAP、每秒傳輸幀數(shù)進(jìn)行對(duì)比。本文所采用的操作系統(tǒng)為Ubuntu14.04 ,在TensorFlow平臺(tái)上完成算法的訓(xùn)練與測(cè)試工作,所使用的GPU型號(hào)為GTX1080 Ti 。由于設(shè)備原因,本文算法采取單GPU訓(xùn)練,參數(shù)Batch size為16,相比于傳統(tǒng)SSD算法小了一半。
本文算法首先以在ImageNet上訓(xùn)練好的VGG16網(wǎng)絡(luò)作為基礎(chǔ)框架,然后在PASCAL-VOC2007的訓(xùn)練集和驗(yàn)證集上訓(xùn)練本文算法,最后在PASCAL-VOC2007測(cè)試集上測(cè)試本文算法對(duì)小目標(biāo)檢測(cè)的有效性。將本文算法的測(cè)試結(jié)果與傳統(tǒng)SSD算法的測(cè)試結(jié)果進(jìn)行比較,得出本文算法可以提高對(duì)小目標(biāo)的檢測(cè)精度。
PASCAL-VOC2007小目標(biāo)數(shù)據(jù)集提供了20種類別的圖片,表1為VOC2007具體的物體類別。為了檢驗(yàn)本文算法在小目標(biāo)識(shí)別上的性能,在PASCAL-VOC2007數(shù)據(jù)集中挑選了154幅具有代表性的圖片來(lái)進(jìn)行實(shí)驗(yàn)。其中154幅圖片中涉及的物體類別有9種,包括aeroplane、bird、bottle、person、boat、dog、sofa、car、cat,對(duì)這154幅圖片進(jìn)行相應(yīng)的處理后,共計(jì)有1 308個(gè)標(biāo)注物體的groud truth。分別對(duì)其用傳統(tǒng)的SSD算法、DSSD算法、DSOD算法、R-SSD算法,以及本文算法進(jìn)行目標(biāo)檢測(cè)實(shí)驗(yàn),傳統(tǒng)的SSD算法與本文算法部分場(chǎng)景下的檢測(cè)結(jié)果如圖5所示,其中:數(shù)字1表示飛機(jī);數(shù)字2和數(shù)字3表示鳥;右邊的數(shù)字與精確度相關(guān),數(shù)字越大,精確度越高。5種算法的檢測(cè)結(jié)果如表2所示。
表1 VOC2007數(shù)據(jù)集的物體類別
圖5 傳統(tǒng)SSD與本文算法對(duì)小目標(biāo)檢測(cè)結(jié)果對(duì)比
表2 VOC2007數(shù)據(jù)集9類物體檢測(cè)結(jié)果
續(xù)表2
從圖5可以看出本文算法對(duì)檢測(cè)效果的改進(jìn),(a)和(c)為傳統(tǒng)SSD算法的檢測(cè)效果,可以得出其對(duì)近處物體以及較大的物體有較高的類別置信度,但是它的定位精確性需要進(jìn)一步提高;(b)和(d)為本文算法的檢測(cè)效果,可以看出不僅提高了對(duì)小目標(biāo)的檢測(cè)能力,而且對(duì)大目標(biāo)的定位也更加精確。
從表2中可以得出本文算法對(duì)小尺寸物體(如bottle)的識(shí)別精度提升更大, mAP相比傳統(tǒng)SSD算法提高了0.078,比DSOD算法提高了0.008,比R-SSD算法提高了0.003,但低于DSSD算法0.009,是因?yàn)镈SSD以ResNet-101為基礎(chǔ)網(wǎng)絡(luò),雖然比VGG16網(wǎng)絡(luò)深、性能好,但是結(jié)構(gòu)也更為復(fù)雜。從表3中也可看出DSSD犧牲了過(guò)多的檢測(cè)速度。
表3 VOC2007測(cè)試集每秒傳輸幀數(shù)指標(biāo)測(cè)試結(jié)果
由于本文算法在進(jìn)行特征融合時(shí)既不用調(diào)整尺寸,又不用進(jìn)行降維操作,故本文算法的檢測(cè)速度可達(dá)81.5幀/s,遠(yuǎn)遠(yuǎn)高于Faster-R-CNN算法的7.0幀/s以及DSSD算法的9.5幀/s,且高于DSOD算法的17.4幀/s和R-SSD算法的16.6幀/s,相比較于傳統(tǒng)SSD算法的85.0幀/s,僅僅損耗了3.5幀/s,具體每秒傳輸幀數(shù)指標(biāo)測(cè)試結(jié)果可見表3。
本文提出輕量級(jí)網(wǎng)絡(luò)融合+層級(jí)特征融合的方法通過(guò)修改金字塔特征層來(lái)改進(jìn)傳統(tǒng)SSD算法。在VOC2007的小目標(biāo)數(shù)據(jù)集上對(duì)本文改進(jìn)算法進(jìn)行了測(cè)試,比傳統(tǒng)SSD算法的mAP提高了0.078,并且每秒傳輸幀數(shù)幾乎沒(méi)有降低。未來(lái)的工作主要針對(duì)參數(shù)壓縮、模型簡(jiǎn)化來(lái)展開,以提高算法的實(shí)時(shí)性。