一小时吃透 R-CNN & Fast R-CNN & Faster R-CNN_rpn网络(1)

R-CNN 家族是一个 two-stage 的目标检测算法.

在这里插入图片描述

目标检测算法

在这里插入图片描述
三大分类:

  • 传统的目标检测算法:
    • Cascade + HOG/DPM + Haar/SVM
  • 候选窗 + 深度学习分类:
    • R-CNN (Selective Search + CNN + SVM)
    • Fast R-CNN (Selective Search + CNN + ROI)
    • Faster R-CNN (RPN + CNN + ROI)
  • 深度学习回归方法:
    • Yolo
    • SSD
    • DenseBox
    • RRC detection
    • Deformable CNN

重点

SPP 池化 (2014)

SPP(Spatial Pyramid Pooling) 即金字塔池化, 可以帮助我们将图像切分成各种粗细级别, 然后整合特征. SPP 解决了 R-CNN 把图片统一缩放到一定的大小, 从而失去了多尺寸的信息的问题.
在这里插入图片描述

如图, 特征图通道数为 256, 通过金字塔池化我们可以得到 1 × 1, 2 × 2, 和 4 × 4 的特征图:

  • 对整个图片池化每层得到一个点, 共 256 个点, 构成一个 1 × 256 的向量
  • 将图片划分成 2 × 2 的格子, 共 256 个点, 构成一个 4 × 256 的向量
  • 将图片划分成 4 × 4 的格子, 共 256 个点, 构成一个 16 × 256 的向量
  • 对得到的结果进行拼接, 得到 (1 + 4 + 16) × 256 = 21 × 256 个向量

在这里插入图片描述
代码实现:

import math
import torch
import torch.nn.functional as F
 
# 构建SPP层(空间金字塔池化层)
class SPPLayer(torch.nn.Module):
 
    def __init__(self, num_levels, pool_type='max_pool'):
        super(SPPLayer, self).__init__()
 
        self.num_levels = num_levels
        self.pool_type = pool_type
 
    def forward(self, x):
        num, c, h, w = x.size() # num:样本数量 batch_size c:通道数 h:高 w:宽
        for i in range(self.num_levels):
            level = i+1
            kernel_size = (math.ceil(h / level), math.ceil(w / level))
            stride = (math.ceil(h / level), math.ceil(w / level))
            pooling = (math.floor((kernel_size[0]*level-h+1)/2), math.floor((kernel_size[1]*level-w+1)/2))
 
            # 选择池化方式
            if self.pool_type == 'max_pool':
                tensor = F.max_pool2d(x, kernel_size=kernel_size, stride=stride, padding=pooling).view(num, -1)
            else:
                tensor = F.avg_pool2d(x, kernel_size=kernel_size, stride=stride, padding=pooling).view(num, -1)
 
            # 展开、拼接
            if (i == 0):
                x_flatten = tensor.view(num, -1)
            else:
                x_flatten = torch.cat((x_flatten, tensor.view(num, -1)), 1)
        return x_flatten

金字塔池化通过最大池化解决了固定图像尺寸的限制, 并提高了提取特征的效率.

RPN 网络

RPN (Region Proposal Network) 是一种快速筛选候选框的算法. RPN 是基于滑动窗口的目标检测器, 输入是任意尺度的图像, 输出是一系列矩形候选区域.
在这里插入图片描述
RPN 网络 由一个 3 × 3 的卷积层, 分成两个 1 × 1的卷积层. 如图:
在这里插入图片描述
RPN 分为两个部分:

  1. 判断物体还是背景 (2 × 9): 通过 IOU 阈值, 把 IOU > 0.7 的作为物体, IOU < 0.3 的作为背景
  2. 修正坐标 (4 × 9): 找到锚框 (Anchor Box) 和真实框的映射关系. 可以通过平移和缩放实现.

RPN 的优势在于可以帮助我们判断物体和背景, 并使得锚框更接近真实框.

ROI 池化 (2015)

ROI (Region of Interest Pooling) 是 SPP 池化的简化版.
在这里插入图片描述
从大小不同的框中提取特征使得输出结果是等大的:
在这里插入图片描述
从上图我们可以看到一个 8 × 8 的特征图.
在这里插入图片描述
我们希望从这个 7 × 5 的预选框中得到 2 × 2 的特征.
在这里插入图片描述
比起 R-CNN 的一刀切, ROI 会从分割的四块区域进行最大池化 (Max Pooling)
在这里插入图片描述
ROI 池化 SPP 池化:

  • 两者都是用来把不同尺寸特征输入转化为相同尺寸特征输出
  • ROI 池化相当于单尺度的 SPP, 对一个输入只进行一次池化操作

R-CNN (2013)

R-CNN (Region Based Convolutional Neural Networks) 是第一个成功将深度学习应用到目标检测上的算法.

在这里插入图片描述

R-CNN 流程:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。

因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
img
img
img

既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
img

你选择,真正体系化!**

由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频

如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-THc38Z9w-1712549852410)]

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值