天天看點

YOLO算法改進Backbone系列之:ParC-Net

作者:Nuist目标檢測

最近視覺transformer開始顯示出令人印象深刻的結果,其性能明顯優于基于大卷積的模型。然而,在移動裝置或資源受限裝置的小型模型領域,卷積神經網絡在性能和模型複雜性方面仍然具有自身的優勢。本文提出了ParC-Net,這是一種純粹基于卷積神經網絡的骨幹模型,通過将視覺transformer的優點融合到卷積神經網絡中,進一步增強了這些優點。具體來說,我們提出了位置感覺循環卷積(ParC),這是一種輕量級的卷積算子,它具有全局接受場,同時産生與局部卷積一樣的位置敏感特征。我們将parc和squeeze-exictation點結合在一起,形成了一個類似于metaformer的模型塊,該模型塊進一步具有類似于transformer的注意機制。

上述子產品可以以即插即用的方式替代卷積網絡或transformer中的相關子產品。實驗結果表明,在常見的視覺任務和資料集上,所提出的ParC-Net在參數更少、推理速度更快的情況下,取得了比流行的輕量級卷積神經網絡和基于視覺transformer的模型更好的性能。在ImageNet-1k上,ParC-Net使用約500萬個參數實作了78.6%的top-1準确率,節省了11%的參數和13%的計算成本,但與MobileViT相比,準确率提高了0.2%,推理速度提高了23%(基于ARM的瑞芯RK3288),與DeIT相比,僅使用0.5個參數,準确率提高了2.7%。在MS-COCO對象檢測和PASCAL VOC分割任務上,ParC-Net也表現出較好的性能。源代碼可在https: //github.com/hkzhang91/ParC-Net

背景:ViTs和ConvNets都是必不可少的:

(1)從應用角度來看,ViTs和ConvNets都有各自的優點和缺點。ViT模型通常具有較好的性能,但通常存在計算成本高且難以訓練的問題。與ViTs相比,ConvNets的性能可能會有所下降,但仍有一些獨特的優勢。例如,ConvNets有更好的硬體支援,并且易于訓練。

(2)從資訊處理的角度來看,ViT和ConvNets都有各自的特點。ViT擅長提取全局資訊,利用注意力機制在輸入資料的驅動下提取不同位置的資訊。ConvNets專注于局部關系的模組化,并且通過歸納偏差具有很強的先驗。

本文貢獻:

(1)為了克服傳統卷積感覺域有限的限制,我們提出了位置感覺循環卷積(ParC),其中使用基執行個體核心和位置嵌入政策分别處理輸入大小變化和向輸出特征圖注入位置資訊。我們将提出的ParC和傳統的卷積運算結合起來提取局部-全局特征,提高了提取的精度

(2)我們提出了ParC-Net,一個純ConvNet的移動和邊緣計算應用。本文提出的ParCNet繼承了ConvNet和ViT的優點。據我們所知,這是第一次嘗試結合ConvNets和vit的優勢來設計輕量級的ConvNet

(3)我們将提出的ParC-Net應用于三個視覺任務。與基線模型相比,本文提出的ParC-Net在三個任務上都取得了更好的性能,同時具有更少的參數、更低的計算成本和更高的推理速度

自注意從整個空間位置學習全局特征,而卷積從局部接受野收集資訊。本文提出了位置感覺循環卷積(ParC),ParC有兩種類型,一種是垂直方向的ParC (ParC- v),另一種是水準方向的ParC (ParC- h)。ParC-V和ParC-H的接受野分别覆寫同一列和同一行的所有像素。聯合使用ParC-V和ParC-H可以從所有輸入像素中提取全局特征。

YOLO算法改進Backbone系列之:ParC-Net

上面介紹了ParC塊,這是一個基本的塊,可以插入到大多數現有的模型中。目前如下圖所示,現有的混合結構基本可以分為三種主要結構,分别是串聯結構、并聯結構和分叉結構。對于ParC_Net 的搭建,作者直接基于MobileViT,采用了分叉結構完成了網絡的搭建。具體而言,作者保留了MobileViT中淺層具有局部感受野的MobileNetV2結構,而将網絡深層的ViT block替換成了ParC block,使網絡變成了一個pure ConvNet。

YOLO算法改進Backbone系列之:ParC-Net

在YOLOv5項目中添加ParC_Net模型作為Backbone使用的教程:

(1)将YOLOv5項目的models/yolo.py修改parse_model函數以及BaseModel的_forward_once函數

YOLO算法改進Backbone系列之:ParC-Net
YOLO算法改進Backbone系列之:ParC-Net

(2)在models/backbone(建立)檔案下建立ParC_convnext.py,添加如下的代碼:

YOLO算法改進Backbone系列之:ParC-Net

(3)在models/yolo.py導入模型并在parse_model函數中修改如下(先導入檔案):

YOLO算法改進Backbone系列之:ParC-Net

(4)在model下面建立配置檔案:yolov5_ParC_convnext.yaml

YOLO算法改進Backbone系列之:ParC-Net

(5)運作驗證:在models/yolo.py檔案指定--cfg參數為建立的yolov5_ParC_convnext.yaml

YOLO算法改進Backbone系列之:ParC-Net

繼續閱讀