当前位置:   article > 正文

目标检测总结:R-FCN_rfcn算法

rfcn算法


  卷积神经网络用于图像分类已经取得了很大的成功,其精度已经超过了人眼,而用卷积层构建目标检测的卷积网络进而进行目标检测,得到的结果却和图像分类差别很大。分析原因,在于图片分类的平移不变性和目标检测的平移变换性。在分类任务中,平移图像中目标的位置,对分类结果几乎没有影响,但是在目标检测任务中,影响是巨大的。为了解决这个问题,作者提出了RFCN网络,网络中的position-sensitive-score-map有效的解决这个问题。

RFCN

在这里插入图片描述

  • RFCN的结构图如上所示,其共享卷积层和FasterRCNN类似,由卷积网络的backbone进行特征的提取,然后在特征提取的最后一层出现了RPN分支,获得相应的ROI,这些操作和FasterRCNN完全一致。
  • 其次,RFCN后面接一个position-sensitive score map,用来进行分类。这是RFCN的第二个分支。
  • 最后,RFCN接一个reg回归分支。

position sensitive score map

在这里插入图片描述
position-sensitive score map的结构如上图所示,接下来详细介绍一下思路。首先score map的层数是k**2×(c+1),这里的c+1是类别数,k即为roipooling中的把ROI分为k×k中的k。相当于每一个类别都分配k×k个score map。这k×k个score有什么用呢?比如假设该RoI中含有的目标是人,K=3,那么就将“人”划分成了9个子区域,top-center区域毫无疑问应该是人的头部,而bottom-center应该是人的脚部,我们将RoI划分为K*K个子区域是希望这个RoI在其中的每一个子区域都应该含有该类别C的物体的各个部位,即如果是人,那么RoI的top-center区域就应该含有人的头部。当所有的子区域都含有各自对应的该物体的相应部位后,那么分类器才会将该RoI判断为该类别。另外需要注意的是,ROI的第i个子区域需要去对应的第i张score map上去寻找对应区域的响应值。

position-sensitive roi pooling

如上图所示,RPN负责提取出ROI,然后将ROI对应到score map上,在原始的FasterRCNN中一个ROI会被分为k×k个子区域,然后进行池化操作。而RFCN不同,其k×k个子区域中的每个子区域都是来自不同的score map。第j个子区域需要从第j个score map中寻找响应值。由于有c+1个类别。每个类别都要进行相同方式的池化,最终得到了c+1个池化后的特征层。
在这里插入图片描述
在这里插入图片描述
如上图所示,top-left的黄色子区域来自k2个score-map中的第一个score-map。bottom-right的浅色子区域来自k2个score-map中的最后一个score-map。
经过池化之后,共得到c+1个这样的k×k的特征,将这k×k个数求平均,即得到了该类别的score。另外论文中采用的池化方式为average,同时提到max池化同样有效。
注意,在池化之后就没有需要学习的参数了,这也使得R_FCN相比于FasterRCNN更快。

position-sensitive regression

regression分支和分类分支类似,是在共享卷积层后接k×k×4个regression-map。其池化方法和position-sensitive roi pooling一致,经过池化之后,得到4个k×k的特征,然后将k×k的特征求平均,即为得到的位置回归(x,y,w,h)。

其他细节

损失函数:分类为softmax的交叉熵损失函数,回归为smooth l1.在这里插入图片描述
训练中采用了online hard negative mining。

结论,RFCN相比于FasterRCNN运行速度快2.5倍以上,原因在于无论分类还是回归,RFCN均在池化之后求平均,并没有可学习的全连接参数。并且稍微提高了一点检测精度。实际上RFCN也是一个two-stage的目标检测算法。需要先进行RPN得到roi,然后再进行position-sensitive score map的操作。
参考链接:R-FCN详解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/250279
推荐阅读
相关标签
  

闽ICP备14008679号