faster rcnn中rpn层关于前景背景的处理方式

在经过4个下采样层获得feature map之后,这个featuremap会分别做两次卷积,一个卷积用于做前景背景的分类,另一个用于做boungding box的回归。前者的outfeature 数量为一个像素点对应anchor的数量,后者为前者数量*4(xywh)。
本文分析前者。

define bg/fg classifcation score layer

    self.nc_score_out = len(self.anchor_scales) * len(self.anchor_ratios) * 2 # 2(bg/fg) * 9 (anchors)
    self.RPN_cls_score = nn.Conv2d(512, self.nc_score_out, 1, 1, 0)

在forward函数中

return feature map after convrelu layer

    rpn_conv1 = F.relu(self.RPN_Conv(base_feat), inplace=True)

get rpn classification score

    rpn_cls_score = self.RPN_cls_score(rpn_conv1)

下面重点来了
rpn_keep = Variable(rpn_label.view(-1).ne(-1).nonzero().view(-1))
首先获得label中不是-1的索引。
rpn_cls_score = torch.index_select(rpn_cls_score.view(-1,2), 0, rpn_k

### Faster R-CNN 中 RPN 获取 Anchor 的具体机制 #### 特征图与 Anchor 映射关系 在 Faster R-CNN 框架中,Region Proposal Network (RPN) 的主要任务是从输入图像中生成一系列候选区域(proposals)。这些 proposals 是通过对特征图上的每个位置预先设定的一系列 anchor boxes 进行筛选和调整而获得的。首先,通过 backbone 网络(如 VGG、ResNet),原始图像会被转化为低分辨率的特征图。假设该网络具有固定的 stride $ s $ (例如 16 像素),那么特征图中的每一个点都可以对应到原图的一个 $ s \times s $ 区域[^3]。 #### Anchor Box 设计原则 为了覆盖各种可能的目标尺寸和形状,RPN 在每个特征图的位置都会生成多个 anchor boxes。具体的数量取决于所选的比例(aspect ratio)和尺度(scale)。一般情况下,会选择几种典型的长宽比(如 0.5, 1, 2)以及不同的大小范围(如小、中、大目标对应的面积)。这样组合下来,每一点可能会有若干个 anchor boxes,比如最常见的配置是 3 种 scale × 3 种 aspect ratio = 9 个 anchors[^2]。 #### 计算Anchor Boxes 给定某个特定的 feature map 上的单元格 $(i,j)$ ,其对应的中心点可以很容易地映射回 input image 的坐标系下。设 feature map size 为 H×W,则任意 point $(i,j)$ 对应的实际空间位置为中心位于 $\left(i*s+\frac{s}{2}, j*s+\frac{s}{2}\right)$ 处的 patch 。接着按照预定义好的 scales 和 ratios 来构建围绕这一点的各种矩形框作为 candidate regions 即anchors[^3]。 #### 学习过程概述 - **分类分支**: 判断每个 anchor 是否属于前景或者背景。 - **回归分支**: 调整 anchor 的位置使之更好地匹配真实的 ground truth bounding box。 这两个子任务共同构成了 RPN 的核心功能,并且两者共享相同的卷积权重以减少参数总量并加快运算速度[^1]。 --- ```python import numpy as np def generate_anchors(base_size=16, ratios=[0.5, 1, 2], scales=np.array([8, 16, 32])): """ Generate anchor reference windows by enumerating aspect ratios * scales w.r.t. a reference window. Args: base_size(int): Base anchor size before scaling and adjusting with different ratios/scales. ... Returns: List of generated anchors based on given parameters. """ pass # Implementation details omitted here. # Example usage demonstrating how to call the function above within an application context. generatedAnchors = generate_anchors() print(generatedAnchors) ``` --- ### 总结 综上所述,Faster R-CNN 中的 RPN 使用了一种系统化的方法来自动创建大量潜在的对象包围盒——anchors。这种方法结合了先验知识(关于常见物体比例的信息)和数据驱动的学习流程,使得它可以灵活应对多样化的检测挑战,同时保持较高的效率水平。
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值