目标检测一阶段和二阶段

  • 两阶段检测:分两步完成检测 ------ 先生成候选目标区域(Proposal),再对候选区域做精细分类 + 边框回归;核心是 "先找哪里可能有目标,再判断是什么、框在哪"。
  • 一阶段检测:一步完成检测 ------ 直接在特征图上同时预测所有目标的类别与边框,端到端一次前向传播输出结果;核心是 "无需单独找候选区,直接全局预测"。

两阶段检测(Two-stage)

1. 底层执行流程(以经典 Faster R-CNN 为例)

整个网络分成两个独立阶段,依次执行:

  1. 第一阶段:生成候选区域(RPN 网络)
    • 输入:Backbone 提取的主干特征图
    • 操作:在特征图每个位置生成多个预设锚框,通过小型卷积网络做前景 / 背景二分类+ 粗略边框修正,筛选出几百个 "可能存在目标" 的候选区域(RoI)
    • 作用:过滤掉绝大部分纯背景区域,缩小第二阶段的计算范围
  2. 第二阶段:分类与精修(RoI Head)
    • 输入:第一阶段输出的候选区域
    • 操作:通过 RoI Align/Pooling 将不同尺寸的候选区域统一成固定尺寸特征,再送入全连接层 / 卷积头,完成具体类别分类 +高精度边框回归
    • 作用:输出最终的目标类别与精确边界框

2. 代表模型

R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、Cascade R-CNN 等。

3. 优缺点

  • 优势
    1. 精度上限更高,尤其是边框定位精度、细分类精度普遍优于早期一阶段模型
    2. 正负样本相对均衡(RPN 先过滤背景),小目标、遮挡目标表现更稳定
    3. 易于扩展实例分割、关键点检测等任务(如 Mask R-CNN)
  • 劣势
    1. 速度慢,推理帧率低,两次特征计算带来大量算力开销
    2. 模型参数量大,训练、部署复杂度高
    3. 端到端优化困难,RPN 与检测头是分步训练的

一阶段检测(One-stage)

1. 底层执行流程(以你正在用的 YOLOv8 为例)

没有单独的候选区域生成步骤,一次前向传播直接输出全部检测结果,对应你熟悉的三段式流水线:

  1. Backbone 提取多尺度特征
  2. Neck 完成多尺度特征融合
  3. Detect 解耦头直接在三层特征图的每个网格点上,同步预测:
    • 每个锚框的类别置信度(6 类缺陷)
    • 每个锚框的坐标偏移量(边框回归) 最后经 NMS 过滤冗余框,输出最终结果。

2. 核心特点

  • 整张图密集生成锚框,无需提前筛选候选区,直接全局预测
  • 为了解决 "正负样本极度不平衡(绝大多数锚框是背景)" 的问题,衍生出 Focal Loss (你正在配置的 fl_gamma),专门压制简单背景样本的损失权重,聚焦难检小目标
  • 代表模型:YOLO 全系列、SSD、RetinaNet、YOLOv8/v9、RT-DETR 等

3. 优缺点

  • 优势
    1. 速度极快,推理帧率高,完全满足实时检测需求
    2. 端到端训练,逻辑简洁,部署、落地难度低
    3. 模型轻量化空间大,适配边缘设备、工控机等工业场景
  • 劣势
    1. 早期版本(YOLOv1/v2)小目标、密集目标精度弱于两阶段
    2. 正负样本天然不均衡,需要依赖 Focal Loss、难样本挖掘等策略补偿

核心差异对比表

表格

对比维度 两阶段检测(Faster R-CNN) 一阶段检测(YOLOv8)
核心流程 RPN 生成候选区 → 分类 + 精修边框,两步完成 直接全局预测分类 + 坐标,一步端到端输出
速度 慢,通常 5~20 FPS 快,通常 30~100+ FPS
精度上限 理论上限更高,定位更精细 现代版本(YOLOv8+)已追平,部分场景反超
小目标表现 原生表现更稳定 需搭配 P2 小目标层、注意力等优化
正负样本平衡 RPN 过滤后相对均衡 天然失衡,依赖 Focal Loss、样本匹配策略
计算量 / 参数量 大,算力要求高 小,轻量化友好
部署难度 高,结构复杂 低,端到端导出方便
典型适用场景 高精度离线检测、医学影像、卫星遥感 实时工业质检、自动驾驶、安防监控