前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【AI 进阶笔记】两阶经典检测器:Faster RCNN

【AI 进阶笔记】两阶经典检测器:Faster RCNN

原创
作者头像
繁依Fanyi
发布2025-03-31 22:30:40
发布2025-03-31 22:30:40
6700
代码可运行
举报
运行总次数:0
代码可运行

1. 前言:目标检测的进化史

在计算机视觉的世界里,目标检测一直是个“烧脑”的问题。让计算机识别物体 “是什么”(分类)相对简单,但让它 “在哪里”(定位)就难了。

我们先简单回顾目标检测的进化史,看看 Faster R-CNN 到底解决了什么问题。

1.1 目标检测的老前辈们

在 Faster R-CNN 出现之前,我们有三个老前辈:

  • R-CNN(2014)
    • 先用 Selective Search 选出 2000+ 候选框
    • 送进 CNN 提取特征,然后用 SVM 分类。
    • 缺点: 速度太慢(每张图 47 秒)。
  • Fast R-CNN(2015)
    • 直接在 CNN 特征图上做候选框分类+边界框回归。
    • 但依然依赖 Selective Search,速度仍然有限。
  • Faster R-CNN(2016)
    • Region Proposal Network(RPN) 直接生成候选框,彻底抛弃 Selective Search
    • 速度提升到每张图 0.2 秒!

1.2 Faster R-CNN 解决了什么问题?

关键词:RPN + 共享特征图 + 端到端训练

Faster R-CNN 主要解决了两个痛点:

  1. 太慢:Fast R-CNN 依赖 Selective Search 生成候选框,速度受限。
  2. 无法端到端训练:R-CNN 需要单独训练多个模型(CNN、SVM、回归器)。

Faster R-CNN 的创新点:

  • RPN(Region Proposal Network) 取代 Selective Search。
  • 共享 CNN 特征,提高计算效率。
  • 端到端训练,提高检测精度。

一句话总结:Faster R-CNN = CNN + RPN + ROI Pooling + 分类+ 回归


2. Faster R-CNN 的核心架构解析

Faster R-CNN 的整体结构如下👇

2.1 Faster R-CNN 的四大模块

  1. CNN 特征提取(Backbone)
    • 常用 ResNet50、VGG16、MobileNet。
    • 作用:把输入图片变成 Feature Map(特征图)。
  2. RPN(Region Proposal Network)
    • 作用:自己选框!(取代 Selective Search)。
    • 输出前景候选框(RoI)。
  3. ROI Pooling
    • 作用:将不同大小的候选框转换为 固定大小(7×7)。
  4. 分类+边界框回归
    • Softmax 进行分类(判断目标是猫、狗还是人)。
    • 边界框回归(调整框的位置,使其更精确)。
在这里插入图片描述
在这里插入图片描述

3. Faster R-CNN 细节拆解

3.1 CNN 特征提取:让图像变成 Feature Map

Faster R-CNN 使用 CNN(通常是 ResNet)来提取图像的特征,作用是把 输入的图片 变成 Feature Map

示例:

  • 一张 224×224 的图片,经过 ResNet50 可能变成 7×7×2048 的特征图。
  • 这意味着:整张图片被压缩成了一个小得多的空间表示,但仍然包含丰富的特征信息。

3.2 RPN(Region Proposal Network)——让网络自己选框

RPN 解决的问题: 以往的目标检测器(如 R-CNN)需要手工选候选框,而 RPN 让网络自己选,省时省力!

RPN 的流程

  1. 滑动窗口: 用 3×3 卷积滑过 Feature Map,每个点生成 256 维 特征向量。
  2. 生成 Anchor:
    • 每个滑动窗口中心生成 9 个 Anchor(3 种尺度 × 3 种宽高比)。
  3. 分类(Objectness Score): 预测每个 Anchor 是前景(物体)还是背景。
  4. 边界框回归: 调整 Anchor,使其更贴合目标物体。
Anchor 机制解析

Anchor 是 Faster R-CNN 的核心概念,是 RPN 提出的 “候选框”

  • 3 种尺度(128, 256, 512) × 3 种宽高比(1:1, 1:2, 2:1) = 9 种 Anchor
  • 例如,一个点可能会有:
    • 128×128(正方形)
    • 256×128(长方形)
    • 512×512(大正方形)
  • 网络会微调这些 Anchor,使它们更接近真实目标。

简而言之:Anchor 让 Faster R-CNN 不用从零开始学框,而是基于预定义框进行微调,学习更高效!


3.3 ROI Pooling:让框大小统一

问题:RPN 生成的候选框大小不一,怎么处理?

ROI Pooling 解决方案:

  1. 把 RPN 提出的框投影到 Feature Map 上。
  2. 使用池化(Pooling)方法,把所有框都变成固定大小(7×7)。

ROI Pooling 的作用:让不同大小的框变成统一大小,方便后续处理。


3.4 分类与边界框回归

最后,经过 ROI Pooling 处理的特征进入全连接层,完成两件事:

  1. 分类(Softmax):判断目标类别(猫、狗、人等)。
  2. 边界框回归(Bounding Box Regression):调整框的位置,使其更加精准。

4. PyTorch 实战:Faster R-CNN 目标检测

4.1 代码准备

先安装 PyTorch 相关依赖:

代码语言:bash
复制
pip install torch torchvision matplotlib

然后导入必要库:

代码语言:python
代码运行次数:0
运行
复制
import torch
import torchvision
from torchvision.models.detection import fasterrcnn_resnet50_fpn
import matplotlib.pyplot as plt
from PIL import Image
import torchvision.transforms as T

4.2 加载预训练模型

代码语言:python
代码运行次数:0
运行
复制
model = fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()

4.3 读取并预处理图片

代码语言:python
代码运行次数:0
运行
复制
image = Image.open("test.jpg")
transform = T.Compose([T.ToTensor()])
image = transform(image).unsqueeze(0)  # 增加 batch 维度

4.4 目标检测

代码语言:python
代码运行次数:0
运行
复制
with torch.no_grad():
    prediction = model(image)

4.5 可视化检测结果

代码语言:python
代码运行次数:0
运行
复制
import matplotlib.patches as patches

fig, ax = plt.subplots(1, figsize=(8, 6))
ax.imshow(Image.open("test.jpg"))

for box, score in zip(prediction[0]['boxes'], prediction[0]['scores']):
    if score > 0.5:
        x1, y1, x2, y2 = box
        rect = patches.Rectangle((x1, y1), x2 - x1, y2 - y1, linewidth=2, edgecolor='r', facecolor='none')
        ax.add_patch(rect)

plt.show()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言:目标检测的进化史
    • 1.1 目标检测的老前辈们
    • 1.2 Faster R-CNN 解决了什么问题?
  • 2. Faster R-CNN 的核心架构解析
    • 2.1 Faster R-CNN 的四大模块
  • 3. Faster R-CNN 细节拆解
    • 3.1 CNN 特征提取:让图像变成 Feature Map
    • 3.2 RPN(Region Proposal Network)——让网络自己选框
      • Anchor 机制解析
    • 3.3 ROI Pooling:让框大小统一
    • 3.4 分类与边界框回归
  • 4. PyTorch 实战:Faster R-CNN 目标检测
    • 4.1 代码准备
    • 4.2 加载预训练模型
    • 4.3 读取并预处理图片
    • 4.4 目标检测
    • 4.5 可视化检测结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档