ThunderNet :像闪电一样,旷视再出超轻量级检测器,高达267fps | ICCV 2019
晓飞的算法工程笔记 人气:0
> 论文提出了实时的超轻量级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)
加载全部内容