目标检测之Light-Head R-CNN

一、目标检测之Light-Head R-CNN

Light-Head R-CNN: In Defense of Two-Stage Object Detector

二、Light-Head R-CNN算法

1、为什么two-stage比one-stage慢?

作者将two-stage的object detection算法的网络结构分成两部分,一部分是region proposal(或者叫ROI)的生成过程(body部分),即:ROI warping;另一部分是基于ROI预测框的过程(head部分),即: RCNN subnet。慢的原因是two-stage中head is heavy
在这里插入图片描述
三个框架都是由3个部分组成,RPN(左),ROI warping(中),R-CNN subnet(右)。而本文的标题,Light-Head 所指的就是ROI warping(中),R-CNN subnet(右)这两部分的轻量化。

上图A(Faster R-CNN):

步骤:

  1. 首先是用Resnet-101提取特征,得到channel数为2048的feature map;
  2. 然后,由RPN产生的每个RoI经过RoI pooling 得到固定大小的feature map;
  3. 每个RoI对应的固定大小的feature map,都要通过RCNN-subnet,得到最终的分类、回归结果。

每个RoI都要通过RCNN-subnet计算一次,而且为了保证精度,Faster R-CNN 用的RCNN-subnet通常是两个很大的FC(或者resnet 的第5个stage),这样的做法是非常耗时的。

为了提速,通常RoI feature map后面会采用global average pool. 这样做的目的是为了减少第一个FC层的计算量,但是会丢失一些spatial localization的信息,不利于目标bbox回归。

上图B(R-FCN):

  1. 同样地,经过Resnet-101得到channel数为2048的feature map;
  2. 然后,采用1x1的卷积核,得到Position-sensitive feature map(channel: P^2(C+1));
  3. 每个RoI经过一个PSRoI Pooling层得到feature map(size: P*P,channel: C+1). 再经过一个global average pool层得到每个RoI的prediction。

R-FCN的RCNN-subnet很小,只包含了global average pool,所以它会比Faster-RCNN快。但是,为了让得到的feature map具有Position-sensitive的特点,需要满足它的channel数是P^2(C+1)。在COCO数据集上,相应的channel数是3969,这就必然还是会造成很大的时间和存储的开销。

上图C(Light-Head R-CNN):

本文中提出的改进结构,可以看出基本是在R-FCN的基础上进行修改的。不同的地方在于:

  1. 作者采用large separable convolution生成channel数更少的feature map (从3969减少到490)。
  2. 用FC层代替了R-FCN中的global average pool,避免空间信息的丢失

文中所说的large separable convolution 应该是借鉴了Inception 3的思想:

Inception 3中将大小为k* k的卷积核,用1* k和k* 1的两层卷积来代替。
使用这种卷积替换之后,可以在计算结果一致的前提下,减少计算量。减少的计算量,大致为原来的k/2,文中作者将k取15,因此这里大大减少了计算了。当然,计算复杂度还跟 C_mid 和 C_out 有关。对于S主网络,Cmid采用64;对于L主网络,Cmid采用256。Cout就是前面说的channel数量490(10 *p *p,p为7)。ResNet101(文中用”L“表示)或Xception(文中用“S”表示)
在这里插入图片描述

2、实验结果

1、BaseLine

作者通过R-FCN的开源代码,在COCO mini-validation set上得到了mmAP 32.1%的baseline,记为B1. 又通过一些改进,得到一个更好的R-FCN baseline,记为B2. 主要的改进是:

  • 对图像进行resize,将shorter edge设为800,同时限制max size为1200.
  • 由于图像变大了,所以采用新的anchor: {322, 642, 1282, 2562, 5122}.
  • 发现在R-CNN中,regression loss会比classification loss小很多,因此将regression loss*2.
  • Each image has 2000/1000 RoIs for training/testing.

效果非常显著,这些简单的改进之后,R-FCN就提升了3%,如下图:
在这里插入图片描述
2、Thin feature maps for RoI warping

为了研究数量更少的feature map对结果的影响,作者又做了一组实验。除了以下两点,跟R-FCN基本一致:

  • 减少feature map channel,从3696(81* 7* 7)减少到490(10* 7* 7).
  • 由于改变了feature map channel数,导致无法直接通过global average pool进行prediction,因此加了一个FC层。

实验结果如下:
在这里插入图片描述
这是符合预期的,channel 数少了必然会导致精度的下降。

3、Large separable convolution

上述的实验减少了channel数,但用的还是R-FCN中1*1的卷积核。为了验证Large separable convolution带来的影响,作者在上一组的实验基础之上,将1 * 1卷积核,换成了Large separable convolution. 同时令:k = 15, Cmid = 256, Cout = 490.

在这里插入图片描述

4、R-CNN subnet

分别介绍了thin feature map和large separable convolution的效果,下面是将这二者结合后的效果:
在这里插入图片描述

5、Light-Head RCNN 可以有多精准?
在这里插入图片描述

为了提升算法精度,作者又加入了其他trick,分别是:

  • 在PSRoI pooling中加入RoIAlign (Mask-RCNN) 中的插值技术,提升了1.7%.
  • 将NMS threshold从0.3改成0.5之后,提升了0.6%.
  • 使用multi-scale进行training,提升1%.

最终,在COCO test-dev数据集上,达到了如下的performance:
在这里插入图片描述

6、Light-Head RCNN 可以有多快?
在这里插入图片描述

为了平衡精度与速度,作者做了如下一些改变:

  • 用Xception代替Resnet-101.
  • 弃用atrous algorithm.
  • 将RPN channel减少一半到256.
  • Large separable convolution: kernel size = 15, Cmid = 64, Cout = 490 (10 × 7 × 7).
  • 采用 PSPooling + RoI-align.

采用上述trick之后,能够在COCO上达到102FPS,同时达到30.7% mmAP的精度。可以说是非常厉害了!

3、结论

总结一下这篇文章,作者主要有以下几个改进点:

  • Large separable convolution + Thin feature map 提升算法速度。
  • 用FC来代替global average pooliing来减少空间信息的丢失,提高精度。
  • 加入其它trick,例如: PSRoI pooling with RoIAlign、multi-scale training、OHEM 等来进一步提升精度。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值