《RefineDet:Single-Shot Refinement Neural Network for Object Detection》论文笔记

代码地址:RefineDet

相关链接:

  1. RefineDet:(1)训练脚本解析
  2. RefineDet:(2)检测部分网络解析
  3. RefineDet:(3)C++测试代码

1. 概述

在现有的检测方法中两阶段的Faster R-CNN具有较高的检测精度,一阶段的SSD具有较高的效率,这篇文章提出的方法RefineDet具有更高的检测精度并保持了与一阶段检测方法相近的检测效率。RefineDet由两个模块组成:anchor优化模块(Anchor Refinement Module,ARM)以及目标检测模块(Object Detection Module,ODM)。anchor优化模块用不减少分类器的搜索空间,粗略调整anchor的位置与大小,给予后序回归模块更好的先验;目标检测模块在前一个模块的基础上进一步提升网络回归与多目标分类预测。此外,还设计了一个传输转换块(Transfer Connection Block),用以传输在anchor优化模块中的特征到目标检测模块中(特征融合)预测目标定位、尺寸与标签类别。

下面从四个方面对两阶段方法与一阶段方法进行比较,总结出两阶段方法相比一阶段的检测方法具有的优点:

  • 1)二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation。而第二步在分类时,由于第一步滤掉了绝大部分的负样本,送给第二步分类的proposal中,正负样本比例已经比较平衡了,所以第二步分类中不存在正负样本极度不平衡的问题。即二步法可以在很大程度上,缓和正负样本极度不平衡的分类问题;
  • 2)二阶段的回归:二步法中,第一步会先对初始候选框进行校正,然后把校正过的候选框送给第二步,作为第二步校正的初始候选框,再让第二步进一步校正;
  • 3)二阶段的特征:在二步法中,第一步和第二步法,除了共享的特征外,他们都有自己独有的特征,专注于自身的任务。具体来说,这两个步骤独有的特征,分别处理着不同难度的任务,如第一步中的特征,专注于处理二分类任务(区分前景和背景)和粗略的回归问题;第二步的特征,专注于处理多分类任务和精确的回归问题;
  • 4)特征校准:在二步法中,有一个很重要的RoIPooling扣特征的操作,它把候选区域对应的特征抠出来,达到了特征校准的目的,而一步法中,特征是对不齐的;

该算法大致上是SSD算法和RPN网络、FPN算法的结合,RefineDet的主要思想:一方面引入two stage类型的object detection算法中对box的由粗到细的回归思想(由粗到细回归其实就是先通过RPN网络得到粗粒度的box信息,然后再通过常规的回归支路进行进一步回归从而得到更加精确的框信息,这也是two stage类型的object detection算法效果优于one stage类型的一个重要原因)。另一方面引入类似FPN网络的特征融合操作用于检测网络,可以有效提高对小目标的检测效果,检测网络的框架还是SSD。

2. 网络实现

2.1 网络整体结构

RefineDet中的三个核心组件:

  • 1)TCB(Transfer Connection Block),该模块用以将ARM模块中的特征传递到ODM模块中进行检测。这个链接模块将当前阶段的特征图与更高级的特征进行混合传递到ODM,类似于FPN网络中的特征融合,其网络结构见下图:
    在这里插入图片描述
  • 2)两阶段级联形式地精确回归目标的位置与尺寸。在被均匀分割的特征图单元格内使用 n n n个anchor去预测边界框回归的4个变量与是否为目标的2个置信度(背景与前景)。
  • 3)负类anchor过滤缓解样本不平衡问题,这里通过设置阈值 θ \theta θ来排除负样本。

在这里插入图片描述

2.2 骨干网络

文中采用了VGG16与ResNet-101作为检测网络的骨干网络,对于VGG16网络将原有的fc6与fc7转换成为了几个卷积层相连:

2.2.1 conv_fc6

通过在"pool5"上做了atrous convolution,kernel_size = 3x3,stride = 3 , channel = 1024,其中stride=3指在map上两两相隔3-1=2 个步长,输出的大小不变,channel为1024,见下图即可明白:
在这里插入图片描述
它的作用:

1.应该同样存在信息损失的情况,传统conv如果stride为1,则会有一部分重叠,而dilation conv极大减少这点
2.主要为了在不损失信息的情况下增大感受野,而扩大conv的尺寸也可以,但参数会变得更多,而且conv的增大和感受野的增大是线性,但dilation conv和感受野是指数增长

2.2.2 conv_fc7

在"conv_fc6"之后做了kernel_size = 1x1,stride = 1 , channel = 1024的卷积操作,形状与conv fc6 保持一致。

2.2.3 conv6_1

继"conv_fc7"之后,做了kernel_size = 1x1,stride = 1 , channel = 256的卷积操作,size不变,channel为256。

2.2.4 conv6_2

"conv6_1"之后,kernel_size = 3x3,stride = 2 , channel = 512的卷积操作,也就是说把尺寸缩小一半了,channel变成512。

2.3 Anchor的设计与匹配

在文中使用VGG16网络在stride为 [ 8 , 16 , 32 , 64 ] [8,16,32,64] [8,16,32,64]的尺度上设置了4个size,在prior_box_layer里面设置的是它的4倍。anchor的长宽比例设置为 [ 0.5 , 1.0 , 2.0 ] [0.5, 1.0, 2.0] [0.5,1.0,2.0],这部分在prior_box_layer有写。对于正负样本的区分是使用阈值 0.5 0.5 0.5

2.4 困难样本挖掘

即使在经过ARM之后正负样本的比例还是可能会存在比较大的比例差距,这里就需要困难样本挖掘是的正负样本的比例为 1 : 3 1:3 1:3。在论文的代码里面定义了两种挖掘方法:基于置信度的MAX_NEGATIVE与OHEM算法的HARD_EXAMPLE。

2.5 损失函数

网络的损失函数由ARM与ODM两部分组成。
在这里插入图片描述

3. 实验结果

3.1 性能分析

网络的检测性能:
在这里插入图片描述
相关模块对于检测性能的影响:
在这里插入图片描述

3.2 实验总结

  1. 首先输入尺度越大效果越好,在小目标多的任务上体现的更明显;
  2. 小batch会影响BN层的稳定;

有关BN层和batch的这里需要说明一下,由于目标检测输入图尺寸大、网络尺寸大(如ResNet),一个batch可能就1、2张图片,所以目标检测任务的BN层基本都是不开放训练的,优化思路一般是:多卡BN同步(旷世论文MegDet),使用固定的BN参数(参考某个数据集得出),或者干脆是提出其他的BN层变种(如何凯明的group normalization之类),作者提到何凯明论文Rethinking ImageNet Pre-training 有讲到或者应用这三种方法。

4. Reference

  1. Refinedet 网络解析
  2. 『计算机视觉』物体检测之RefineDet系列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值