One-Stage Object Detectors
单阶段目标检测器在一次网络前向传播中预测所有框和类别,无需区域提议步骤。了解其工作原理、主要模型和权衡。
单阶段目标检测器是一类目标检测模型,只需对一个网络进行一次前向计算,就能预测图像中所有对象的边界框和类别标签,并同时为密集网格中的候选位置打分。它们没有单独的区域提议步骤:两阶段目标检测器会先提出可能包含对象的区域,再对每个区域运行第二个检测头。省去这一步后,单阶段检测器成为实时检测的基础,从 2015 年基础模型速度达到每秒 45 帧的 YOLO到当前模型都是如此。
单阶段检测器如何工作#
主干网络会将图像转换为特征图,颈部网络会融合不同尺度的特征图,而密集的检测头则会在每个尺度的每个位置预测类别分数和边界框。早期的单阶段模型(例如 SSD、YOLOv2 和 RetinaNet)会根据每个位置的多个锚框预测偏移量;自 2019 年 FCOS 出现以来,大多数模型都会预测每个位置到框四条边的距离,这是无锚框检测器的设计方式。最终会得到数千个候选框;置信度阈值和非极大值抑制 (NMS)会将其筛减为每个对象一个框,或者由经过一对一匹配训练的检测头直接输出。
运行单阶段检测器只需调用一次,其耗时细分显示只进行了一次网络前向计算:
from ultralytics import YOLO
# Load YOLO26n, a one-stage detector pretrained on the 80 COCO classes
model = YOLO("yolo26n.pt")
# One forward pass predicts the box and class of every object in the image
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
print(f"{len(result.boxes)} objects: {[result.names[int(c)] for c in result.boxes.cls]}")
# Milliseconds for resizing the image, the single network pass, and NMS
print(result.speed)result.speed 列出三个步骤:预处理、推理和后处理;一次推理即可处理图像中的所有对象。
单阶段检测器与两阶段检测器#
两种设计都共用主干网络和颈部网络。随后,两阶段检测器会运行区域提议网络,选出数百个候选区域,裁剪每个区域的特征,并将每个裁剪结果传给第二个检测头进行分类和细化。单阶段检测器则用一个覆盖每个网格位置的密集检测头取代这些步骤。
多年来,R-CNN 系列一直引领检测精度:Faster R-CNN会细化每张图像中约 300 个候选区域,并使用 VGG-16 主干网络以 5 FPS 运行。单阶段检测器速度快得多,但精度较低,直到 2017 年的 RetinaNet发现差距源于前景与背景类别不平衡:密集检测器每张图像会评估约 100,000 个候选位置,其中几乎全是背景,而这些容易判别的负样本会主导标准损失函数。RetinaNet 的焦点损失会降低这些负样本的权重;它的速度与早期单阶段检测器相当,同时精度超过了当时的两阶段检测器。DETR和 RT-DETR等 Transformer 检测器也只通过一个网络运行,并使用一对一匹配预测固定数量的框。
实际应用#
- 交通与视频分析:检测器会处理每路摄像头视频流的每一帧,以统计车辆数量、测量流量并为目标跟踪器提供输入。
- 制造业质检:生产线摄像头会在零件经过摄像头的短短一瞬间,检测出缺陷和缺失部件。
- 无人机和嵌入式设备:单个小型网络即可满足无人机、手机或智能摄像头的计算和功耗预算。
现代单阶段检测器背后的理念#
- 特征金字塔网络 (FPN):在多个分辨率上进行预测,可以让精细特征图找到小对象,让粗略特征图找到大对象。
- 焦点损失:降低容易判别的背景候选项的权重,解决了阻碍早期密集检测器发展的类别不平衡问题。
- 标签分配:SimOTA 和任务对齐分配等方法会在训练期间根据预测结果,为每个对象选出正样本位置。
- 无 NMS 检测头:经过一对一匹配训练的检测头会为每个对象输出一个框,从而省去后处理步骤;这一步的开销会随着候选框数量增加。
YOLO26是单阶段、无锚框检测器,具备两种类型的检测头:默认会应用 NMS,而 nms=False 会切换到一对一检测头。YOLO26n使用 NMS 时在 COCO上的 mAP50-95达到 40.9,不使用时为 40.1;在搭载 TensorRT的 NVIDIA T4 GPU上,每张图像耗时 1.7 毫秒。










