赞
踩
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上去寻找对应区域的响应值。
如上图所示,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更快。
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详解
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。