朱 郝,楊世恩,陳春梅
(1.西南科技大學 計算機科學與技術學院,四川 綿陽 621010;2.西南科技大學 信息工程學院,四川 綿陽 621010)
目標檢測是計算機視覺領域的熱門研究方向,經過數十年的發展,在生活中得到了廣泛的運用,例如監控安全、人臉檢測、自動駕駛等。目前,現有的主流圖像目標檢測算法可以分為兩類:一類是二階段的檢測算法,先由算法生成一系列作為樣本的候選框,再通過卷積神經網絡進行樣本分類,檢測精度較高,檢測速度較慢,如RCNN、Fast R-CNN、Faster R-CNN等;另一類是一階段的檢測算法[1],只需一次提取特征即可實現目標檢測,其速度相比二階段的算法快,但檢測精度會有所下降,如SSD、YOLO系列等;其中基于一階段的YOLO系列目標檢測算法最具有代表性,因其較好的綜合性能,逐漸成為大多數實際應用的首選框架。
由于基于卷積神經網絡的圖像處理算法相較于傳統的算法[2],具有更好的魯棒性,于是越來越來多的研究者提出了更具有表征能力的深層網絡,使得模型變得越來越復雜。盡管復雜的模型能夠提供更高的精度,但也產生了一些問題:模型復雜度高,占用大量計算資源,不利于算法的落地應用。于是相關工作[3-5]利用骨干網絡替換、深度可分離卷積、網絡剪枝等方法減少模型的參數量(Parameter Count)和浮點運算量(FLOPs),達到網絡輕量化的目的。但上述兩種度量指標并沒有考慮內存的訪問成本和并行度,可能會對模型的推理速度產生較大的影響。為了進一步提高模型的推理速度,于是有了結構重參數化(structural re-parameterization technique)相關工作,如RepVGG[6-8]等。RepVGG將訓練時的多分支結構和推理時的普通線性結構進行解耦,使用多分支拓撲結構進行訓練,而后通過結構重參數化技術將多分支拓撲結構轉為普通線性結構進行推理,這樣既能保持多分支結構相當的魯棒性,又能提高模型的推理速度。
為了進一步改善上述目標檢測算法所存在的問題,該文基于結構重參數化技術設計了一個高效的輕量化目標檢測框架。在維持較高的檢測精度的同時,盡可能降低模型的規模大小。為了實現這一目標,結合YOLO系列算法的研究成果,該文設計了一個新的輕量化目標檢測框架Rep-YOLO,其通過結構重參數化技術來解耦訓練過程和推理過程,從而優化延時。
主要貢獻如下:
(1)提出了Rep-YOLO,一種輕量化目標檢測架構,與其他精度相當的算法相比,規模更小,檢測速度更快。
(2)引入MobileOne[9]Style結構,并基于結構重參數化技術重新設計了Backbone和Neck。
(3)設計了一個輕量化解耦檢測頭(Decoupled Head)。
You Only Look Once(YOLO)是一種基于圖像全局信息進行預測的一階段的目標檢測算法。自2015年Joseph Redmon[10]等人提出初代模型以來,領域內的研究者們已經對YOLO進行多次更新迭代,使得模型性能越來越強大。從YOLOv1到YOLOv7已經是一個龐大的家族。
主流的YOLO系列主要由四個部分構成[11],分別為Input層、Backbone層、Neck層、Head層。Input層先對圖像進行預處理,Backbone層可以是VGG、MobileNet、RepVGG、EfficientRep和E-ELAN等骨干網絡,以及附加模塊SPP、SimSPPF[12]、ASPP等。Neck層由幾個自下而上的路徑和幾個自上而下的路徑組成,如FPN、PAN、BiFPN等。對于Head層,包含YOLOv3-v5[11-13]中采用的耦合檢測頭(Coupled Head)、YOLOX[14]使用的解耦檢測頭(Decoupled Head)和YOLOv6中的高效檢測頭(Efficient Decoupled Head),YOLOv7[15]在Coupled Head的基礎上增加了輔助訓練頭(auxiliary Head)。
MobileOne[9]是蘋果公司研究人員于2022年提出的一種高效的移動設備骨干網絡。在主流的高效網絡中,在ImageNet上達到了SOTA的精度。與之前關于結構重參數化的工作一樣,MobileOne在訓練時采用分支拓撲結構,在推理時采用重參數化后的線性結構,便可減少內存訪問成本,提高模型推理速度。MobileOne的結構如圖1所示。MobileOne模塊有兩種不同的結構用于訓練和推理。圖1的左邊是基于深度卷積的訓練結構,上面是深度卷積,下面是點卷積。圖1的右邊展示了經過結構重參數化后的推理結構。

圖1 MobileOne block結構
在本節中,分析了輕量化模型設計中的FLOPs和Parameter Count這兩個度量指標與推理延時的相關性。其次,在主流的YOLO系列的總體框架基礎上,分別從以下三個方面對Rep-YOLO的架構進行描述:Backbone、Neck和Head;并對主要的訓練策略進行介紹。
通常,網絡的輕量化設計一般是通過降低Parameter Count和FLOPs這兩個指標參數進行的,筆者也進行了相關的實驗。以目前改進最多的YOLOv4為例,使用輕量化的骨干網絡替換YOLOv4的Backbone,并將Neck和Head中的標準3×3卷積替換為深度可分離卷積。相關實驗結果如表1,通過降低Parameter Count和FLOPs改進而來的YOLOv4,其推理延時明顯減少。但總體上來看,改進的YOLOv4與參數量更大的YOLOv6s/v7相比在推理速度上并沒有更快,可以看出推理延時和以上兩個指標的相關性并不是特別強。其次,由于MobileNetv1-YOLOv4中不含殘差結構,所以擁有更低的延時。因此,僅僅考慮減少參數量和浮點運算量這兩個因素是不夠的,還要考慮內存訪問成本和并行度等因素,從而設計出一個高效推理結構。

表1 指標相關性實驗
YOLOv5/YOLOX/YOLOv7的Backbone和Neck都是基于CSPNet[17]搭建,采用的是多分支結構或者殘差結構。對于GPU等硬件來說,這種結構一定程度上會增加延時,同時減小內存帶寬利用率。YOLOv7中的ELAN模塊是一個輸入和輸出相等的多分支結構,優點是可以提出更多的特征信息,擁有更好的魯棒性。盡管如此,多分支結構在一定程度上會導致內存訪問成本的增加,導致更多延時。因此,該文綜合考慮內存訪問成本和并行度等因素(如2.1所述),構建了MOne Backbone和DRep-PAN,其主要內容如下:
(1)引入了MobileOne block style結構。
(2)基于結構重參數化技術重新設計了Backbone和Neck。
MobileOne block style結構是一種在訓練時具有多分支拓撲,而在實際部署時可以等效融合為單個3×3深度卷積和一個1×1逐點卷積的可重參數化的結構(參考圖1)。
MOne Backbone:在Backbone設計方面,基于以上的MobileOne block style結構設計了一個高效的backbone。相比于YOLOv5、YOLOX、YOLOv7等基于CSPNet的結構,MobileOne block style結構能夠通過融合成的3×3卷積結構(單路結構),有效利用計算密集型硬件計算能力(比如GPU),同時也可獲得GPU/CPU上已經高度優化的NVIDIA cuDNN和Intel MKL編譯框架的幫助[13]。
MOne Backbone的結構如圖2所示,原始的MobileOne是進行圖像分類的網絡,去掉最后的平均池化層和線性層,將剩下的部分作為文中算法的Backbone,并且保留了MobileOne所采用的縮放策略,引入了6種不同規格的Backbone(如表2所示)。在Backbone最后的附加模塊中,采用的是YOLOv6所提到的SimSPPF,與YOLOv5中的SPPF不同的是SimSPPF的三個池化核大小都為5,其作用是能夠有效避免對圖像區域裁剪、縮放操作導致的圖像失真等問題。

表2 MOne Backbone網絡規格配置

圖2 文中算法模型結構
DRep-PAN基于PAN[18]拓撲方式(如圖2的Neck所示)。與YOLOv6的Neck結構相似,進行多尺度特征融合。與YOLOv6不同的之處在于,使用深度可分離卷積替換了標準的3×3卷積來降低3×3卷積的參數量,用MobileOne block替換了YOLOv6中的RepBlock,同時對整體Neck中的其他算子進行了調整,目的是在硬件上達到高效推理的同時,保持較好的多尺度特征融合能力。
YOLOv6的Efficient Decouple Head結構是YOLOX檢測頭結構的精簡版。YOLOv6將YOLOX檢測頭中的兩個3×3卷積層,改為一個3×3卷積層并采用混合通道策略來減少網絡延遲。在YOLOv6檢測頭的基礎上,去掉了第一個用于維度調整的1×1卷積層;用1個基礎MobileOne block模塊代替標準的3×3卷積層,構建了一個輕量化的解耦檢測頭(如圖3所示)。與YOLOv6檢測頭相比,參數數量減少了約40%。

圖3 輕量化解耦檢測頭結構
2.5.1 SIoU邊界框回歸損失
邊界框回歸損失經過數年的發展,從L1/L2 Loss到IoU、GIoU、CIoU[19]Loss等。這些損失函數一步步將預測框與目標框之前的重疊程度、重疊的位置、中心點距離、縱橫比等因素考慮邊界框回歸任務中。通過這些因素來衡量預測框與目標框之間的差距,從而指導網絡最小化損失以提升回歸精度。
以上這些方法都沒有考慮到預測框與目標框之間方向的匹配性。因此,文中模型采用了SIoU[20]邊界框回歸損失,SIoU損失函數通過引入所需回歸之間的向量角度,重新定義了距離損失,有效降低了回歸的自由度,進一步提升了回歸精度[20]。為了更加直觀了解不同的損失函數對精度的影響,在Rep-YOLO-s0和Rep-YOLO-s1上進行對比實驗,實驗結果如表3所示,可以看出,使用SIoU損失函數訓練的模型精度最高。

表3 損失函數對比
2.5.2 激活函數
為了分析激活函數對延時的影響,以Rep-YOLO-s0為基準,在RTX 3060上使用不同的激活函數進行了消融實驗(如表4所示)。表4中的所有模型,除了激活函數之外,都有相同的結構,但它們的延時卻是不同的。從實驗可以看出,使用ReLU激活函數的模型的延遲最小。ReLU是目前設計神經網絡時使用最為廣泛的激活函數,如果輸入值為負數,ReLU函數會轉換為0,神經元不會被激活。這意味著在一段時間內只有少量的神經元被激活,這種稀疏性使得它的計算效率更高,使整個過程的計算量大大降低,從而減少延時。

表4 激活函數延時對比
實驗環境:11th Gen Intel(R) Core(TM) i7-11700 @ 2.50 GHz 16 GB內存,Nvidia GeForce GTX3060顯卡,顯存為12 GB。IDE平臺為PyCharm,編程語言為Python3.6。Cuda版本為11.3,Cudann版本為8.2.0,使用Pytorch框架搭建網絡模型,進行訓練與驗證。
數據集:使用PASCAL VOC(07+12)數據集,該數據集中包含20個類別,共21 503張圖片。其中訓練數據包含16 551張圖片,共40 058個目標;驗證數據包含4 952張圖片,共12 032個目標。
所有的模型都是在PASCAL VOC數據集上從頭開始訓練的,輸入圖像大小為416×416,訓練輪次(epoch)為300次,批次大小設置為16。訓練過程中,對訓練數據使用mosaic數據增強和mixup數據增強數據預處理技術進行處理,使得在訓練過程中有70%的epochs,開啟了mosaic數據增強,其中每個step有50%的圖片使用了mosaic數據增強,并且對mosaic增強后的圖片中50%圖片進行 mixup[21]數據增強。使用SGD優化器,動量設置為0.937,標簽平滑(label smoothing)因子設置為0.01。初始學習率為1e-2,學習率下降方式為余弦學習率衰減,使用L2權重衰減,權重值為5e-4。
結構重參數化技術是Rep-YOLO減少推理延時的關鍵(減少內存訪問成本)。為了更好地理解使用結構重參數化技術帶來的改進,進行了對比實驗,除了是否使用結構重參數化技術進行訓練結構與推理結構之間的切換之外,保持所有模型的結構和訓練條件不變。比較結構重參數化前后的推理延時,實驗結果如表5所示。結果顯示,模型經過重參數化后,推理速度可以提高29%~40%。

表5 結構重參數化前后對推理延時的影響
Rep-YOLO與其他先進的輕量化YOLO版本對比如表6、圖4所示。可以看出,在類似規模的模型中,Rep-YOLO實現了速度與精度的良好平衡。比較如下:

表6 與其他先進算法對比

圖4 算法對比
(1)Rep-YOLO-s4精度達到84.7%AP,推理延時為10.06 ms。Rep-YOLO-s4與YOLOv7進行比較,雖然模型在精度上低于YOLOv7,但Rep-YOLO-s4的參數量下降了51.7%,Rep-YOLO-s4的onnx模型大小是YOLOv7的48.1%。此外,Rep-YOLO-s3和Rep-YOLO-s2在檢測精度和速度上也優于YOLOXs和YOLOv6s。
(2)Rep-YOLO-s1與YOLOxs對比,文中模型的推理延時減少了3.38 ms,檢測精度提升了3.2百分點。另外,在參數量使用方面,Rep-YOLO-s1較YOLOv6s的參數量減少了9.43M,浮點運算量降低了10.17G,但是精度提升了2.4百分點。
(3)Rep-YOLO-s0與其他的tiny版本模型相比,其精度最高。較YOLOv7-tiny,精度提升了2.6百分點。較YOLOv6-tiny,在參數量和計算量更小的情況下,精度提升了0.7百分點。與YOLOv6s相比,在精度相當的情況下,Rep-YOLO-s0的推理速度提升了10.7%。
(4)推理延時為6.70 ms的Rep-YOLO-nano與推理延時為10.9 ms的YOLOX-nano相比,Rep-YOLO-nano的精度提升了7.8百分點。Rep-YOLO-nano與規模相當的YOLOv6-nano相比,精度提升了0.3百分點,推理延時減少了0.31 ms。Rep-YOLO-nano與YOLOv7-tiny相比,參數量下降了47.4%,精度提升了0.5百分點。
(5)圖4直觀展示了Rep-YOLO與其他規模類似的算法在精度、 檢測速度和參數量大小方面的對比情況,越處于左上角的線表示算法的綜合性能越好。從圖7可以看出,文中算法Rep-YOLO位于較上方的位置,具有一定的優勢。
介紹了在輕量化網絡設計方面的經驗,在骨干網絡、多尺度特征融合和檢測頭等方面的設計優化進行了研究。為了進一步改善目標檢測算法消耗大量計算資源的問題,基于結構重參數化技術提出了一個輕量化的目標檢測網絡模型。
在研究過程中,分析了輕量化網絡設計的關鍵因素,通過結構重參數化技術將訓練過程與推理過程解耦。在模型Rep-YOLO中引入了MobileOne style的結構,并設計了DRep-PAN Neck和輕量化的解耦檢測頭。實驗結果表明,Rep-YOLO與其他類似規模的模型相比,在保持精度相當的情況下,擁有更小的體積和更少的延時。
未來會進一步對模型進行優化,持續提升檢測性能,并在多種的硬件平臺上進行實際場景應用。