兩階段實時檢測網絡ThunderNet


ThunderNet是曠視和國防科技大學合作提出的目標檢測模型,目標是在計算力受限的平台進行實時目標檢測。需要關注的地方主要就是提出的兩個特征增強模塊CEM和SAM,其設計理念和應用的方法都非常值得借鑒。

1. 介紹

在移動端的實時目標檢測是一個極為重要並且有挑戰性的視覺問題。很多基於CNN的檢測器都有巨大的計算量,所以在計算受限的場景下難以進行實時推理。論文提出了一個輕量級的兩階段的檢測方法-ThunderNet。

  • 在backbone部分,分析了以往的輕量級backbone的不足並提出了一個專門用於目標檢測的輕量級基礎網絡-SNet。
  • 在detection部分,提出一個有效的RPN和檢測頭。其中涉及到兩個特征增強模塊:
    • Context Enhancement Module(CEM) 用於整合局部和全局特征。
    • Spatial Attention Module(SAM)引入RPN前后背景信息用以優化特征分布。
  • 對目標輸入分辨率、Backbone、檢測頭三個部分進行了平衡。

最終ThunderNet可以在ARM設備上達到24.1fps的速度,精度和速度上超過了很多一階段檢測器。

2. 細節

首先可以看一下在COCO數據集上輕量級目標檢測網絡的對比,可以看出來其效率和准確率都超過了Pelee,SSD等一階段的檢測器。

2.1 backbone

ThunderNet的Backbone是基於ShuffleNetv2改進得到的SNet。 由於輸入的分辨率應該和backbone的容量相匹配,圖片的輸入分辨率調整為320x320,這極大的降低了模型的計算量。

SNet

SNet與ShuffleNetV2區別在於SNet將ShuffleNet中所有的3x3的可分離卷積替換為5x5的可分離卷積。下圖是shuffleNetv2中的網絡結構:

ShuffleNetV2

Backbone選取考慮到以下幾個因素:

  1. 遷移學習: 目標檢測需要的backbone一般都是在ImageNet上與訓練得到的,但是目標檢測的backbone和分類器所需要提取的特征是不一致的,簡單地將分類模型遷移學習到目標檢測中不是最佳選擇。

  2. 感受野: CNN中感受野是非常重要的參數,CNN只能獲取到感受野以內的信息,所以更大的感受野通常可以獲取更多地語義信息,可以更好地編碼長距離關系。

  3. 淺層和深層的特征: 淺層的feature map分辨率比較大,獲取到的是描述空間細節的底層特征。深層的feature map分辨率比較小,但是保存的是更具有鑒別性的高級語義特征。

    通常來講,對於比較大的backbone來說,定位要比分類難得多,這樣就證明了淺層特征對於定位的重要性。但是對於非常小的backbone來說,其特征表達能力比較差,這樣就限制了准確率的特征。所以深層和淺層的特征都非常重要。

作者考慮到以上三個因素,並分析了先前輕量級backbone的缺點:

  • ShuffleNetV1的感受野只有121個像素,ShuffleNetv2的感受野只有320個像素,感受野比較小
  • ShuffleNetv2和MobileNetv2都缺少淺層的特征
  • Xception由於對計算量的限制導致高級語義信息不足。

所以在設計SNet的時候,着重考慮以上的因素,並提出了三個模型:SNet49(speed)、SNet146(trade off)、SNet535(accuracy)。主要改進點如下:

  1. 將ShuffleNetv2中的所有3x3的深度可分離卷積替換為5x5的深度可分離卷積,兩者實際運行速度相差不多,但是有效擴大了有效感受野(參考之前文章目標檢測和感受野的總結和思考)
  2. SNet146和SNet535中去掉了Conv5,並且加寬了淺層網絡,進而生成更多的底層特征。
  3. SNet49將Conv5中的通道個數改為512,也加寬了淺層網絡。通過這樣操作是為了平衡淺層網絡和深層網絡

2.2 Detection

在以往的兩階段檢測器中,RPN和Detection 頭都太重了,為了和輕量級的網絡進行配合以及降低計算量,ThunderNet沿用了Light-Head R-CNN中的大部分設置,並針對計算量比較大的部分進行改動:

  • 將RPN中原有256維的3x3卷積替換為5x5的dwconv+1x1conv
  • 設置五個scale{32,64,128,256,512}和5個比例{1:2,3:4,1:1,4:3,2:1}
  • 提出PSRoI align來取代RoI warping, 減少RoI個數等

還有很多細節部分的調整,大部分細節都和Light-Head R-CNN是一致的。

接下來就是兩個重要的模塊,CEM和SAM:

CEM

在Light-Head R-CNN中,使用了Global Convolutional Network來增大模型的感受野,但也帶來了極大的計算量。為了解決這個問題,ThunderNet中提出了CEM來增大感受野,融合多尺度局部信息和全局信息來獲取更有鑒別性的特征。

上圖是CEM層的結構,其中C4來自backbone的Stage3,C5來自backbone的Stage4。具體操作過程上圖很明顯,構造了一個多尺度的特征金字塔,然后三個層相加,完成特征的優化。

接觸過SENet的讀者可能對這個結構有點熟悉,使用Global Avg pool以后實際上得到了一個通道的Attention,只不過SENet是相乘,而這里直接相加。總體來說這個模塊構造的很好,以比較小的計算代價擴大了感受野,提供了多尺度特征。同時也有一些地方需要商量,比如是SENet中的乘法更適合呢?還是直接相加更適合?

SAM

SAM實際上就是利用RPN得到的feature map,然后用一個Attention機制對特征進行優化,具體實現方式見下圖:

這個部分設計實際上是比較好的結合了兩階段模型的RPN網絡。RPN網絡是用來提出proposal的,在RPN中,我們期望背景區域特征不被關注,而更多地關注前景物體特征。RPN有較強的判別前景和背景的能力,所以這里的就用RPN的特征來指導原有特征,實際上是一個Spatial Attention,通過1x1卷積、BN、Sigmoid得到加權的特征圖,引導網絡學習到正確的前景背景特征分布。

這個模塊也是非常精妙的結合了RPN以及空間Attention機制,非常insight,有效地對輕量級網絡特征進行了優化,彌補了輕量網絡特征比較弱的缺點。

3. 實驗

上表是在VOC2007數據集上的結果,可以看出,ThunderNet在比較好地做到了精度和計算量的權衡,並且證明了兩階段網絡也有超越一階段網絡的潛力。

上表是在COCO數據集上的結果,可以看出效果依然非常出眾。SNet49的ThunderNet在於MobileNet-SSD相近的精度下,速度快了5倍;SNet146的ThunderNet與one-stage相比,有更高的精度;SNet535的ThunderNet精度在和大型的一階段網絡(SSD,DSSD)一致的情況下,計算量顯著降低。

4. 思考

ThunderNet作者非常善於思考,在將兩階段檢測器進行輕量化設計的這個問題上有獨特的想法,很多改進的點都是來自感受野的分析。主要提出了兩個重要的模塊:CEM 和SAM

CEM總的來說是融合了一個小型的FPN+通道注意力機制,以非常少的計算代價提高了模型的感受野,優化了backbone的特征。

SAM總的來說是用RPN的特征加強原有特征,本質上是一種空間注意力機制,這種方法或許可以擴展到所有的多階段檢測器中。

而SNet對ShuffleNetV2的改進也在消融實驗中得到證明,所以或許其他輕量級網絡也可以借鑒用5x5dwconv替換掉3x3conv的思路

ThunderNet成功超越了很多一階段的方法,也讓我們改變了傳統兩階段網絡計算量大但精度高的印象。雖然很多論文中都用到了空間注意力機制和通道注意力機制,ThunderNet中通過自己獨到的想法,比較完美地融合了這兩個部分,有理有據,非常有力。

以上是筆者關於ThunderNet的解讀和個人的思考,能力有限,如果有不同的看法,歡迎來交流。

5. 參考

https://arxiv.org/pdf/1903.11752.pdf

https://github.com/ouyanghuiyu/Thundernet_Pytorch


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM