Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Two-Stage Object Detectors

两阶段目标检测器先提出候选区域,再对每个区域进行分类和细化。了解 Faster R-CNN 的工作原理、R-CNN 系列及其权衡。

两阶段目标检测器是将任务拆成两步的目标检测模型:第一阶段提出可能包含目标的图像区域,第二阶段对每个区域进行分类,并优化其边界框。R-CNN 系列在 2014 年至 2018 年间确立了这种设计,并在多年里引领目标检测和实例分割基准测试。单阶段目标检测器会跳过候选区域提议步骤,在一次处理中从密集网格直接预测所有边界框,因此大多数实时系统都采用这类检测器。

两阶段检测器的工作原理#

骨干网络中的卷积神经网络会对整张图像计算一次特征图,通常还会在其上添加特征金字塔网络(FPN)。第一阶段是区域提议网络(RPN):它会在每个特征图位置为一组锚框打分,判断其是否包含目标,并回归偏移量来调整锚框形状;Faster R-CNN 在每个位置使用九个锚框,即三种尺寸乘以三种宽高比。非极大值抑制(NMS)会移除重叠的候选区域,得分最高的区域会传入第二阶段;在原始论文的测试阶段,每张图像会保留 300 个区域。在第二阶段,RoI 池化或更精确的后续方法 RoIAlign 会为每个候选区域裁剪固定大小的特征网格;随后,小型检测头会为每个裁剪区域预测类别(包括背景类别)以及类别专属的边界框偏移量。

在 torchvision 的 Faster R-CNN 的 RPN 上注册前向钩子,可以看到第二阶段要处理多少工作:

import urllib.request

from PIL import Image
from torchvision.models.detection import FasterRCNN_ResNet50_FPN_V2_Weights, fasterrcnn_resnet50_fpn_v2

# Load Faster R-CNN with a ResNet-50 FPN backbone, pretrained on COCO
weights = FasterRCNN_ResNet50_FPN_V2_Weights.DEFAULT
model = fasterrcnn_resnet50_fpn_v2(weights=weights).eval()
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg"))

# Report how many regions the first stage, the region proposal network, passes on
model.rpn.register_forward_hook(lambda module, inputs, output: print(f"Stage 1: {len(output[0][0])} proposals"))

# The second stage classifies and refines every proposal
detections = model([weights.transforms()(image)])[0]
labels = detections["labels"][detections["scores"] > 0.5]
print(f"Stage 2: {len(labels)} objects {[weights.meta['categories'][i] for i in labels]}")

它会输出 Stage 1: 1000 proposals 和 Stage 2: 6 objects ['person', 'bus', 'person', 'person', 'person', 'tie']:torchvision 在推理时会为每张图像保留 1,000 个候选区域,第二阶段再从中筛出六个置信度较高的检测结果。

R-CNN 系列#

  • R-CNN(2014):选择性搜索会提出约 2,000 个区域;每个区域都经过变形以符合固定尺寸,再单独传入 CNN;支持向量机则对特征进行分类。因此,使用 VGG-16 骨干网络时,GPU 上每张图像的检测耗时为 47 秒。
  • Fast R-CNN(2015):只计算一次特征图,并使用 RoI 池化从中提取每个候选区域的特征;与 R-CNN 相比,VGG-16 的训练速度提高了 9 倍,测试速度提高了 213 倍。
  • Faster R-CNN(2015):RPN 取代了选择性搜索,并共享骨干网络的特征,因此生成候选区域几乎不增加成本,完整检测器的运行速度达到每秒 5 帧。
  • Mask R-CNN(2017):第三个分支会为每个区域预测像素掩码,使检测器能够执行实例分割;RoIAlign 则在精确的分数位置采样特征,而 RoI 池化会将这些位置四舍五入。
  • Cascade R-CNN(2018):三个第二阶段检测头分别以逐渐升高的 IoU 阈值 0.5、0.6 和 0.7 进行训练,每个检测头都会优化前一个检测头输出的边界框,从而提高定位精度。

两阶段与单阶段检测器#

RPN 会在分类器处理背景前舍弃大部分背景,因此第二阶段只在采样后的区域上训练;这些区域中目标所占比例固定,在 Fast R-CNN 中为 25%,并且每个区域都会使用从其精确位置池化得到的特征进行分类。单阶段检测器会对密集网格中的每个位置打分;在 RetinaNet 中,每张图像约有 100,000 个候选位置。直到 2017 年,焦点损失降低了容易识别的背景候选位置的权重,两阶段检测器的准确率才不再领先。如今,单阶段模型以低得多的延迟达到或超过两阶段模型的准确率,而且单个网络更容易导出到边缘硬件,因此两阶段模型现在主要作为研究基线,或用于 Detectron2 等库。Ultralytics 的 auto_annotate 将同样的“先提议、再优化”拆分应用于两个模型,以进行数据标注:YOLO26检测器提出边界框,Meta 的分割一切模型(SAM)则以每个边界框为提示,对框内目标进行分割并生成分割标签。

实际应用#

  • 医学影像:Mask R-CNN 的变体会在显微镜图像和 CT 扫描中检测并勾勒出单个细胞、细胞核和病灶的轮廓;由于每个实例都需要单独的掩码用于计数和测量。
  • 文档版面分析:包含 36 万多张页面图像的 PubLayNet 基准数据集用于训练 Faster R-CNN 和 Mask R-CNN 模型,以便在文本识别前定位文本块、标题、列表、表格和图形。
  • 航拍图像:Oriented R-CNN 扩展 RPN 以提出旋转区域,因此第二阶段会为 DOTA 数据集中的船只、飞机和车辆输出定向边界框。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来