对faster rcnn 中rpn层的理解

1.介绍

图为faster rcnn的rpn层,接自conv5-3

图为faster rcnn 论文中关于RPN层的结构示意图

2 关于anchor:

一般是在最末层的 feature map 上再用3*3的窗口去卷积特征。当3*3的卷积核滑动到特征图的某一个位置时,以当前滑动窗口中心为中心映射到原图的一个区域(注意 feature map 上的一个点是可以映射到原图的一个区域的,这个很好理解,感受野起的作用啊~...),以原图上这个区域的中心对应一个尺度和长宽比,就是一个anchor了。fast rcnn 使用3种尺度和3种长宽比(1:1;1:2;2:1),则在每一个滑动位置就有 3*3 = 9 个anchor。

3 关于结构如图1所示:

以VGG-16改造的faster r-cnn为例。py-faster r-cnn的/model/pascal-voc/VGG16/faster_rcnn_alt_opt/faster_rcnn_test.pt的RPN部分。这部分是在原来的VGG16的conv5_3之后添加的。
1、conv5_3->rpn_conv/3*3->rpn_relu对应于文中进行n*n的卷积。这里输出的维数(output)为512,高H和宽W为输入的图像原始大小的1/16。(1,512,H,W)(前面有四个池化层)
2、rpn_relu->rpn_cls_score->rpn_cls_score_reshape->rpn_cls_prob->rpn_cls_prob_reshape
这里是预测每个点的前景背景概率。rpn_cls_score实际上就是一个1*1的卷积层而已。
如果有A个anchor,每个anchor都有一个前景概率一个背景概率(2*A),输出的大小为(1,2*A,H,W)。
这里的reshape只是为了利用softmax层进行概率的计算而已。
3、rpn_relu->rpn_bbox_pred
这里就是预测每个点的boundingbox。同样的,rpn_bbox_pred也是一个1*1的卷积层而已。输出大小为(1,4*A,H,W) 。

关键在此,这里输出的并不是一个boundingbox的左上右下坐标,而是一个修改量(boundingbox regression)。在r-cnn的supplementary material中,给出了下面几个公式

这里面的就是的anchor(高、宽、中心),而里面的是rpn_bbox层输出的四个值,就是修改之后的高、宽、中心。
4、(rpn_bbox_pred+rpn_cls_prob_reshape)->proposal_layer
这里的proposal_layer就完成了上述修正,并且进行NMS(非极大抑制)以及概率排序等获得最终的boundingbox。这样就完成了在同一个点上获得不同尺度不同比例的包围盒。
输出大小为:(N,4),这里的 N与NMS以及概率排序阈值有关,得到的就是boundingbox的四个坐标。

4 关于FRCNN box回归为什么采用smooth L1 loss

对于边框的预测是一个回归问题。通常可以选择平方损失函数(L2损失)$f(x)=x^2$。但这个损失对于比较大的误差的惩罚很高。我们可以采用稍微缓和一点绝对损失函数(L1损失)$f(x)=|x|$,它是随着误差线性增长,而不是平方增长。

但这个函数在0点处不可导,因此可能会影响收敛。一个通常的解决办法是在0点附近使用平方函数使得它更加平滑。它被称之为平滑L1损失函数。它通过一个参数$\sigma$来控制平滑的区域。

原文地址:https://www.cnblogs.com/MY0213/p/9542578.html

时间: 2024-08-02 15:21:08

对faster rcnn 中rpn层的理解的相关文章

Faster R-CNN 的 RPN 是啥子?

? Faster R-CNN,由两个模块组成: 第一个模块是深度全卷积网络 RPN,用于 region proposal; 第二个模块是Fast R-CNN检测器,它使用了RPN产生的region proposal进行物体检测. 通过将 region proposal 融入 CNN 网络中, 整个系统是一个单一的,统一的对象检测网络. 具体为使用 RPN 的技术代替之前 Selection Search, 完成 region proposal, 那么 RPN 需要完成两个任务: 判断 ancho

Faster RCNN代码理解(Python)

转自http://www.infocool.net/kb/Python/201611/209696.html#原文地址 第一步,准备 从train_faster_rcnn_alt_opt.py入: 初始化参数:args = parse_args() 采用的是Python的argparse 主要有–net_name,–gpu,–cfg等(在cfg中只是修改了几个参数,其他大部分参数在congig.py中,涉及到训练整个网络). cfg_from_file(args.cfg_file) 这里便是代用

Faster rcnn代码理解(4)

上一篇我们说完了AnchorTargetLayer层,然后我将Faster rcnn中的其他层看了,这里把ROIPoolingLayer层说一下: 我先说一下它的实现原理:RPN生成的roi区域大小是对应与输入图像大小(而且每一个roi大小都不同,因为先是禅城九种anchors,又经过回归,所以大小各不同),所以在ROIPoolingLayer层中,先将每一个roi区域映射到经过conv5的feature map上,然后roi对应于feature map上的这一块区域再经过pooling操作映射

Faster R-CNN论文详解

原文链接:http://lib.csdn.net/article/deeplearning/46182 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks &创新点 设计Region Proposal Networks[RPN],利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search.EdgeBoxes等方法,速度上提升明显:

Faster RCNN 关键点总结

? 术语 描述 RoI Region of Interest RPN Region Proposal Network FRCN Fast RCNN Faster R-CNN,由两个模块组成: 第一个模块是深度全卷积网络 RPN,用于 region proposal; 第二个模块是 Fast R-CNN 检测器,它使用了RPN产生的region proposal进行检测. FRCN ? 网络输入 整张图片 object proposals(提出矩形图片坐标) 网络输出 N + 1 (N 类物体 +

检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3

1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置. 为了完成这两个任务,目标检测模型分为两类.一类是two-stage,将物体识别和物体定位分为两个步骤,分别完成,这一类的典型代表是R-CNN, fast R-CNN, faster-RCNN家族.他们识别

R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置. 为了完成这两个任务,目标检测模型分为两类.一类是two-stage,将物体识别和物体定位分为两个步骤,分别完成,这一类的典型代表是R-CNN, fast R-CNN, faster-RCNN家族.他们识别

R-CNN , Fast R-CNN , Faster R-CNN原理及区别

github博客传送门 csdn博客传送门 ==RCNN== 1.生成候选区域 使用Selective Search(选择性搜索)方法对一张图像生成约2000-3000个候选区域,基本思路如下: (1)使用一种过分割手段,将图像分割成小区域 (2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置.优先合并以下区域: 颜色(颜色直方图)相近的 纹理(梯度直方图)相近的 合并后总面积小的 合并后,总面积在其BBOX中所占比例大的 在合并时须保证合并操作的尺度较为均匀,避免

R-CNN/Fast R-CNN/Faster R-CNN

一.R-CNN 横空出世R-CNN(Region CNN,区域卷积神经网络)可以说是利用深度学习进行目标检测的开山之作,作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更是带领团队获得了终身成就奖,如今就职于Facebook的人工智能实验室(FAIR). R-CNN算法的流程如下 1.输入图像2.每张图像生成1K~2K个候选区域3.对每个候选区域,使用深度网络提取特征(AlextNet.VGG等CNN都可以)4.将特征送入每一类的SVM 分类器,判别是否属