1. 程式人生 > >ThunderNet :像閃電一樣,曠視再出超輕量級檢測器,高達267fps | ICCV 2019

ThunderNet :像閃電一樣,曠視再出超輕量級檢測器,高達267fps | ICCV 2019

> 論文提出了實時的超輕量級two-stage detector ThunderNet,靠著精心設計的主幹網路以及提高特徵表達能力的CEM和SAM模組,使用很少的計算量就能超越目前的one-stage detectors,在ARM平臺也達到了實時性,GPU的速度更是達到267fps   來源:【曉飛的演算法工程筆記】 公眾號 **論文: ThunderNet: Towards Real-time Generic Object Detection** ![](https://upload-images.jianshu.io/upload_images/20428708-8c3c84fd0f3720fd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * **論文地址:[https://arxiv.org/abs/1903.11752](https://arxiv.org/abs/1903.11752)** # Introduction ***   one-stage detector和two-stage detector分別有著實時優勢和準確率優勢。two-stage detector實時性較差,幾乎不能在移動裝置上執行,儘管已經有了light-head版本,但對於小主幹網路而言,這依然是過度設計的。而one-stage由於缺少ROI-wise的特徵提取,準確率一直較差 ![](https://upload-images.jianshu.io/upload_images/20428708-1f8d62040c1d3c6d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   為此,論文提出TunderNet,一個超輕量級的two-stage detector。在綜合考慮輸入解析度,主幹網路和detection head後,整體架構如圖2,主要有兩部分創新: * Backbone part,提出輕量級主幹網路SNet * Detection part,參考Light-Head R-CNN的設計,對RPN和R-CNN子網進一步壓縮。對於小主幹和小特徵圖產生的效能退化問題,提出兩個高效的block:Context Enhancement Module(CEM),組合多尺寸的特徵圖來整合本地和全域性上下文資訊;Spatial Attention Module(SAM),使用RPN中的上下文資訊來優化RoI warping的特徵分佈 ![](https://upload-images.jianshu.io/upload_images/20428708-e16daf83b75263ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   ThunderNet準確率比目前的輕量級one-stage detector都要高,且僅用了很少的計算量,在ARM和x86裝置上分別達到了24.1fps和47.3fps # ThunderNet *** ### Backbone Part * ##### Input Resolution   two-stage detector的輸入通常都很大,為了減少計算量,ThunderNet使用$320\times 320$的輸入解析度。需要注意,輸入解析度應該與主幹網路的能力匹配 * ##### Backbone Networks   由於影象分類和影象檢測需要主幹網路用不同的屬性,簡單地直接應用影象分類的網路作為主幹不是最優的: 1. *Receptive field*:感受域是卷積網路中很重要的特性,大的感受域能更有效地利用更多的上下文資訊以及處理遠距離的畫素間關係,這對定位任務相當重要,特別是大目標 2. *Early-stage and late-stage features*:主幹網路的early-stage特徵圖較大,低層特徵能表達空間細節,而late-stage的特徵圖較小,高層特徵更具區分能力。一般定位任務對低層特徵更敏感,高層特徵對分類任務更重要。在實際中發現,在大網路中定位任務比分類任務要難,表明低層特徵對定位更重要,而過小的網路由於弱表達能力限制了兩種任務的準確率,表明低層和高層特徵都是重要的   目前的輕量級主幹網路都不符合上面的因素:ShuffleNetV1/V2限制了感受域的大小(121 pixels vs. 320 pixels,**(這裡的計算方法暫時不瞭解,另外下面說V2為121 pixels,跟這裡不一致,希望瞭解的讀者能留言告知)**),ShuffleNetV2和MobileNetV2則缺少了early-stage的特徵,而Xception則沒有足夠的高層特徵 ![](https://upload-images.jianshu.io/upload_images/20428708-e3016afa5272c51d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   基於以上的觀察,論文改造ShuffleNetV2,設計了輕量級主幹網路SNet用於實時檢測,共3個版本: *SNet49*更快速推理;*SNet535*更準確;*SNet146*是耗時和準確率的折中,結構如表1所示,主要改進如下: * 將所有3x3的深度卷積替換成5x5的深度卷積,擴大感受域(121 to 193 pixels)但不會帶來過多額外的計算 * 對於SNet146和SNet535,移除Conv5,然後增加early-stage的層的channel數,這樣能不帶來過多額外的計算的情況下提供更多低層特徵 * 對於SNet49,將conv5壓縮到512維,然後增加early-stage的層的channel數,這樣能很好地平衡低層特徵和高層特徵 ### Detection Part * ##### Compressing RPN and Detection Head   Light-Head R-CNN雖然已經夠輕量級了,但是相對於小主幹網路,仍然是過度設計的。為了解決這一問題,論文將256-channel 3x3卷積壓縮為5x5深度卷積和256-channel 1x1卷積的組合,加大卷積核大小來增加感受域,而anchor box的尺寸和長寬比分別為$\{32^2,64^2,128^2,256^2,512^2\}$和$\{1:2,3:4,1:1,4:3,2:1\}$   對於detection head,Light-Head R-CNN在RoI warping前生成很精簡特徵圖(thin feature map)大小$\alpha\times p\times p$ ,$\alpha=10$,$p=7$為池化大小。由於主幹網路更小,縮小$\alpha=5$來移除多餘的計算,用PSRoI align($(p\times p\times c)\times w\times h$ to$c\times p\times p$)進行RoI warping,將245-d的RoI特徵輸出為$\alpha$-d,之後在R-CNN子網接一個1024-d全連線 * ##### Context Enhancement Module(CEM) ![](https://upload-images.jianshu.io/upload_images/20428708-f2d818d69d686877.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   Light-Head R-CNN使用Global Convolutional Network(GCN)來產生精簡特徵圖,GCN使用$k\times 1 + 1\times k$和$1\times k + k\times 1$卷積代替$k\times k$卷積,這樣能提升感受域,但會帶來兩倍的計算量,不能採用。因此,論文借鑑FPN的思想,提出了*Context Enhancement Module*(CEM)來整合多尺度的區域性上下文資訊和全域性的上下文資訊 ![](https://upload-images.jianshu.io/upload_images/20428708-056eefeca0652332.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   CEM融合$C_4$,$C_5$和$C_{glb}$,其中$C_{glb}$為global average pooling的全域性特徵,然後用1x1卷積將每組特徵圖壓縮至$\alpha\times p\times p=245$,再$C_5$和$C_{glb}$進行2x上取樣和直接複製(broadcast),最後進行融合。通過利用區域性和全域性資訊,CEM能夠有效地擴大感受域和改善精簡特徵圖的表達能力。對比FPN,CEM精算量相當小 * ##### Spatial Attention Module   由於ThunderNet使用了更小的主幹網路和輸入解析度,這增加了檢測的難度。論文提出*Spatial Attention Module*(SAM),在空間維度對RoI warping前的特徵圖進行re-weight,核心思想是利用RPN的資訊來優化特徵圖的特徵分佈 ![](https://upload-images.jianshu.io/upload_images/20428708-c9eaf093b1836b5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   RPN能夠識別目標區域,因此,RPN的中間特徵能用來區分前景特徵。SAM接受RPN的中間特徵$\mathcal{F}^{RPN}$和來自CEM的特徵$\mathcal{F}^{CEM}$,輸出$\mathcal{F}^{SAM}$。整體流程如圖4,$\theta$為維度轉化函式,將特徵圖轉化為特定channel,一般用1x1卷積,最後的Sigmoid將數值限制在$[0,1]$ ![](https://upload-images.jianshu.io/upload_images/20428708-974ddc69cee54e65.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![](https://upload-images.jianshu.io/upload_images/20428708-dc58c68647e342e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   SAM包含兩個函式,第一個是推理函式,用來加強前景特徵同時抑制背景特徵。另一個是反向傳播函式,因為SAM增加了額外的R-CNN梯度到RPN,需要穩定RPN的訓練,RPN特徵$i$與全部SAM特徵$j$相關 # Experiments *** ### Implementation Details   每張圖訓練和測試分別有2000和200 RoIs,輸入解析度為$320\times 320$,使用多尺寸訓練$\{240,320,480\}$,使用SSD的資料增強,在VOC和COCO分別訓練62.5K和375K,使用OHEM和Soft-NMS ### Results on PASCAL VOC ![](https://upload-images.jianshu.io/upload_images/20428708-d0fe853e29ab5c31.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   可以看到,ThunderNet能達到SOTA,而且相對於同準確率的模型,計算量降低了很多 ### Results on MS COCO ![](https://upload-images.jianshu.io/upload_images/20428708-737d89d42afd0347.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   MS COCO資料集包含很多小物體,儘管ThunderNet輸入解析度和主幹網路都較小,但是準確率依然能在大幅減少引數量的情況下達到目前的SOTA ### Ablation Experiments * ##### Input Resolution ![](https://upload-images.jianshu.io/upload_images/20428708-19939e22e7e44f6f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   可以看到,小主幹網路與大輸入解析度和大主幹網路和小輸入解析度都達不到最優的結果,兩者需要match * ##### Backbone Networks   論文將SNet146和SNet49作為baselines,對主幹網路的設計進行實驗對比: ![](https://upload-images.jianshu.io/upload_images/20428708-c3edeb02c555a83d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 1. 5×5 Depthwise Convolutions,對比$5\times 5$深度卷積和$3\times 3$卷積。從5(b)和5(c)可以看出,$5\times 5$卷積提供的大感受域對目標檢測很重要 2. Early-stage and Late-stage Features,對比early-stage和late-stage特徵的平衡關係。從5(d)、5(f)和5(g)可以看出,高層特徵對分類有很多作用,但是對目標檢測則不一定作用。因此,需要平衡高低層特徵 ![](https://upload-images.jianshu.io/upload_images/20428708-d99af91f32fa59e7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 3. Comparison with Lightweight Backbones,將SNet與其它輕量級主幹網路進行對比,SNet檢測準確率是最好的 * ##### Detection Part ![](https://upload-images.jianshu.io/upload_images/20428708-328ce6a9cdaa3899.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   論文將壓縮後的Light-Head R-CNN with SNet146作為baseline,對ThunderNet的detection part的設計進行對比: 1. Baseline,效能達到21.9AP 2. RPN and R-CNN subnet,用5x5深度卷積代替RPN中的3x3卷積,減少28%引數量,保持了差不多的準確率(7b)。將R-CNN子網的全連線輸出減半至1024,減少13%引數量,準確率降低0.2AP(7c) 3. Context Enhancement Module,將CEM應用到RPN和RoI warping,對比7c能提升1.7AP(7d) ![](https://upload-images.jianshu.io/upload_images/20428708-2a91f22362d244bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 4. Spatial Attention Module,僅使用SAM能提升1.3AP和增加5%計算量(7c),圖6可視化了7c和7e RoI warping前的特徵圖,SAM明顯能加強前景特徵 5. 最後同時加入CEM和SAM,對比baseline能提升1.7AP(7f) * ##### Balance between Backbone and Detection Head ![](https://upload-images.jianshu.io/upload_images/20428708-38ed6a80afffad0c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   論文對比了主幹網路和head的關係,large-backbone-small-head的準確率要高點,可能由於small-backbone-large-head的主幹網路的特徵太弱了,導致head過度設計 * ##### Inference Speed ![](https://upload-images.jianshu.io/upload_images/20428708-becb4ac9ce03f2c5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   論文對比了不同裝置上的不同網路的推理速度,Yhunder with SNet49在ARM和CPU上都能達到實時性,而所有的網路在GPU上都大於200fps,速度相當勁爆   # CONCLUSION ***   論文提出了實時的輕量級two-stage detector ThunderNet,在backbone部分,使用一個精心設計的目標檢測專用的輕量級網路SNet,在detection部分,採用極度精簡的detection head和RPN,提出Context Enhancement Module和Spatial Attention Module用於增強特徵表達能力,最後對輸入解析度、backbone和detection head進行了縮減和平衡。ThunderNet使用很少量的計算量超越了目前的one-stage detectors,在ARM平臺也達到了實時性,GPU的速度更是達到267fps   ### 參考內容 * [Large Kernel Matters -- Improve Semantic Segmentation by Global Convolutional Network](https://arxiv.org/abs/1703.02719)       >寫作不易,未經允許不得轉載~ 更多內容請關注 微信公眾號【曉飛的演算法工程筆記】 ![work-life balance.](https://upload-images.jianshu.io/upload_images/20428708-7156c0e4a2f49bd6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)