RCNN 和Faster RCNN 原理

RCNN使用Selective Search获取2k个候选框,然后逐个提取特征并用SVM分类和回归,训练过程较慢。Fast RCNN改进为一次性提取特征图,使用RoI Pooling加速。Faster RCNN引入RPN,先预测候选框,再进行分类和微调,显著提高了效率。RPN在特征图上生成多个框,区分前景和背景,处理坐标信息,实现快速目标检测。

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

RCNN

  • 通过ss算法提取2k个候选框
  • 对每个候选框提取特征图
  • 进行每个图的分类svm和回归

缺点: 训练慢, 每个候选框都需要提取特征图

fast RCNN

  • 提取一次特征图,共享特征图
  • 对于候选框映射到特征图上,加快了速度
  • Roi polling层,统一大小输入到全连接层进行分类,回归等

faster Rcnn

    ### Faster R-CNN 工作原理详解 #### 1. 区域提议网络 (RPN) Faster R-CNN 中最重要的改进在于引入了区域提议网络(Region Proposal Network, RPN),取代了传统的选择性搜索方法来生成候选框。RPN 是一种全卷积网络,能够高效地生成高质量的候选框[^1]。 ```python class RegionProposalNetwork(nn.Module): def forward(self, feature_map): # 使用滑动窗口在特征图上生成锚点 anchors = generate_anchors(feature_map) # 对每个锚点预测其是否为物体以及调整边框位置 objectness_scores, bbox_deltas = predict_objectness_and_bbox(anchors) return objectness_scores, bbox_deltas ``` #### 2. 候选框生成与筛选 RPN 输出大量候选框后,会对其进行非极大值抑制处理,去除重叠度较高的候选框,并保留最有可能包含目标的对象建议框。这些经过筛选后的候选框会被传递给后续模块进行分类回归操作。 #### 3. ROI Pooling 层 为了使不同大小的候选框具有相同的尺寸输入到全连接层中,Faster R-CNN 设计了一个特殊的池化层——ROI Pooling 层。该层可以根据不同的候选框自适应地提取固定大小的空间特征向量[^2]。 ```python def roi_pooling(input_features, rois, pooled_height=7, pooled_width=7): output = [] for roi in rois: # 计算感兴趣区域对应的特征图上的坐标范围 start_h, end_h, start_w, end_w = calculate_roi_coordinates(roi) # 自适应最大池化得到固定维度表示 pooled_feature = adaptive_max_pool( input_features[start_h:end_h, start_w:end_w], (pooled_height, pooled_width)) output.append(pooled_feature.flatten()) return torch.stack(output) ``` #### 4. 分类与边界框回归 最后一步是对每一个候选框执行二分类任务(背景 vs 物体类别)并优化边界框的位置参数。这部分采用了 Fast R-CNN 的设计思路,在共享卷积层基础上添加两个平行支路分别负责分类定位任务。 ```python class RCNNHead(nn.Module): def __init__(self, num_classes): super().__init__() self.fc_layers = nn.Sequential( nn.Linear(in_features=pooled_size * pooled_size * conv_channels, out_features=fc_hidden_units), nn.ReLU(), ... ) self.classifier = nn.Linear(fc_hidden_units, num_classes + 1) # 加1是因为有背景类 self.bbox_regressor = nn.Linear(fc_hidden_units, 4 * num_classes) def forward(self, pooled_rois): features = self.fc_layers(pooled_rois) class_logits = self.classifier(features) bbox_preds = self.bbox_regressor(features) return class_logits, bbox_preds ```
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    东哥aigc

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值