Object Detection Architectures
目标检测架构是将像素转换为框和标签的网络设计。了解主干网络、颈部和检测头,以及主要的检测器系列。
目标检测架构是将图像转换为边界框、类别标签和置信度分数列表的网络设计。几乎所有现代检测器都由骨干网络、颈部和检测头组成;设计的主要差异在于如何生成候选框(例如通过区域提议、密集网格或学习得到的查询),以及如何去除重复预测(例如使用非极大值抑制 (NMS)或一对一匹配)。这些选择决定了检测器的准确率、速度,以及在边缘硬件上的部署难易度。目标检测指的是任务,而检测头是架构的一部分。
骨干网络、颈部和检测头#
骨干网络负责提取特征。它可以是 ResNet 或 CSPDarknet 这样的卷积神经网络,也可以是视觉 Transformer,通常会在 ImageNet 分类数据集上进行预训练。骨干网络会分阶段对图像下采样,因此随着网络加深,特征图的分辨率降低,语义信息增加。颈部通常是特征金字塔网络 (FPN),并像 PANet 一样增加一条自底向上的路径,用于融合深层和浅层特征图,使每个输出尺度都同时包含细节和上下文信息。检测头会在每个尺度的每个位置预测边界框和类别分数,通常使用步幅为 8、16 和 32 的尺度,因此最精细的特征图用于检测小物体,最粗糙的特征图用于检测大物体。你可以从模型定义中看出真实检测器的这三个组成部分:
from ultralytics import YOLO
# 加载 YOLO26n,并按照模型 YAML 中的方式拆分其层
model = YOLO("yolo26n.pt")
layers = model.model.model
n_backbone = len(model.model.yaml["backbone"])
# 骨干网络提取特征,颈部融合尺度,最后一层是检测头
print("Backbone:", [type(m).__name__ for m in layers[:n_backbone]])
print("Neck:", [type(m).__name__ for m in layers[n_backbone:-1]])
print("Head:", type(layers[-1]).__name__, "at strides", model.model.stride.tolist())骨干网络列表显示了带步幅的 Conv 层和以 SPPF 池化层及 C2PSA 注意力模块结束的 C3k2 模块;颈部从上到下运行 Upsample、Concat 和 C3k2 层,再通过带步幅的 Conv、Concat 和 C3k2 层向上返回;Detect 检测头则在步幅为 8、16 和 32 的尺度上进行预测。
检测器类别#
- 两阶段检测器: 区域提议网络会提出数百个候选区域,第二个检测头再对每个区域进行分类和细化,例如 Faster R-CNN(2015)和 Mask R-CNN(2017)。
- 基于锚框的单阶段检测器: SSD(2016)、YOLOv2 至 YOLOv5,以及 RetinaNet(2017)会在一次前向处理中,预测每个网格单元中相对于预定义锚框的偏移量。
- 无锚框检测器: FCOS(2019)和 YOLOv8(2023)会预测一个点到边界框四条边的距离;CenterNet(2019)会将边界框中心预测为热力图峰值,并为每个中心预测宽度和高度;YOLOX(2021)则让 YOLO 系列重新采用无锚框预测,因此这些模型都不需要调优锚框。
- DETR 风格的 Transformer 检测器:DETR(2020)会解码一组固定数量的学习型目标查询,并将其与标注目标一对一匹配,因此输出无需 NMS;Deformable DETR 以少十倍的训练轮数取得更高准确率;RT-DETR则在 2023 年让这种设计实现了实时运行。
- 无 NMS 的 CNN 检测器: YOLOv10(2024)会在训练时同时使用一对一检测头和一对多检测头,并在推理时只运行一对一检测头,因此其边界框无需经过 NMS。
- 开放词汇检测器:Grounding DINO和 YOLO-World用文本嵌入取代固定分类层,因此可以检测推理时指定的类别。
选择架构#
COCO 上的平均精度均值(mAP)等基准可用于衡量准确率,但目标硬件和图像中的物体通常才是设计选择的决定因素。YOLO26是无锚框单阶段 CNN,包含两种类型的检测头:默认会对一对多分支应用 NMS,nms=False 会切换到一对一分支,其模型 YAML 文件还包含 P2 和 P6 变体,可增加步幅为 4 或 64 的输出。










