天天看點

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

論文位址:https://arxiv.org/abs/1911.11929

代碼位址:https://github.com/WongKinYiu/CrossStagePartialNetworks.

論文總結

  

本文的目的旨在優化之前含有ShortCut結構的網絡,比如DenseNet和ResNet。

其圍繞的中心思想是網絡優化中的重複梯度資訊,以此來優化之前網絡中所需要的大量推理計算問題。最後,優化的網絡結構在ImageNet和MS COCO上都有好的結果。是以可以初步認為具有足夠的泛化能力。

論文介紹

  設計CSPNet的主要目的是使這個體系結構能夠實作更豐富的梯度組合,同時減少計算量。換句話說,就是既希望能有更好的模型表達能力,又希望能減少模型計算消耗。

  作者認為,所提出的基于CSPNet的目标檢測模型解決了如下三個問題:(1)

強化了CNN的學習能力

。所提出的CSPNet可簡單地被應用在ResNet、ResNextXt和DenseNet中,計算量可減少 10 10 10% ~ 20 20 20%;(2)

移除計算瓶頸層

。太高的計算瓶頸将會需要更多的周期來完成推理過程。作者像均分CNN各層,進而提高每個計算單元的使用率,進而減少不必要的能量消耗。比如在Yolov3上,就能減少 80 80 80%的計算瓶頸;(3)

減少記憶體占用

。作者在特征金字塔生成的過程中,通過跨通道池化的操作來壓縮特征映射所需要的計算消耗。

  CSPNet特征金字塔過程如下:

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  在算法性能上,本文方法,在1080ti上,達到了 109 109 109FPS – 50 50 50%的COCO A P 50 AP_{50} AP50​;在Intel Core i9-9900K上,達到了 52 52 52FPS – 40 40 40%的COCO A P 50 AP_{50} AP50​;在嵌入式GPU Nvidia Jetson Tx2上,達到了 49 49 49FPS – 42 42 42%的COCO A P 50 AP_{50} AP50​。

算法細節

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  傳統的DenseNet如上圖(a)所示,而本文設計的經過優化的CSPDenseNet如上圖(b)所示。直白的來看,CSPDenseNet就是将輸入的feature map按照channel分成了兩個部分,其中一個部分正常進行Dense Block的操作,另一個部分直接進行Concat操作。由于每個Dense Block操作的輸入通道都變少了(第一個直接減少,後面Concat的通道數變少),是以能減少計算量。

  進行Concat的方式,有下圖幾種。本文所提出的 Transition Layer,過渡層,實際上也就是一組 1 ∗ 1 1*1 1∗1卷積,用于減少歧義性,使其更能融合。下圖(c)的方式,會讓大量的梯度資訊被重複利用,有利于學習;下圖(d)的方式,梯度流被阻斷,不能複用梯度資訊。但由于Transition層的輸入通道比 (c)要少,是以能大大減少計算複雜度。本文采用的( b )就是結合了(c)和(d)的優點。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  各種Concat融合特征的方式的結果如下圖所示:若采用Fusion Last的方式與分類任務中,計算耗費巨大,但隻損失 1 1 1%的 top-1 精度;而若采用Fusion First的方式,會損失 1.5 1.5 1.5% 的 top-1 精度,但能夠減少計算耗費。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN
CSPResNet

  對于ResNet的改造,如下圖所示:

但實際應用時(源碼中檢視),并不如下圖所展示的一般分為Part1和Part2兩個分開的channel,而是兩個分支都包含全部的channel,再分别通過 1 ∗ 1 1*1 1∗1卷積,分别得到 1 2 \frac12 21​的output channel。而Part2的分支經過 1 ∗ 1 1*1 1∗1卷積後,再通過沒有BottleNect的ResNet Block, 1 ∗ 1 1*1 1∗1卷積後才得到該分支的輸出

。即兩組分支在進行Concat前,分别進行了 1 ∗ 1 1*1 1∗1卷積的作用。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  CSPResNet的cfg結構可視化如下圖所示:

在一個stage中stride=2的卷積,提前放在了前面進行

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

特征融合

  在設計特征融合方式的時候,作者也做了獨特的設計,如下圖所示:基本可以認為是多階段的特征融合,這也是比較常見的。值得特别說的就是,不同stage的下采樣融合時,采用的是pooling,而不是卷積,用以壓縮特征映射所需要的操作。該子產品被稱為EFM。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

論文實驗

  作者在ImageNet分類資料集上驗證CSPNet,然後在MS COCO資料集上驗證EFM。

網絡細節

  

ImageNet

。在分類任務上,所有的超參數,比如訓練steps,學習率lr,學習率方案lr schedule,優化器,資料增強等都和Yolov3論文中的設定一樣。對于ResNet-based和ResNeXt-based的模型,設定 8 , 000 , 000 8,000,000 8,000,000個訓練steps。對于DenseNet-based的模型,設定 1 , 600 , 000 1,600,000 1,600,000個訓練steps。設定初始化學習率為 0.1 0.1 0.1,多項式衰減學習率,動量和權重衰減設為 0.9 0.9 0.9和 0.005 0.005 0.005。所有的架構都使用一個GPU,batch size設定為 128 128 128。

  

MS COCO

。在目标檢測任務上,所有的超參數都和Yolov3論文中一樣。總共使用 500 , 000 500,000 500,000個訓練steps。采用衰減率為 0.1 0.1 0.1的學習率政策,分别在 400 , 000 400,000 400,000和 450 , 000 450,000 450,000個疊代時衰減。動量和權重衰減設為 0.9 0.9 0.9和 0.0005 0.0005 0.0005。所有的架構都都在一個GPU上,使用batch size為64的多尺度訓練。

消融學習

  

在ImageNet的消融學習上

,使用PeleeNet作為CSPNet實驗的baseline。在劃分channel時,使用不同的劃分率 γ \gamma γ和不同的特征融合政策用于消融學習。下表展示了CSPNet的消融學習結果。下表中,SPeleeNet和PeleeNeXt分别引入了稀疏聯合和group convolution。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  從實驗結果看,如果隻使用fusion first的CSP在CSP dense block中,CSPNet的表現要比SPeleeNet和PeleeNeXt要稍微好一些。但是,partial transition layer被設計去減少網絡運作負擔的同時可以達到好的效果。比如計算量減少 21 21 21%時,準确度隻衰減 0.1 0.1 0.1%。需要被注意的是,當 γ = 0.25 \gamma=0.25 γ=0.25時,計算量減少 11 11 11%,但精确度增加了 0.1 0.1 0.1%。相較于baseline的PeleeNet,CSPPeleeNet獲得了更好的性能。其減少了 13 13 13%的計算量,但增加了 0.2 0.2 0.2%的精确度。如果調整 γ = 0.25 \gamma=0.25 γ=0.25,可以使得CSPPeleeNet提升 0.8 0.8 0.8%的精确度,同時減少 3 3 3的計算量。

  

在MS COCO上對EFM的消融學習

。對上面的三種特征融合方式(FPN/GFM/EFM)進行特征融合。在模型上,選擇了兩款輕量級模型ThunderNet和PRN進行比較。PRN是特征金字塔網絡。作者設計了一個全局融合模型(GFM)和所提出的EFM進行比較。然後,使用GIoU,SPP和SAM應用在EFM上,進行消融學習。結果如下表所示。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  上面的結果顯示:EFM比GFM慢了 2 2 2FPS,但 A P AP AP和 A P 50 AP_{50} AP50​提升了 2.1 2.1 2.1%和 2.4 2.4 2.4%。盡管GIoU的使用可以将 A P AP AP提升 0.7 0.7 0.7%,但 A P 50 AP_{50} AP50​卻顯著降低了 2.7 2.7 2.7%。然而,對于邊緣計算來說,真正重要的是對象的數量和位置,而不是他們的坐标。是以,在後續模型中不會再使用GIoU用于訓練。對比SPP這種增加感受野的機制,SAM使用attention機制可以得到更好的幀率和 A P AP AP,是以後面的架構使用EFM(SAM)。此外,CSPPeleeNet使用swish激活函數可以提高 A P 0.1 AP 0.1 AP0.1%。但這個算子需要在硬體設計上有一個查找表來加速,是以最終作者還是放棄了swish激活函數。

ImageNet分類任務

  将CSPNet應用在ResNet-10,ResNeXt-50,PeleeNet和DenseNet–201-Elastic,與其他最先進的模型的比較結果,如下表所示。結果表示,不管是哪個引入的模型,引入CSPNet的概念後,計算負荷至少減少了10%,而精度要麼不變,要麼有所提高。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  EfficientNet-B0中所使用的swish激活函數和SE block對于移動端CPU來說并不是十分有效率。這點在EfficientNet-EdgeTPU上也有相似的分析。EfficientNet-B0論文中的 76.8 76.8 76.8%精度,當batch size為2048。但在本文的實驗中,和其他實驗一樣的配置,一個GPU,EfficientNet-B0隻能達到 70.0 70.0 70.0%的精度。

  但為了表示CSPNet的學習能能力,将swish激活函數和SE block放入CSPPeleeNet中,然後與EfficientNet-B0*作比較。上表展示,SECSPPeleeNet-swish減少了 3 3 3%的計算量,增加了 1.1 1.1 1.1%的top-1 精度。

  與其他網絡的比較,不管參數量,計算耗費等,CSPResNeXt-50都達到了最好的結果。

MS COCO目标檢測

  在目标檢測任務上,針對三個場景:(1)GPU上實時,采用CSPResNeXt50和PANet(SPP);(2)移動GPU端上實時,采用CSPPeleeNet,CSPPeleeNet Reference和帶着EFM(SAM)的CSPDenseNet Reference;(3)CPU上實時,采用CSPPeleeNet Reference和帶着PRN的CSPDenseNet Reference。下表中展示了上述模型和最先進方法之間的比較。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

  如果目标檢測器在 30 30 30 ~ 100 100 100FPS的範圍内,帶着PANet(SPP)的CSPResNeXt50具有最好的性能( A P , A P 50 , A P 75 AP,AP_{50},AP_{75} AP,AP50​,AP75​),分别有 38.4 % , 60.6 % , 41.6 % 38.4\%,60.6\%,41.6\% 38.4%,60.6%,41.6%的檢測率。如果與最先進的LRF算法在 512 ∗ 512 512*512 512∗512分辨率進行比較,帶有PANet(SPP)的CSPResNeXt50要比帶有ResNet101的LRF要高 0.7 0.7 0.7%的 A P AP AP, 1.5 1.5 1.5%的 A P 50 AP_{50} AP50​, 1.1 1.1 1.1%的 A P 75 AP_{75} AP75​。如果目标檢測器在 100 100 100 ~ 200 200 200FPS的範圍内,帶有EFM(SAM)的CSPPeleeNet要比相同速度的Pelee要高 12.1 12.1 12.1%的 A P 50 AP_{50} AP50​,比相同速度的CenterNet要高 4.1 4.1 4.1%。

  如果要和非常快的目标檢測器,比如ThunderNet,YOLOv3-tiny,和YOLOv3-tiny-PRN進行比較,帶有RPN的CSPDenseNetb Reference是最快的,能達到 400 400 400fps的幀率,比backbone為SNet49的ThunderNet要快 133 133 133FPS,而且高了 0.5 0.5 0.5%的 A P 50 AP_{50} AP50​。如果和ThunderNet146比較,帶有PRN的CSPPeleeNet要快 19 19 19FPS且維持一樣水準的 A P 50 AP_{50} AP50​。

【論文閱讀筆記】CSPNet:A New Backbone that can Enhance Learning Capability of CNN

繼續閱讀