RFBNet高精度检测算法笔记

原创作品,转载时请务必以超链接形式标明文章原始出处:http://www.dapalm.com/?p=69,作者:DaPalm-大数据,怕了么?

论文:Receptive Field Block Net for Accurate and Fast Object Detection  (CVPR2017)

链接:https://arxiv.org/abs/1711.07767

代码地址:https://github.com/ruinmessi/RFBNet

1 绪论部分:

       当前顶级目标检测器依赖于非常深的CNN主干网络,例如ResNet-101和Inception,优点是它们具有强大的特征表现能力,但是耗时严重。相反地,一些基于轻量级模型的检测器满足实时处理,但是精度是诟病。

       在RFBNet这篇论文中,主要想利用一些技巧使用轻量级模型达到速度和精度并举的检测器。灵感来自人类视觉的感受野结构Receptive Fields (RFs) ,提出了新奇的RF block(RFB)模块,来验证感受野尺寸和方向性的对提高有鉴别鲁棒特征的关系。RFBNet是以主干网络(backbone)为VGG16的SSD来构建的。下面是讨论其有效性,两项基准测试实验和结果显示。RFBNet具备同非常深的主干网络检测器的精度,但是保持了实时性。

2 相关工作:

      这部分就不介绍了,主要是对目前一步法和两步法的一些利弊总结。有个比喻挺形象:YOLO定位精度差,小目标检出率低;SSD是YOLO的多尺度版本,对小目标检出有改善。

3.2 感受野模块:

      RFB是一个类似Inception模块的多分支卷积模块,它的内部结构可分为两个组件:多分支卷积层以及随后的膨胀卷积层。如下图

3.2.1.多分支卷积层:
      根据RF的定义,用多种尺寸的卷积核来实现比固定尺寸更好。具体设计:1.瓶颈结构,1x1-s2卷积减少通道特征,然后加上一个nxn卷积。2.替换5x5卷积为两个3x3卷积去减少参数,然后是更深的非线性层。有些例子,使用1xn和nx1代替nxn卷积;shortcut直连设计来自于ResNet和Inception ResNet V2。3.为了输出,卷积经常有stride=2或者是减少通道,所以直连层用一个不带非线性激活的1x1卷积层。

3.2.2.膨胀卷积层:

      最初来自Deeplab,在保持参数量和同样感受野的情况下,用来获取更高分辨率的特征。图4,5展示两种RFB结构,每个分支都是一个正常卷积后面加一个膨胀卷积,主要是尺寸和膨胀因子不同。没有使用膨胀池化,主要是在组织不同RFs尺寸的时候,不够灵活。对于RFB,卷积核尺寸kernel size和膨胀因子dilate对检测器有细微影响,下面会讲。

3.3 RFBNet检测结构

      RFBNet检测器利用多尺度一步检测框架SSD,在其中嵌入RFB模块,使得轻量级主干SSD网络也能更快更准。RFB结构可以很容易集成到CNNs中,所以RFBNet检测网络保留了大部分SSD结构。主要修改是替换顶层卷积层为RFB,这些改动小但有用。如下图。

3.3.1.轻量级主干

      为了便于比较直接使用SSD原始的主干网络,也就是VGG16。它是将fc6和fc7层转换成卷积层用于下采样参数,并且将pool5从2x2-s2改成3x3-s1.膨胀卷积用来填充空缺和所有dropout层,并移除fc8层。

3.3.2.多尺度特征图RFB

     原始SSD,基础主干网络后面接着一系列重叠的卷积层,得到一系列空间分辨率减小而感受野增大的特征图。RFBNet保持了这种结构,也做了些改进,用RFB-b模块替换了原来L2归一化,达到从前面卷积层获取包含小目标的底层特征图。早期版本的RFB,使用的是膨胀max pool来模拟感受野方向性的影响。由于特征图太小,最后的卷积层只保留了部分,像5x5卷积核过大,无法使用而去掉。

3.3.3微调RFB参数

     主要就是调节RFB模块中卷积核kernel size以及膨胀因子dilate。RFB-a是调整后的结构,然后从conv4_3层连出。再在后面接一些小的滤波器,对性能有一定提升。

4.实验

     通过实验结果,和自己试验,超过了目前所有检测方法。显存和时间都有保证。

猜你喜欢

转载自blog.csdn.net/hw5226349/article/details/78987385