朱 郝,楊世恩,陳春梅
(1.西南科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,四川 綿陽 621010;2.西南科技大學(xué) 信息工程學(xué)院,四川 綿陽 621010)
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域的熱門研究方向,經(jīng)過數(shù)十年的發(fā)展,在生活中得到了廣泛的運(yùn)用,例如監(jiān)控安全、人臉檢測(cè)、自動(dòng)駕駛等。目前,現(xiàn)有的主流圖像目標(biāo)檢測(cè)算法可以分為兩類:一類是二階段的檢測(cè)算法,先由算法生成一系列作為樣本的候選框,再通過卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行樣本分類,檢測(cè)精度較高,檢測(cè)速度較慢,如RCNN、Fast R-CNN、Faster R-CNN等;另一類是一階段的檢測(cè)算法[1],只需一次提取特征即可實(shí)現(xiàn)目標(biāo)檢測(cè),其速度相比二階段的算法快,但檢測(cè)精度會(huì)有所下降,如SSD、YOLO系列等;其中基于一階段的YOLO系列目標(biāo)檢測(cè)算法最具有代表性,因其較好的綜合性能,逐漸成為大多數(shù)實(shí)際應(yīng)用的首選框架。
由于基于卷積神經(jīng)網(wǎng)絡(luò)的圖像處理算法相較于傳統(tǒng)的算法[2],具有更好的魯棒性,于是越來越來多的研究者提出了更具有表征能力的深層網(wǎng)絡(luò),使得模型變得越來越復(fù)雜。盡管復(fù)雜的模型能夠提供更高的精度,但也產(chǎn)生了一些問題:模型復(fù)雜度高,占用大量計(jì)算資源,不利于算法的落地應(yīng)用。于是相關(guān)工作[3-5]利用骨干網(wǎng)絡(luò)替換、深度可分離卷積、網(wǎng)絡(luò)剪枝等方法減少模型的參數(shù)量(Parameter Count)和浮點(diǎn)運(yùn)算量(FLOPs),達(dá)到網(wǎng)絡(luò)輕量化的目的。但上述兩種度量指標(biāo)并沒有考慮內(nèi)存的訪問成本和并行度,可能會(huì)對(duì)模型的推理速度產(chǎn)生較大的影響。為了進(jìn)一步提高模型的推理速度,于是有了結(jié)構(gòu)重參數(shù)化(structural re-parameterization technique)相關(guān)工作,如RepVGG[6-8]等。RepVGG將訓(xùn)練時(shí)的多分支結(jié)構(gòu)和推理時(shí)的普通線性結(jié)構(gòu)進(jìn)行解耦,使用多分支拓?fù)浣Y(jié)構(gòu)進(jìn)行訓(xùn)練,而后通過結(jié)構(gòu)重參數(shù)化技術(shù)將多分支拓?fù)浣Y(jié)構(gòu)轉(zhuǎn)為普通線性結(jié)構(gòu)進(jìn)行推理,這樣既能保持多分支結(jié)構(gòu)相當(dāng)?shù)聂敯粜?又能提高模型的推理速度。
為了進(jìn)一步改善上述目標(biāo)檢測(cè)算法所存在的問題,該文基于結(jié)構(gòu)重參數(shù)化技術(shù)設(shè)計(jì)了一個(gè)高效的輕量化目標(biāo)檢測(cè)框架。在維持較高的檢測(cè)精度的同時(shí),盡可能降低模型的規(guī)模大小。為了實(shí)現(xiàn)這一目標(biāo),結(jié)合YOLO系列算法的研究成果,該文設(shè)計(jì)了一個(gè)新的輕量化目標(biāo)檢測(cè)框架Rep-YOLO,其通過結(jié)構(gòu)重參數(shù)化技術(shù)來解耦訓(xùn)練過程和推理過程,從而優(yōu)化延時(shí)。
主要貢獻(xiàn)如下:
(1)提出了Rep-YOLO,一種輕量化目標(biāo)檢測(cè)架構(gòu),與其他精度相當(dāng)?shù)乃惴ㄏ啾?規(guī)模更小,檢測(cè)速度更快。
(2)引入MobileOne[9]Style結(jié)構(gòu),并基于結(jié)構(gòu)重參數(shù)化技術(shù)重新設(shè)計(jì)了Backbone和Neck。
(3)設(shè)計(jì)了一個(gè)輕量化解耦檢測(cè)頭(Decoupled Head)。
You Only Look Once(YOLO)是一種基于圖像全局信息進(jìn)行預(yù)測(cè)的一階段的目標(biāo)檢測(cè)算法。自2015年Joseph Redmon[10]等人提出初代模型以來,領(lǐng)域內(nèi)的研究者們已經(jīng)對(duì)YOLO進(jìn)行多次更新迭代,使得模型性能越來越強(qiáng)大。從YOLOv1到Y(jié)OLOv7已經(jīng)是一個(gè)龐大的家族。
主流的YOLO系列主要由四個(gè)部分構(gòu)成[11],分別為Input層、Backbone層、Neck層、Head層。Input層先對(duì)圖像進(jìn)行預(yù)處理,Backbone層可以是VGG、MobileNet、RepVGG、EfficientRep和E-ELAN等骨干網(wǎng)絡(luò),以及附加模塊SPP、SimSPPF[12]、ASPP等。Neck層由幾個(gè)自下而上的路徑和幾個(gè)自上而下的路徑組成,如FPN、PAN、BiFPN等。對(duì)于Head層,包含YOLOv3-v5[11-13]中采用的耦合檢測(cè)頭(Coupled Head)、YOLOX[14]使用的解耦檢測(cè)頭(Decoupled Head)和YOLOv6中的高效檢測(cè)頭(Efficient Decoupled Head),YOLOv7[15]在Coupled Head的基礎(chǔ)上增加了輔助訓(xùn)練頭(auxiliary Head)。
MobileOne[9]是蘋果公司研究人員于2022年提出的一種高效的移動(dòng)設(shè)備骨干網(wǎng)絡(luò)。在主流的高效網(wǎng)絡(luò)中,在ImageNet上達(dá)到了SOTA的精度。與之前關(guān)于結(jié)構(gòu)重參數(shù)化的工作一樣,MobileOne在訓(xùn)練時(shí)采用分支拓?fù)浣Y(jié)構(gòu),在推理時(shí)采用重參數(shù)化后的線性結(jié)構(gòu),便可減少內(nèi)存訪問成本,提高模型推理速度。MobileOne的結(jié)構(gòu)如圖1所示。MobileOne模塊有兩種不同的結(jié)構(gòu)用于訓(xùn)練和推理。圖1的左邊是基于深度卷積的訓(xùn)練結(jié)構(gòu),上面是深度卷積,下面是點(diǎn)卷積。圖1的右邊展示了經(jīng)過結(jié)構(gòu)重參數(shù)化后的推理結(jié)構(gòu)。
圖1 MobileOne block結(jié)構(gòu)
在本節(jié)中,分析了輕量化模型設(shè)計(jì)中的FLOPs和Parameter Count這兩個(gè)度量指標(biāo)與推理延時(shí)的相關(guān)性。其次,在主流的YOLO系列的總體框架基礎(chǔ)上,分別從以下三個(gè)方面對(duì)Rep-YOLO的架構(gòu)進(jìn)行描述:Backbone、Neck和Head;并對(duì)主要的訓(xùn)練策略進(jìn)行介紹。
通常,網(wǎng)絡(luò)的輕量化設(shè)計(jì)一般是通過降低Parameter Count和FLOPs這兩個(gè)指標(biāo)參數(shù)進(jìn)行的,筆者也進(jìn)行了相關(guān)的實(shí)驗(yàn)。以目前改進(jìn)最多的YOLOv4為例,使用輕量化的骨干網(wǎng)絡(luò)替換YOLOv4的Backbone,并將Neck和Head中的標(biāo)準(zhǔn)3×3卷積替換為深度可分離卷積。相關(guān)實(shí)驗(yàn)結(jié)果如表1,通過降低Parameter Count和FLOPs改進(jìn)而來的YOLOv4,其推理延時(shí)明顯減少。但總體上來看,改進(jìn)的YOLOv4與參數(shù)量更大的YOLOv6s/v7相比在推理速度上并沒有更快,可以看出推理延時(shí)和以上兩個(gè)指標(biāo)的相關(guān)性并不是特別強(qiáng)。其次,由于MobileNetv1-YOLOv4中不含殘差結(jié)構(gòu),所以擁有更低的延時(shí)。因此,僅僅考慮減少參數(shù)量和浮點(diǎn)運(yùn)算量這兩個(gè)因素是不夠的,還要考慮內(nèi)存訪問成本和并行度等因素,從而設(shè)計(jì)出一個(gè)高效推理結(jié)構(gòu)。
表1 指標(biāo)相關(guān)性實(shí)驗(yàn)
YOLOv5/YOLOX/YOLOv7的Backbone和Neck都是基于CSPNet[17]搭建,采用的是多分支結(jié)構(gòu)或者殘差結(jié)構(gòu)。對(duì)于GPU等硬件來說,這種結(jié)構(gòu)一定程度上會(huì)增加延時(shí),同時(shí)減小內(nèi)存帶寬利用率。YOLOv7中的ELAN模塊是一個(gè)輸入和輸出相等的多分支結(jié)構(gòu),優(yōu)點(diǎn)是可以提出更多的特征信息,擁有更好的魯棒性。盡管如此,多分支結(jié)構(gòu)在一定程度上會(huì)導(dǎo)致內(nèi)存訪問成本的增加,導(dǎo)致更多延時(shí)。因此,該文綜合考慮內(nèi)存訪問成本和并行度等因素(如2.1所述),構(gòu)建了MOne Backbone和DRep-PAN,其主要內(nèi)容如下:
(1)引入了MobileOne block style結(jié)構(gòu)。
(2)基于結(jié)構(gòu)重參數(shù)化技術(shù)重新設(shè)計(jì)了Backbone和Neck。
MobileOne block style結(jié)構(gòu)是一種在訓(xùn)練時(shí)具有多分支拓?fù)?而在實(shí)際部署時(shí)可以等效融合為單個(gè)3×3深度卷積和一個(gè)1×1逐點(diǎn)卷積的可重參數(shù)化的結(jié)構(gòu)(參考圖1)。
MOne Backbone:在Backbone設(shè)計(jì)方面,基于以上的MobileOne block style結(jié)構(gòu)設(shè)計(jì)了一個(gè)高效的backbone。相比于YOLOv5、YOLOX、YOLOv7等基于CSPNet的結(jié)構(gòu),MobileOne block style結(jié)構(gòu)能夠通過融合成的3×3卷積結(jié)構(gòu)(單路結(jié)構(gòu)),有效利用計(jì)算密集型硬件計(jì)算能力(比如GPU),同時(shí)也可獲得GPU/CPU上已經(jīng)高度優(yōu)化的NVIDIA cuDNN和Intel MKL編譯框架的幫助[13]。
MOne Backbone的結(jié)構(gòu)如圖2所示,原始的MobileOne是進(jìn)行圖像分類的網(wǎng)絡(luò),去掉最后的平均池化層和線性層,將剩下的部分作為文中算法的Backbone,并且保留了MobileOne所采用的縮放策略,引入了6種不同規(guī)格的Backbone(如表2所示)。在Backbone最后的附加模塊中,采用的是YOLOv6所提到的SimSPPF,與YOLOv5中的SPPF不同的是SimSPPF的三個(gè)池化核大小都為5,其作用是能夠有效避免對(duì)圖像區(qū)域裁剪、縮放操作導(dǎo)致的圖像失真等問題。
表2 MOne Backbone網(wǎng)絡(luò)規(guī)格配置
圖2 文中算法模型結(jié)構(gòu)
DRep-PAN基于PAN[18]拓?fù)浞绞?如圖2的Neck所示)。與YOLOv6的Neck結(jié)構(gòu)相似,進(jìn)行多尺度特征融合。與YOLOv6不同的之處在于,使用深度可分離卷積替換了標(biāo)準(zhǔn)的3×3卷積來降低3×3卷積的參數(shù)量,用MobileOne block替換了YOLOv6中的RepBlock,同時(shí)對(duì)整體Neck中的其他算子進(jìn)行了調(diào)整,目的是在硬件上達(dá)到高效推理的同時(shí),保持較好的多尺度特征融合能力。
YOLOv6的Efficient Decouple Head結(jié)構(gòu)是YOLOX檢測(cè)頭結(jié)構(gòu)的精簡(jiǎn)版。YOLOv6將YOLOX檢測(cè)頭中的兩個(gè)3×3卷積層,改為一個(gè)3×3卷積層并采用混合通道策略來減少網(wǎng)絡(luò)延遲。在YOLOv6檢測(cè)頭的基礎(chǔ)上,去掉了第一個(gè)用于維度調(diào)整的1×1卷積層;用1個(gè)基礎(chǔ)MobileOne block模塊代替標(biāo)準(zhǔn)的3×3卷積層,構(gòu)建了一個(gè)輕量化的解耦檢測(cè)頭(如圖3所示)。與YOLOv6檢測(cè)頭相比,參數(shù)數(shù)量減少了約40%。
圖3 輕量化解耦檢測(cè)頭結(jié)構(gòu)
2.5.1 SIoU邊界框回歸損失
邊界框回歸損失經(jīng)過數(shù)年的發(fā)展,從L1/L2 Loss到IoU、GIoU、CIoU[19]Loss等。這些損失函數(shù)一步步將預(yù)測(cè)框與目標(biāo)框之前的重疊程度、重疊的位置、中心點(diǎn)距離、縱橫比等因素考慮邊界框回歸任務(wù)中。通過這些因素來衡量預(yù)測(cè)框與目標(biāo)框之間的差距,從而指導(dǎo)網(wǎng)絡(luò)最小化損失以提升回歸精度。
以上這些方法都沒有考慮到預(yù)測(cè)框與目標(biāo)框之間方向的匹配性。因此,文中模型采用了SIoU[20]邊界框回歸損失,SIoU損失函數(shù)通過引入所需回歸之間的向量角度,重新定義了距離損失,有效降低了回歸的自由度,進(jìn)一步提升了回歸精度[20]。為了更加直觀了解不同的損失函數(shù)對(duì)精度的影響,在Rep-YOLO-s0和Rep-YOLO-s1上進(jìn)行對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表3所示,可以看出,使用SIoU損失函數(shù)訓(xùn)練的模型精度最高。
表3 損失函數(shù)對(duì)比
2.5.2 激活函數(shù)
為了分析激活函數(shù)對(duì)延時(shí)的影響,以Rep-YOLO-s0為基準(zhǔn),在RTX 3060上使用不同的激活函數(shù)進(jìn)行了消融實(shí)驗(yàn)(如表4所示)。表4中的所有模型,除了激活函數(shù)之外,都有相同的結(jié)構(gòu),但它們的延時(shí)卻是不同的。從實(shí)驗(yàn)可以看出,使用ReLU激活函數(shù)的模型的延遲最小。ReLU是目前設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)時(shí)使用最為廣泛的激活函數(shù),如果輸入值為負(fù)數(shù),ReLU函數(shù)會(huì)轉(zhuǎn)換為0,神經(jīng)元不會(huì)被激活。這意味著在一段時(shí)間內(nèi)只有少量的神經(jīng)元被激活,這種稀疏性使得它的計(jì)算效率更高,使整個(gè)過程的計(jì)算量大大降低,從而減少延時(shí)。
表4 激活函數(shù)延時(shí)對(duì)比
實(shí)驗(yàn)環(huán)境:11th Gen Intel(R) Core(TM) i7-11700 @ 2.50 GHz 16 GB內(nèi)存,Nvidia GeForce GTX3060顯卡,顯存為12 GB。IDE平臺(tái)為PyCharm,編程語言為Python3.6。Cuda版本為11.3,Cudann版本為8.2.0,使用Pytorch框架搭建網(wǎng)絡(luò)模型,進(jìn)行訓(xùn)練與驗(yàn)證。
數(shù)據(jù)集:使用PASCAL VOC(07+12)數(shù)據(jù)集,該數(shù)據(jù)集中包含20個(gè)類別,共21 503張圖片。其中訓(xùn)練數(shù)據(jù)包含16 551張圖片,共40 058個(gè)目標(biāo);驗(yàn)證數(shù)據(jù)包含4 952張圖片,共12 032個(gè)目標(biāo)。
所有的模型都是在PASCAL VOC數(shù)據(jù)集上從頭開始訓(xùn)練的,輸入圖像大小為416×416,訓(xùn)練輪次(epoch)為300次,批次大小設(shè)置為16。訓(xùn)練過程中,對(duì)訓(xùn)練數(shù)據(jù)使用mosaic數(shù)據(jù)增強(qiáng)和mixup數(shù)據(jù)增強(qiáng)數(shù)據(jù)預(yù)處理技術(shù)進(jìn)行處理,使得在訓(xùn)練過程中有70%的epochs,開啟了mosaic數(shù)據(jù)增強(qiáng),其中每個(gè)step有50%的圖片使用了mosaic數(shù)據(jù)增強(qiáng),并且對(duì)mosaic增強(qiáng)后的圖片中50%圖片進(jìn)行 mixup[21]數(shù)據(jù)增強(qiáng)。使用SGD優(yōu)化器,動(dòng)量設(shè)置為0.937,標(biāo)簽平滑(label smoothing)因子設(shè)置為0.01。初始學(xué)習(xí)率為1e-2,學(xué)習(xí)率下降方式為余弦學(xué)習(xí)率衰減,使用L2權(quán)重衰減,權(quán)重值為5e-4。
結(jié)構(gòu)重參數(shù)化技術(shù)是Rep-YOLO減少推理延時(shí)的關(guān)鍵(減少內(nèi)存訪問成本)。為了更好地理解使用結(jié)構(gòu)重參數(shù)化技術(shù)帶來的改進(jìn),進(jìn)行了對(duì)比實(shí)驗(yàn),除了是否使用結(jié)構(gòu)重參數(shù)化技術(shù)進(jìn)行訓(xùn)練結(jié)構(gòu)與推理結(jié)構(gòu)之間的切換之外,保持所有模型的結(jié)構(gòu)和訓(xùn)練條件不變。比較結(jié)構(gòu)重參數(shù)化前后的推理延時(shí),實(shí)驗(yàn)結(jié)果如表5所示。結(jié)果顯示,模型經(jīng)過重參數(shù)化后,推理速度可以提高29%~40%。
表5 結(jié)構(gòu)重參數(shù)化前后對(duì)推理延時(shí)的影響
Rep-YOLO與其他先進(jìn)的輕量化YOLO版本對(duì)比如表6、圖4所示??梢钥闯?在類似規(guī)模的模型中,Rep-YOLO實(shí)現(xiàn)了速度與精度的良好平衡。比較如下:
表6 與其他先進(jìn)算法對(duì)比
圖4 算法對(duì)比
(1)Rep-YOLO-s4精度達(dá)到84.7%AP,推理延時(shí)為10.06 ms。Rep-YOLO-s4與YOLOv7進(jìn)行比較,雖然模型在精度上低于YOLOv7,但Rep-YOLO-s4的參數(shù)量下降了51.7%,Rep-YOLO-s4的onnx模型大小是YOLOv7的48.1%。此外,Rep-YOLO-s3和Rep-YOLO-s2在檢測(cè)精度和速度上也優(yōu)于YOLOXs和YOLOv6s。
(2)Rep-YOLO-s1與YOLOxs對(duì)比,文中模型的推理延時(shí)減少了3.38 ms,檢測(cè)精度提升了3.2百分點(diǎn)。另外,在參數(shù)量使用方面,Rep-YOLO-s1較YOLOv6s的參數(shù)量減少了9.43M,浮點(diǎn)運(yùn)算量降低了10.17G,但是精度提升了2.4百分點(diǎn)。
(3)Rep-YOLO-s0與其他的tiny版本模型相比,其精度最高。較YOLOv7-tiny,精度提升了2.6百分點(diǎn)。較YOLOv6-tiny,在參數(shù)量和計(jì)算量更小的情況下,精度提升了0.7百分點(diǎn)。與YOLOv6s相比,在精度相當(dāng)?shù)那闆r下,Rep-YOLO-s0的推理速度提升了10.7%。
(4)推理延時(shí)為6.70 ms的Rep-YOLO-nano與推理延時(shí)為10.9 ms的YOLOX-nano相比,Rep-YOLO-nano的精度提升了7.8百分點(diǎn)。Rep-YOLO-nano與規(guī)模相當(dāng)?shù)腨OLOv6-nano相比,精度提升了0.3百分點(diǎn),推理延時(shí)減少了0.31 ms。Rep-YOLO-nano與YOLOv7-tiny相比,參數(shù)量下降了47.4%,精度提升了0.5百分點(diǎn)。
(5)圖4直觀展示了Rep-YOLO與其他規(guī)模類似的算法在精度、 檢測(cè)速度和參數(shù)量大小方面的對(duì)比情況,越處于左上角的線表示算法的綜合性能越好。從圖7可以看出,文中算法Rep-YOLO位于較上方的位置,具有一定的優(yōu)勢(shì)。
介紹了在輕量化網(wǎng)絡(luò)設(shè)計(jì)方面的經(jīng)驗(yàn),在骨干網(wǎng)絡(luò)、多尺度特征融合和檢測(cè)頭等方面的設(shè)計(jì)優(yōu)化進(jìn)行了研究。為了進(jìn)一步改善目標(biāo)檢測(cè)算法消耗大量計(jì)算資源的問題,基于結(jié)構(gòu)重參數(shù)化技術(shù)提出了一個(gè)輕量化的目標(biāo)檢測(cè)網(wǎng)絡(luò)模型。
在研究過程中,分析了輕量化網(wǎng)絡(luò)設(shè)計(jì)的關(guān)鍵因素,通過結(jié)構(gòu)重參數(shù)化技術(shù)將訓(xùn)練過程與推理過程解耦。在模型Rep-YOLO中引入了MobileOne style的結(jié)構(gòu),并設(shè)計(jì)了DRep-PAN Neck和輕量化的解耦檢測(cè)頭。實(shí)驗(yàn)結(jié)果表明,Rep-YOLO與其他類似規(guī)模的模型相比,在保持精度相當(dāng)?shù)那闆r下,擁有更小的體積和更少的延時(shí)。
未來會(huì)進(jìn)一步對(duì)模型進(jìn)行優(yōu)化,持續(xù)提升檢測(cè)性能,并在多種的硬件平臺(tái)上進(jìn)行實(shí)際場(chǎng)景應(yīng)用。