旷视ThunderNet网络学习笔记

关于Thundernet的实现细节:
在这里插入图片描述

一、Backbone 部分

输入分辨率: 一般情况下,two-stage检测器的输入分辨率比较大,如FPN网络使用了800*800的分辨率,这虽然带来了一些优势但同时也需要更多的计算能力,大佬们通过一系列的实验,发现图片输入的分辨率应当和backbone的负载能力相匹配,一个小的backbone+大分辨率输入和大的backbone+小分辨率输入都不是最佳的选择。因此权衡之下,Thundernet采用的输入分辨率为320*320。

Backbone网络: Backbone网络为检测器提供了输入图片的特征,在精度和效率方面有着重大的影响。而基于CNN的检测器通常使用ImageNet的分类网络来作为检测网络的backbone。然而,图像分类和目标检测需要从backbone获得的属性信息是不同的,简单的拿图像分类的网络来作为目标检测网络的backbone显然不是最优的做法。

Receptive field(感受野):感受野大小在CNN模型中起着重要作用。 CNN只能捕获感受野内的信息。 因此,一个大的感受野可以利用更多的上下文信息,更有效地编码像素之间的长距离关系。所以在不占用更多的计算资源的情况下,越大的感受野对提高精度是越有效的。

关于Early-stage and late-stage features: 在bacebone中,early-stage特征图较大(这些低级特征描述了空间细节),而late-stage特征图较小(这些高级特征更具分辨力)。通常,低级特征方便定位任务,而高级特征方便分类任务(是啊,高级特征很多尺度信息都丢失了,如何精准定位。低级特征又不够抽象,又如何分类呢)。在实践中,大佬们观察到在较大的backbone中定位比分类更加困难,这表明在较大的backbone中early-stage更重要。而在极小的backbone中,弱的表示能力限制了分类和定位这两个子任务的准确性,这表明在极小的backbone中early-stage和late-stage特征都很重要。(PS:较大和极小怎么划分?)

先前轻量级骨干的设计违反了上述因素:ShuffleNetV1 / V2限制了感受野(121像素与320像素输入),ShuffleNetV2和MobileNetV2缺乏早期特征, Xception在小的计算预算下缺乏高级特征。

好的终于铺述完了,进入backbbone设计的主题

基于上述的见解,作者基于ShuffleNetV2构建了一个SNet的轻量级backbone,用于实时检测。SNet一共有三个版本SNet49、SNet146、SNet535,SNet49用于更快的推理,SNet535用于更好的准确度,SNet146用于更好的速度/精度权衡。

SNet对ShuffleNetV2改进点

  1. 用5×5 depthwise 卷积替换ShuffleNetV2中的所有3×3 depthwise 卷积。因为在实践中,5×5深度卷积和3×3深度卷积提供差不多的运行速度,同时有效地扩大了感受野(从121到193像素)
  2. 在SNet146和SNet535中,我们删除了Conv5并在early-stage添加了更多通道。此设计可生成更多低级特征,而无需额外的计算成本。
  3. 在SNet49中,我们将Conv5压缩到512个通道,而不是重新移动它,并在early-stage增加通道,以便在低级和高级功能之间实现更好的平衡。如果我们删除Conv5,则主干无法编码足够的信息。但是如果保留1024-d Conv5层,backbone就会受到有限的低级特征的影响。表1显示了主干的整体架构。
    在这里插入图片描述
    此外,Stage3和Stage4的最后输出特征图(SNet49的Conv5)表示为C4和C5。

二、Detection部分

Compressing RPN and Detection Head(压缩RPN和检测头).
存在的问题:two-stage的检测器通常采用大的RPN和检测头。尽管Light-Head R-CNN使用了轻型检测头,但这种检测头在与小backbone结合的时候仍然太重,并且会引起检测头和backbone的不平衡。这种不平衡不仅导致冗余计算,而且也增加了过拟合的风险。

解决方案:为了解决上述问题,我们通过用5*5深度卷积和256通道的1*1卷积替换原始的256通道3*3卷积来压缩RPN。我们提高了卷积核大小来扩大感受野、编码更多的上下文信息。五个尺度 { 322, 642,1282,2562,5122 } 和五个长宽比 { 1:2,3:4,1:1,4:3,2:1}被用来生成anchor boxes。其他的超参和Light-Head R-CNN中一样。

在检测头中,Light-Head R-CNN在ROI warping之前生成具有α × p × p通道的薄特征图,其中p=7是pooling size,α=10。因为ThunderNet的backbone和输入图像很小,我们通过将α减半到5来进一步缩小特征图,以消除冗余的计算。对于ROI warping,我们选择PSROI align,因为它将通道压缩到α。

由于PSROI align的ROI特征图仅有245维,因此我们在R-CNN的子网络中应用1024维全连接层。这种设计进一步降低了R-CNN子网络的计算成本,而不会牺牲精度。此外,由于特征图较小,我们减少了测试的ROI数量。

检测头最终总结:仍然使用Light-Head R-CNN的轻型检测头,只是做了一些修改:使用5×5 DWConv和1×1×256的结构代替了原先3×3×256的结构,之后对于每一个像素输出的anchor有5个尺寸,分别为[32,64,128,256,512],每个尺寸又有[1:2, 3:4, 1:1, 4:3, 2:1]这5种长宽比,因为特征图是20×20的,因此最终的anchor数量应为20×20×25=10000个。

CEM
Context Enhancement Module(上下文增强模块):

Light-Head R-CNN应用全卷积网络(GCN)来生成薄特征图。它显著的增加了感受野但同时也增加了巨大的计算成本。与SNet146相结合,GCN需要backbone所需的两倍FLOPs(596M vs 298M)。出于这个原因,ThunderNet放弃了这种做法

然而,网络没有了GCN就会遇到感受野小、无法编码足够的上下文信息等问题。解决这个问题的通用方法是采用特征金字塔网络(FPN)。然而,先前其他网络中的FPN结构涉及许多额外的卷积和多个检测分支,这增加了计算成本并且引起了巨大的运行时间延迟。

出于上述原因,作者设计了一个有效的上下文增强模块(CEM)来扩大感受野。CEM的关键思想是聚合多尺度的局部上下文信息和全局上下文信息,以产生更多不同的特征。在CEM中,合并三个尺度的特征图:C4,C5和Cglb。Cglb是全局上下文的特征向量(通过在C5上应用全局平均池化(GAP)得到)。**我们在每个特征图上应用1×1卷积,以将通道数量压缩为α×p×p = 245。C5被上采样两倍,Cglb通过广播,使得三个特征图的空间维度相等。**最后,我们将三个特征图加到一起。通过利用局部和全局信息,CEM有效地扩大了感受野,并细化了薄特征图的表示能力。与现有的FPN结构相比,CEM仅涉及两个1×1卷积和一个全连接层,这对计算更友好。图3说明了该模块的结构。

SAM
Spatial Attention Module(空间注意模块):
存在的问题:在ROI warping期间,我们期望背景区域的特征较小而前景区域的特征较高。然而,和大模型相比,由于ThunderNet使用轻量级的backbone和小输入图像,因此网络本身更加难以学习到正确的特征分布。

解决方案:作者设计了一个计算友好的空间注意模块(SAM),以便对在空间维度上ROI warping之前对特征图进行显式重新加权。SAM的核心思想是利用来自RPN的知识来细化特征图的特征分布。RPN在Ground truths的监督下被训练来识别前景区域。因此RPN的中级特征可以被用来区分前后景特征。SAM接受两个输入(如上图所示):一个是来自RPN的Frpn,另一个是来自CEM的Fcem。

这个是SAM的输出Fsam的定义:
              在这里插入图片描述
公式(1)解释:上式中的θ(·)是用来转换维度以匹配特征图的通道数。sigmoid函数是用来将值约束在0到1区间内的。最后乘上Fcem是通过生成特征图来重新加权从而获得一个更好的特征分布。关于计算效率方面,作者简单的将1*1卷积作为θ(·)函数,因此CEM的计算成本可以忽略。

SAM有两个功能:第一个是通过加强前景特征和细化背景特征来细化特征分布。第二个是稳定RPN的训练,因为SAM可以实现从R-CNN子网络到RPN的额外梯度流:
              2
因此,RPN接收来自R-CNN子网络的额外监督,这有助于RPN的训练。

相关博客:ThunderNet: 轻量级实时检测网络

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值