楊玉敏 廖育榮 林存寶 倪淑燕 吳止鍰
(1.航天工程大學(xué)研究生院 北京 101400)(2.航天工程大學(xué)電子與光學(xué)工程系 北京 101400)(3.洛陽(yáng)電子裝備試驗(yàn)中心 洛陽(yáng) 471000)
隨著近年來(lái)卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neu?ral Networks,CNN)在計(jì)算機(jī)視覺(jué)領(lǐng)域的廣泛應(yīng)用,基于CNN的目標(biāo)檢測(cè)算法得到了迅猛發(fā)展。Gir?shick等于2014年提出了R-CNN(Regions with Con?volutional Neural Network)[1]算法,首次基于CNN 框架大幅提高了目標(biāo)檢測(cè)的平均精度均值(Mean Av?erage Precision,mAP)。隨后各種基于CNN的目標(biāo)檢測(cè)算法,包括基于候選區(qū)域的R-CNN改進(jìn)算法Fast R-CNN[2]、Faster R-CNN[3]、Mask R-CNN[4],以及基于回歸方法的YOLO(You Only Look Once)系列[5~7]與 SSD(Single Shot MultiBox Detector)系列[8~11]算法先后被提出,顯著提高了目標(biāo)檢測(cè)算法在檢測(cè)精度和實(shí)時(shí)性方面的性能。
雖然R-CNN、YOLO、SSD系列算法在目標(biāo)檢測(cè)性能方面效果優(yōu)異,但其普遍具有較高的計(jì)算復(fù)雜性和較大的模型體積,無(wú)法充分滿足計(jì)算能力、存儲(chǔ)空間、功耗等資源受限場(chǎng)合的應(yīng)用需求。為了提高目標(biāo)檢測(cè)算法在嵌入式平臺(tái)等資源受限條件下的應(yīng)用能力,各種輕量化目標(biāo)檢測(cè)算法,包括Light-Head R-CNN[12]、Tiny-YOLO[5]、Tiny-SSD[13]等算法先后發(fā)展而來(lái),有效提高了輕量化目標(biāo)檢測(cè)算法的性能水平。本文旨在歸納現(xiàn)有輕量化CNN的基礎(chǔ)上,重點(diǎn)對(duì)輕量化目標(biāo)檢測(cè)算法進(jìn)行系統(tǒng)總結(jié),并結(jié)合各算法在PASCAL VOC[14~15]等數(shù)據(jù)集上的測(cè)試結(jié)果進(jìn)行對(duì)比分析和發(fā)展方向探討。
基于候選區(qū)域和回歸方法的目標(biāo)檢測(cè)算法雖然性能優(yōu)異,但其模型大小和參數(shù)量相對(duì)較大,通常為百M(fèi)B大小和百M(fèi)參數(shù)量,且其計(jì)算復(fù)雜度較高,對(duì)于內(nèi)存空間和計(jì)算能力受限的嵌入式系統(tǒng)而言通常難以滿足要求。為了滿足資源受限的嵌入式系統(tǒng)的使用要求,研究人員提出了多種輕量化網(wǎng)絡(luò)模型,最具代表性的主要為SqueezeNet、Mo?bileNet和ShuffleNet系列輕量化網(wǎng)絡(luò)。
2.1.1 SqueezeNet與SqueezeNext
2016年,Iandola等[16]提出了SqueezeNet輕量化網(wǎng)絡(luò),該網(wǎng)絡(luò)借鑒了Inception網(wǎng)絡(luò)[17]的設(shè)計(jì)思想,通過(guò)Fire module基本模塊實(shí)現(xiàn)SqueezeNet網(wǎng)絡(luò)的構(gòu)建,其Fire module結(jié)構(gòu)如圖1(a)所示。Fire mod?ule中主要包含了Squeeze層和Expand層,其中Squeeze層采用1×1的卷積核來(lái)減少參數(shù)量,Ex?pand層則采用1×1和3×3卷積核分別得到對(duì)應(yīng)特征圖后進(jìn)行拼接,由此得到Fire module的輸出。利用卷積層、Fire module和池化層構(gòu)建的SqueezeNet模型大小只有4.8MB,卻在ImageNet上達(dá)到了相比AlexNet略?xún)?yōu)的57.5%的TOP-1分類(lèi)精度。2018年,Gholami等[18]基于SqueezeNet提出了改進(jìn)版的SqueezeNext輕量化網(wǎng)絡(luò),其主要采用了如圖1(b)所示的模塊結(jié)構(gòu)。該結(jié)構(gòu)中采用通道數(shù)減半的兩層Squeeze層對(duì)輸入進(jìn)行處理,然后通過(guò)3×1和1×3搭配的低秩卷積核進(jìn)行卷積,之后利用一個(gè)卷積層實(shí)現(xiàn)數(shù)據(jù)維度匹配。此外,SqueezeNext借鑒ResNet網(wǎng)絡(luò)[19]結(jié)構(gòu)思想實(shí)現(xiàn)了shortcut連接,并通過(guò)硬件實(shí)驗(yàn)指導(dǎo)網(wǎng)絡(luò)設(shè)計(jì),其參數(shù)量相比SqueezeNet有了明顯降低,但卻實(shí)現(xiàn)了高達(dá)69.8%的TOP-1分類(lèi)精度。
圖1 Fire Module與SqueezeNext基本模塊結(jié)構(gòu)
2.1.2 MobileNet v1與MobileNet v2
2017年,Howard等[20]提出了MobileNet v1輕量化網(wǎng)絡(luò),該網(wǎng)絡(luò)使用了深度可分離卷積(Depthwise Separable Convolution,DSC)結(jié)構(gòu)代替?zhèn)鹘y(tǒng)卷積結(jié)構(gòu),將傳統(tǒng)卷積結(jié)構(gòu)中N個(gè)DK×DK×C卷積核分解為C個(gè)DK×DK×1和N個(gè)1×1×C卷積核疊加的形式,其結(jié)構(gòu)圖如圖2(a)所示,通過(guò)該方法可使卷積操作運(yùn)算量降低為原有的1/8~1/9。于此同時(shí),通過(guò)引入時(shí)間因子α和分辨率因子ρ進(jìn)一步降低模型參數(shù)量,最終MobileNet v1參數(shù)量約為4.2 M,且在ImageNet數(shù)據(jù)集上實(shí)現(xiàn)了70.6%的TOP-1分類(lèi)精度。2018年,Mark等[21]在Mobilenet v1的基礎(chǔ)上提出了Mobilenet v2輕量化網(wǎng)絡(luò),該網(wǎng)絡(luò)最大的特點(diǎn)是引入了反向殘差和線性瓶頸結(jié)構(gòu),反向殘差結(jié)構(gòu)如圖2(b)所示,其不同于常規(guī)殘差結(jié)構(gòu)“壓縮—卷積—擴(kuò)張”過(guò)程,而是采用“擴(kuò)張—卷積—壓縮”的反向式操作,充分利用深度可分離卷積可有效降低中間卷積運(yùn)算計(jì)算量的優(yōu)勢(shì)來(lái)保證算法性能,且通過(guò)去掉ReLU來(lái)避免信息損失。MobileNet v2的參數(shù)量約為6.9 M,其在ImageNet數(shù)據(jù)集上實(shí)現(xiàn)了74.7%的TOP-1分類(lèi)精度。
圖2 深度可分離卷積與反向殘差結(jié)構(gòu)
2.1.3 ShuffleNet v1與ShuffleNet v2
2017年,Zhang等[22]提出了ShuffleNet v1輕量化網(wǎng)絡(luò),其基本模塊結(jié)構(gòu)如圖3(a)所示。Shuf?fleNet v1對(duì)常規(guī)殘差結(jié)構(gòu)進(jìn)行了改進(jìn),將與輸入特征圖相連的第一個(gè)1×1卷積層替換為分組卷積,并利用Channel shuffle操作對(duì)分組卷積各組輸出結(jié)果進(jìn)行信息交互,以此實(shí)現(xiàn)在降低運(yùn)算量的情況下保證網(wǎng)絡(luò)性能,ShuffleNet v1最終在ImageNet數(shù)據(jù)集上實(shí)現(xiàn)了73.7%的TOP-1分類(lèi)精度。2018年,Ma等[23]在 ShuffleNet v1 的基礎(chǔ)上又提出了 Shuf?fleNet v2輕量化網(wǎng)絡(luò),該網(wǎng)絡(luò)的基本模塊結(jié)構(gòu)如圖3(b)所示,其在對(duì)輸入特征圖進(jìn)行處理時(shí)首先進(jìn)行了通道劃分,其中一個(gè)分支不采取任何操作,另一個(gè)分支經(jīng)過(guò)卷積處理后,與前一個(gè)分支拼接后再進(jìn)行Channel Shuffle操作,以此實(shí)現(xiàn)信息交互,最終ShuffleNet v2在ImageNet數(shù)據(jù)集上實(shí)現(xiàn)了74.9%的TOP-1分類(lèi)精度。
圖3 ShuffleNet v1與ShuffleNet v2基本模塊結(jié)構(gòu)
為了滿足嵌入式系統(tǒng)等資源受限平臺(tái)的使用需求,研究人員基于R-CNN、YOLO、SSD等原始算法,結(jié)合各種輕量化網(wǎng)絡(luò)模型,通過(guò)采用巧妙的融合策略與算法改進(jìn),提出了一系列兼具目標(biāo)檢測(cè)精度和實(shí)時(shí)性的輕量化目標(biāo)檢測(cè)算法,其中最具代表性的仍是以R-CNN、YOLO、SSD系列為代表的輕量化目標(biāo)檢測(cè)算法。
2.2.1 輕量化R-CNN系列
2016年,針對(duì)R-CNN系列算法實(shí)時(shí)性不足問(wèn)題,Hong等[24]基于Faster R-CNN提出了PVANet輕量化目標(biāo)檢測(cè)算法,該算法通過(guò)將CReLU(Concate?nated Rectified Linear Units)、Inception與殘差結(jié)構(gòu)相結(jié)合,并借鑒HyperNet網(wǎng)絡(luò)[25]思想來(lái)構(gòu)建特征提取網(wǎng)絡(luò),在盡量保留Faster R-CNN精度優(yōu)勢(shì)的情況下提高算法實(shí)時(shí)性,最終在VOC數(shù)據(jù)集上實(shí)現(xiàn)了84.4%的mAP與20.6 FPS的處理速度。2017年,Li等[12]通過(guò)分析R-CNN系列算法頭部架構(gòu)設(shè)計(jì)復(fù)雜導(dǎo)致算法速度較慢的問(wèn)題,提出了Light-Head R-CNN輕量化目標(biāo)檢測(cè)算法,該算法一方面利用較大核尺寸的可分離卷積生成通道數(shù)較少的特征圖,另一方面通過(guò)單個(gè)較小的全連接層連接于池化層,從而降低算法復(fù)雜度,最終在COCO數(shù)據(jù)集上實(shí)現(xiàn)了37.7%的mAP,檢測(cè)速度達(dá)到了102 FPS。
2.2.2 輕量化YOLO系列
2015年,文獻(xiàn)[5]在提出YOLO v1算法的同時(shí)提出了一個(gè)輕量化版本Tiny-YOLO v1,該算法將YOLO v1原有的24層卷積結(jié)構(gòu)簡(jiǎn)化為9層,在VOC2007數(shù)據(jù)集上以相比YOLO v1降低10.7%mAP的代價(jià)實(shí)現(xiàn)了檢測(cè)速度的3.4倍提升。在此基礎(chǔ)之上,文獻(xiàn)[6~7]在后續(xù)提出YOLO v2和v3的同時(shí)也發(fā)布了對(duì)應(yīng)的輕量化版本Tiny-YOLO v2和v3,改進(jìn)的Tiny-YOLO v2和v3算法在降低模型大小的同時(shí)也實(shí)現(xiàn)了更高的目標(biāo)檢測(cè)mAP。2016年,Wu等[26]受YOLO算法啟發(fā),提出了一種面向自動(dòng)駕駛目標(biāo)檢測(cè)任務(wù)的SqueezeDet輕量化算法,該算法通過(guò)改進(jìn)的SqueezeNet輕量化網(wǎng)絡(luò),利用全卷積結(jié)構(gòu)實(shí)現(xiàn)端到端的目標(biāo)檢測(cè),有效降低了模型大小和參數(shù)量,在KITTI數(shù)據(jù)集上實(shí)現(xiàn)了76.7%的mAP。2018年,Pedoeem等[27]針對(duì)非GPU工作平臺(tái),基于YOLO系列算法提出了改進(jìn)的YOLO-LI?TE輕量化目標(biāo)檢測(cè)算法,該算法網(wǎng)絡(luò)結(jié)構(gòu)中僅采用了7層卷積層,并針對(duì)其淺層網(wǎng)絡(luò)結(jié)構(gòu)特點(diǎn)取消了批歸一化處理,使其能夠在非GPU平臺(tái)下實(shí)現(xiàn)21 FPS的檢測(cè)速度,但其mAP指標(biāo)相對(duì)較低。2019年,Wong等[28]采用人機(jī)協(xié)作設(shè)計(jì)策略,將骨干網(wǎng)絡(luò)人工設(shè)計(jì)和機(jī)器驅(qū)動(dòng)探索設(shè)計(jì)相結(jié)合,以YO?LO系列算法為基礎(chǔ)提出了YOLO Nano輕量化目標(biāo)檢測(cè)算法,該算法在相比Tiny-YOLO v2和v3算法顯著降低模型大小及運(yùn)算量的同時(shí),將mAP指標(biāo)提升了10%以上,且在嵌入式平臺(tái)下實(shí)現(xiàn)了48.2 FPS的目標(biāo)檢測(cè)速度。
2.2.3 輕量化SSD系列
2018年,Zhang等[29]將MobileNet v1網(wǎng)絡(luò)與SSD算法相結(jié)合,提出了MobileNet-SSD算法,該算法利用MobileNet v1網(wǎng)絡(luò)替換了SSD算法原有的VGG-16網(wǎng)絡(luò),并利用DSC替換了傳統(tǒng)卷積,在VOC數(shù)據(jù)集上實(shí)現(xiàn)了72.0%的mAP,并在NanoPi 2嵌入式平臺(tái)下實(shí)現(xiàn)了1.13 FPS的目標(biāo)檢測(cè)速度。同年,文獻(xiàn)[21]在提出輕量化網(wǎng)絡(luò)MobileNet v2的同時(shí),將原有SSD算法中的常規(guī)卷積替換為DSC并將其命名為SSDLite,又將MobileNet v2與SSDLite相結(jié)合得到了MobileNet v2+SSDLite輕量化目標(biāo)檢測(cè)算法,其在COCO數(shù)據(jù)集上實(shí)現(xiàn)了22.1%的mAP。同年,Womg等[30]受輕量化網(wǎng)絡(luò) SqueezeNet中fire module基本結(jié)構(gòu)和SSD算法中單點(diǎn)探測(cè)整體框架啟發(fā),針對(duì)目標(biāo)檢測(cè)問(wèn)題對(duì)二者網(wǎng)絡(luò)進(jìn)行特定改進(jìn)與結(jié)合,以此提出了Tiny-SSD輕量化目標(biāo)檢測(cè)算法,在有效降低算法模型大小的基礎(chǔ)上,在VOC數(shù)據(jù)集上實(shí)現(xiàn)了61.3%的mAP。此外,Li等[31]將DSC與DenseNet網(wǎng)絡(luò)相結(jié)合構(gòu)造了DDB(Depth?wise Dense Block)模塊,又將深度卷積與特征金字塔網(wǎng)絡(luò)(Feature Pyramid Network,F(xiàn)PN)相結(jié)合構(gòu)造了D-FPN模塊,最后分別將DDB和D-FPN作為骨干網(wǎng)絡(luò)和前端網(wǎng)絡(luò)提出了Tiny-DSOD輕量化目標(biāo)檢測(cè)算法,該算法在VOC數(shù)據(jù)集上實(shí)現(xiàn)了72.1%的mAP,且具有較高的目標(biāo)檢測(cè)速度。
基于PASCAL VOC、COCO、KITTI數(shù)據(jù)集,表1為各種輕量化算法在其上的測(cè)試結(jié)果。對(duì)于R-CNN系列輕量化目標(biāo)檢測(cè)算法PVANet與Light-Head R-CNN,其依然保持了較高的目標(biāo)檢測(cè)精度,但在嵌入式平臺(tái)下的目標(biāo)檢測(cè)速度仍有待研究。對(duì)于YOLO系列輕量化目標(biāo)檢測(cè)算法,隨著算法的改進(jìn)其模型大小在不斷降低,算法精度也在不斷提高,且在嵌入式系統(tǒng)Jetson AGX Xavier上實(shí)現(xiàn)了實(shí)時(shí)目標(biāo)檢測(cè)能力,取得了模型大小、檢測(cè)精度、檢測(cè)速度的較好平衡。對(duì)于SSD系列輕量化目標(biāo)檢測(cè)算法,其模型大小和參數(shù)量均已明顯降低,且在GPU平臺(tái)105 FPS處理速度下實(shí)現(xiàn)了72.1%的mAP,同樣達(dá)到了較好的目標(biāo)檢測(cè)水平。
表1 不同輕量化目標(biāo)檢測(cè)算法性能對(duì)比
基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法以其優(yōu)異的性能已成為當(dāng)前目標(biāo)檢測(cè)任務(wù)的主要解決方案,本文在對(duì)基于候選區(qū)域和回歸方法的典型目標(biāo)檢測(cè)算法概述的基礎(chǔ)上,重點(diǎn)對(duì)輕量化網(wǎng)絡(luò)模型及其輕量化目標(biāo)檢測(cè)算法進(jìn)行了系統(tǒng)總結(jié),闡述了其網(wǎng)絡(luò)結(jié)構(gòu)和算法特點(diǎn),并結(jié)合各類(lèi)算法在PASCAL VOC等數(shù)據(jù)集上的測(cè)試結(jié)果對(duì)其進(jìn)行了對(duì)比分析??傮w而言,性能優(yōu)異的輕量化目標(biāo)檢測(cè)算法依然明顯依賴(lài)于巧妙的輕量化特征提取網(wǎng)絡(luò)設(shè)計(jì),以及網(wǎng)絡(luò)內(nèi)部高效的信息提取與傳遞機(jī)制,此外,多尺度與多樣化的模型訓(xùn)練方法也是實(shí)現(xiàn)算法性能的有效保障,這些方面可作為改進(jìn)輕量化目標(biāo)檢測(cè)算法性能的研究方向。