(RegionProposal Network)RPN网络结构及详解

本文详细介绍了Region Proposal Network (RPN)的工作原理,包括anchors的概念,使用SOFTMAX进行前景和背景分类,bounding box regression进行框的微调,以及NMS(非极大值抑制)去除重复的检测框。RPN通过在特征图上滑动窗口生成候选区域,再通过回归优化得到更精确的物体框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RPN(RegionProposal Network)区域生成网络 

Faster-RCNN的核心。在这里整理。

 

1.anchors

特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128,256,512}×{128,256,512}×三种比例{1:1,1:2,2:1}{1:1,1:2,2:1}。这些候选窗口称为anchors。下图示出51*39个anchor中心,以及9种anchor示例。 
这里写图片描述

{1282,2562,5122}×{1282,2562,5122}×三种比例{1:1,1:2,2:1}{1:1,1:2,2:1}。这些候选窗口称为anchors。下图示出51*39个anchor中心,以及9种anchor示例。 
这里写图片描述

 

2.SOFTMAX的两支

 计算每个像素256-d的9个尺度下的值,得到9个anchor,我们给每个anchor分配一个二进制的标签(前景背景)。我们分配正标签前景给两类anchor:1)与某个ground truth(GT)包围盒有最高的IoU重叠的anchor(也许不到0.7),2)与任意GT包围盒有大于0.7的IoU交叠的anchor。注意到一个GT包围盒可能分配正标签给多个anchor。我们分配负标签(背景)给与所有GT包围盒的IoU比率都低于0.3的anchor。非正非负的anchor对训练目标没有任何作用,由此输出维度为(2*9)18,一共18维。

假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates

补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

 

-------------------------------------------------------分割线-------------------------------------------------------------------

以上是传统的RPN,下面是Faster R-CNN 的RPN部分。

 

3.bounding box regression

前2.)中已经计算出foreground anchors,使用bounding box regression回归得到预设anchor-box到ground-truth-box之间的变换参数,即平移(dx和dy)和伸缩参数(dw和dh),由此得到初步确定proposal。

 

如图9所示绿色框为飞机的Ground Truth(GT),红色为提取的foreground anchors,那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得foreground anchors和GT更加接近。

图9

缩进对于窗口一般使用四维向量

### RPN 网络结构图及其深度学习中的应用 区域提议网络(Region Proposal Network, RPN)是 Faster R-CNN 的核心组成部分之一,用于生成候选框。它是一种全卷积网络,能够高效地提取图像中的感兴趣区域(Regions of Interest, RoIs)。以下是关于 RPN 网络的一些关键特性以及其在深度学习中的作用: #### 1. **RPN 网络的核心功能** RPN 是一种无监督的子网络,能够在输入图片上滑动并预测可能的目标位置和大小。它的主要任务是从特征图中生成高质量的建议框(proposals),这些框随后被送入后续的分类器进行进一步分析[^1]。 #### 2. **RPN 网络的具体架构** RPN 架构通常由以下几个部分组成: - 输入层接收来自共享卷积层的特征映射。 - 卷积层通过一个小的 $3 \times 3$ 卷积核来提取局部特征。 - 输出两个分支:一个是负责回归边界框坐标的回归支路;另一个是用来评估每个锚点是否为目标对象的概率估计支路。 具体来说,在实现过程中可以采用如下代码片段展示如何构建基本的 RPN 层次逻辑: ```python import tensorflow as tf def rpn_layer(base_layers, num_anchors): """ 创建 RPN 层 参数: base_layers: 来自先前卷积层的基础特征图 num_anchors: 锚的数量 返回: x_class: 对应于类别得分的结果张量 x_regr: 对应于边框坐标调整的结果张量 """ # 使用单个 3x3 卷积核处理基础特征图 x = Conv2D(512, (3, 3), padding='same', activation='relu', kernel_initializer='normal')(base_layers) # 类别评分分支 x_class = Conv2D(num_anchors, (1, 1), activation='sigmoid', kernel_initializer='uniform')(x) # 边界框回归分支 x_regr = Conv2D(num_anchors * 4, (1, 1), activation='linear', kernel_initializer='zero')(x) return [x_class, x_regr] ``` 上述函数定义了一个简单的 RPN 结构,其中 `num_anchors` 表示预设的不同尺度和宽高比例的锚定数量。 #### 3. **可视化 RPN 网络结构** 为了更好地理解 RPN 工作原理,可以通过绘制流程图表或者利用工具库生成模型概览图。例如 TensorFlow/Keras 提供了内置方法帮助开发者查看整个计算图谱。 如果需要更直观了解,则推荐查阅相关论文附录或开源项目文档中提供的插图说明材料[^2]。 ---
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值