Faster R-CNN

Faster R-CNN的组成

在这里插入图片描述

Faster R-CNN主要由两部分组成:Backbone、区域建议网络(RPN)和Fast R-CNN
近似:Faster RCNN = RPN + Fast R-CNN)

1、Backbone(神经网络模型进行特征提取)

  • pre-train(预训练)
  • fine-tuning(微调)
  • re-train

输入的是固定大小的图片,经过卷积层提取特征图(feature maps)

2、RPN:Region Proposal Net(生成区域建议 )

代替selective searchs生成区域建议

1、输入feature map(特征图),然后经过区域建议网络(RPN)生成区域建议(region proposals)
2、然后通过softmax判断锚框(anchors)属于前景(foreground)或者背景(background)
3、再利用边界框(bounding box)回归修正锚框(positive anchors)获得精确的候选区域(proposals)

3、Fast RCNN: ROI + {Classification; Regression}(感兴趣池化)

1、该层输入的是特征图(feature maps)和候选区域(proposals)
2、综合这些信息后提取具有候选区域的特征图(proposal feature maps)

4、分类

将感兴趣池化(Roi pooling)生成的具有候选区域的特征图(proposal feature
maps)分别传入softmax分类和边界盒回归(bounding box regression)获得检测物体类别和检测框最终的精确位置。

1、Backbone

(1)作用:特征提取(一次)

  • 不用给每个ROI(感兴趣区域)都提取特征
  • 通过RPN(区域建议网络)将提取的特征来生成区域建议

(2)结构:ZF / Resnet / VGG16(13 conv + 13 Relu + 4 Pooling)

  • 把网络结构当积木来用的思维
  • 比如想要算快一些,网络换成mobile net, shuffle net都是可以的

(3)输出 :Batchsize x Channel x H/16 x W / 16 (VGG16举例)

  • faster rcnn将尺寸为1000 x 800大小的feature map归一化到600 x 800的尺寸,则其输出的特征图大小为1 x 256 x 38 x 50

(4)整体网络结构:Backbone获取特征图信息,然后用RPN网络筛选候选框和ROIPooling输出相同尺寸的特征图,整个faster rcnn如下图
在这里插入图片描述

2、 区域建议网络(RPN)

2.1 RPN结构解释

在这里插入图片描述

3×3卷积:用于语义转换,可以增加网络网络复杂度,增加区域建议网络(RPN)的你和能力
1x1卷积:用于通道转换,原则上可以转换成任意通道的特征图
feature map经过3×3卷积后,分成了两条线:

第一条线:通过softmax分类锚框(anchors)获得前景(positive)和背景(negative),要检测的目标是前景(positive)。由于是2分类(有无物体两种分类),所以它的维度是2k score(2个分数)。

2k score,因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,2个分数:前景(物体)的分数,和背景的分数;

第二条线:计算对于锚框(anchors)的边界盒回归(bounding box regression)偏移量,以获得精确的proposal。它的维度是4k coordinates(4个坐标)

4个坐标:是指针对原图坐标的偏移,首先一定要记住是原图;

最后的Proposal层则负责综合积极的锚框(positive anchors)和对应边界盒回归(bounding box regression)偏移量获取最终的区域建议(proposals),同时剔除太小和超出边界的建议(proposals)。
在这里插入图片描述

RPN网络的输入是前面CNN output的feature maps。我们在feature map上做一个大小为3x3的滑窗操作, 得到一个channel是256维的特征图,尺寸与input的特征图相同,维度是256HW。
对这个256维的向量,我们分别做两次1x1卷积操作,一个得到2k score, 一个得到4k coordinates。
这个2k score只区分是不是目标,输出候选区域属于前景(物体)和背景的分数,这里注意,这里的分类只区分是否包含目标,至于所包含目标的类别,是Faster-RCNN最后的分类网络干的事情。4k coordinates指的是对原图坐标的偏移。

论文预先设定好生成9个anchors。我们前面说到对于feature map, 我们有一个3*3的滑窗操作。对于每次滑窗所划到的3x3的区域,就以该区域中心点为坐标,生成9个anchor。anchor它的本质是,将相同尺寸的输入,得到不同尺寸的输出。它们的中心相同,但是有不同的长宽比和尺度。这9个anchor, 中心坐标一样,但是大小各不相同,如下图:
在这里插入图片描述

RPN的目标:

  • 生成region proposal(区域建议)
  • 因为流程是:先RPN找出区域建议的物体,然后在做更加精细的类别划分和Bbox回归,这种方式被称为Two-Stage
  • 因此有人认为两阶段检测比一阶段检测更准

3、 Fast R-CNN

Fast R-CNN = ROI + {Classification; Regression}

4、RPN损失函数+Fast R-CNN损失

上文提到的k就是anchors的数量,所以2k个分数就是9个anchors的共18个分数,36(4×9)个坐标。对于每个anchor, 计算anchor与ground-truth bounding boxes的IoU,大于0.7则判定为有目标,小于0.3则判定为背景,介于0.3-0.7,则设为0,不参与训练,RPN损失函数:
在这里插入图片描述

损失函数有两部分:分类损失和回归损失
分类损失:
在这里插入图片描述

回归损失:
在这里插入图片描述

对应着RPN的两条路线,即是否包含目标和bbox的坐标与anchor坐标的回归误差。
注意回归误差这一项中 ,L与p相称,也就是说,如果anchor不包含目标,那么box输出位置是不算误差的,对于Lreg,只计算 Lcls,判定为有目标的anchor。
Lcls就是交叉熵,Lreg是分类的损失;
计算每个anchor分配的四个坐标和ground truth的坐标的偏移量,用的是L1范数。看一下pytorch的官方实现:

 self.rpn_loss_cls = F.cross_entropy(rpn_cls_score, rpn_label)
 self.rpn_loss_box = _smooth_l1_loss(rpn_bbox_pred, rpn_bbox_targets, rpn_bbox\
           inside_weights,rpn_bbox_outside_weights, sigma=3, dim=[1,2,3])
### Faster R-CNN 算法介绍 Faster R-CNN 是一种基于深度学习的目标检测算法,由 Ross Girshick 提出,是对 Fast R-CNN 的重要改进[^2]。该算法的核心创新在于引入了区域生成网络 (Region Proposal Network, RPN),从而实现了端到端的训练和推理过程。 #### 区域生成网络 (RPN) RPN 是 Faster R-CNN 中的关键组件之一,其作用是从输入图像中生成高质量的候选区域 (region proposals)[^2]。相比之前的 Fast R-CNN 和传统的方法(如 Selective Search),RPN 显著减少了候选区域生成的时间开销,并将其无缝集成到了整个目标检测框架之中。通过共享卷积特征图,RPN 能够高效地完成候选框的预测任务。 #### 主要组成部分 Faster R-CNN 可分为以下几个主要模块: 1. **卷积层**: 使用预训练好的 CNN 模型(如 VGG-16 或 ResNet)提取图像的特征表示。 2. **RPN**: 利用上述特征图生成候选区域。 3. **RoI Pooling 层**: 将不同大小的候选区域映射为固定尺寸的特征向量。 4. **全连接层与分类器**: 对每个候选区域进行类别预测并调整边界框的位置参数。 这些部分共同协作,在 GPU 上达到了约 5 fps 的检测速度,同时保持较高的准确性。 ### 实现方式 以下是 Faster R-CNN 的基本实现流程: ```python import torch from torchvision.models.detection import faster_rcnn def create_faster_rcnn_model(num_classes): model = faster_rcnn.fasterrcnn_resnet50_fpn(pretrained=True) in_features = model.roi_heads.box_predictor.cls_score.in_features model.roi_heads.box_predictor = faster_rcnn.FastRCNNPredictor(in_features, num_classes) return model # 创建模型实例 num_classes = 91 # COCO 数据集中的类别数加背景类 model = create_faster_rcnn_model(num_classes) # 定义优化器和其他超参... optimizer = torch.optim.SGD(model.parameters(), lr=0.005, momentum=0.9, weight_decay=0.0005) ``` 此代码片段展示了如何利用 PyTorch 构建一个 Faster R-CNN 检测模型,并对其进行自定义修改以适应特定数据集的需求。 ### 应用场景 由于其出色的性能表现,Faster R-CNN 广泛应用于多种实际领域,包括但不限于自动驾驶汽车中的障碍物识别、医学影像分析中的病灶定位以及无人机监控下的物体追踪等任务[^3]。例如,在交通管理方面,它可以快速准确地标记车辆行人信息;而在安防行业,则可用于视频流内的异常行为监测。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值