前言
关于实时目标检测,作者提出two-stage和one-stage中存在的问题:
- two-stage检测器倾向于使用特别复杂的detection head来达到更好的精度,这对于移动设备来说是可望不可及的。Light-Head R-CNN虽然采用了轻量级的detection head以实现实时检测,但它在head上的计算依然比在backbone上的计算要高出不少,这会造成巨大的计算冗余,并且会使网络过拟合。
- one-stage的检测器在detection上虽然计算很少,但它由于没有实现RoI-wise的特征提取,导致提取的特征比较粗糙,因此检测精度不是很高。而这个问题在轻量级的检测器上更为严重:先前的轻量级one-stage检测器没有实现速度和精度之间的trade-off,它们的检测精度与two-stage相比相差太多,也不能在移动设备上实现实时检测。
由此作者提出,two-stage能否比one-stage更能胜任实时检测这一工作呢?
答案是肯定的。本文提出的ThunderNet就是一个轻量级的two-stage通用目标检测器。它的backbone是SNet,是基于ShuffleNetV2设计的。在detection部分中,参照了Light-Head R-CNN中的detection head的设计,并且对RPN和R-CNN子网进行压缩;同时为了消除压缩带来的small backbone和small feature maps导致的性能上的损失,设计了CEM(Context Enhancement Module)和SAM(Spatial Attention Module),CEM结合了不同尺度的特征图以利用语义和上下文信息,SAM引入RPN中的信息来优化特征的分布。ThunderNet的整体结构如下图所示:
backbone part
1. 输入图像的像素
two-stage检测器的输入像素通常都很大,虽然有优点,比如检测精度高,但也会造成庞大的计算量。为了提高inference时的速度,ThunderNet将输入像素统一为320×320。同时作者发现,输入像素的大小必须与backbone的能力相匹配。下表说明了小的图像输入到大的backbone里,或者大的图像输入到小的backbone里,都不能达到最优的检测结果。输入像素和backbone之间是有一个trade-off的:
- 输入像素过低会导致特征图的像素也很低,会引入特征上的一些误差;
- backbone过小是不能处理较大的输入图像的信息的。
为了使网络的表示能力和特征图的像素之间达到平衡,必须使backbone与输入像素相匹配。
2. backbone
backbone用于提取图像中的特征,提供了输入图像最基础的特征表示。基于CNN的检测器通常使用在ImageNet上经过预训练的分类网络作为backbone,但分类与检测从backbone中需要的属性是不同的,因此简单的在分类网络上训练检测网络并不能达到最优的效果。对于检测任务来说,backbone对检测结果的影响因素主要有以下几个方面:
- 感受野。CNN只能获取在感受野之内的信息,因此一个较大的感受野可以利用更多的上下文信息,这对于定位任务是非常重要的,尤其是较大目标的定位。
- early-stage和late-stage的特征。在backbone中,early-stage的特征图更大,包含更多空间信息,对定位更重要;late-stage的特征图更小,但辨识性更好,包含更多语义信息,对分类更重要。在较大的backbone中,定位比分类更难,这说明early-stage的特征更重要;在特别小的backbone中,由于网络低下的表示能力,同时对分类和定位的精度造成影响,这说明early-stage和late-stage的特征同等重要。
先前的轻量级backbone有以下几个缺点:
- ShuffleNetV1/V2的感受野都不是很大(121像素/320像素);
- ShuffleNetV2缺少early-stage的特征;
- Xception在计算预算很低的情况下缺少深层特征。
基于以上这些内容,作者对ShuffleNetV2进行修改,建立了一个新的轻量级backbone,称为SNet。本文提出3种不同的SNet backbone: SNet49用于更快的inference,SNet535的检测精度更高,SNet146可以达到速度与精度之间更好的trade-off。
在修改时,首先用3×3的depthwise卷积层替换ShuffleNetV2所有的5×5的depthwise卷积层,将感受野从121像素扩大到193像素。然后根据3种不同的SNet backbone,修改的方法各有不同:
- SNet146和SNet535,移除它们的conv5,在网络早期阶段中增加更多通道。这可以在不增加额外计算的情况下生成更多浅层特征图;
- SNet49,将conv5的通道数从1024压缩到512,并且在网络早期阶段中增加更多通道,以达到浅层特征图和深层特征图之间的平衡。如果移除conv5,backbone无法获取充足的信息,会导致信息的损失;如果仍保留1024维的conv5,backbone会受到有限的浅层特征的影响。
下表展示了backbone的整体结构:
detection part
1. 压缩RPN和detection head
two-stage检测器的RPN规模很大,并且detection head也很复杂,因此作者在Light-Head R-CNN的基础上对RPN进行压缩,具体来说就是,用5×5 depthwise + 256通道 1×1卷积代替原来的256通道 3×3卷积,用5种尺度{ 3 2 2 , 6 4 2 , 12 8 2 , 25 6 2 , 51 2 2 32^2,64^2,128^2,256^2,512^2 322,64