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

Detection Head

检测头是目标检测器的最后一部分,负责将骨干网络和颈部网络的特征转换为每个网格位置上的边界框和类别分数。

检测头是目标检测网络最后的一组层。它读取前面各层生成的特征图,并在每个候选位置输出一个边界框以及每个类别的分数。检测头的设计决定边界框如何编码:是相对于锚框的偏移量,还是相对于某个点的距离;还决定模型会生成多少个候选框,以及是否需要使用非极大值抑制 (NMS)等后处理步骤来去除重复框。

检测头的位置#

现代检测器由三个阶段组成。骨干网络通常是卷积网络或视觉 Transformer,它会将像素转换为特征图;随着网络加深,特征图分辨率会降低,语义信息则会增强。颈部网络(例如特征金字塔网络 (FPN))会融合深层和浅层特征图,使每种输出尺度都同时包含精细细节和上下文信息。随后,检测头会在金字塔的每个层级上运行小型卷积分支,通常对应步幅 8、16 和 32,因此精细特征图可以检测小物体,较粗的特征图则可以检测大物体。

单阶段检测器有一个密集检测头,会在每个网格单元上进行预测。两阶段检测器,例如 Faster R-CNN,有两个检测头:一个区域候选网络会在每个位置为锚框评分,随后一个感兴趣区域检测头会对它提出的几百个区域进行分类和细化。

检测头如何预测边界框和类别#

在每个网格单元中,密集检测头会预测三类数值:

  • 类别分数:每个类别对应一个分数,每个分数都会经过 sigmoid 函数处理,因此一个位置可以分别获得每个类别的分数。
  • 边界框回归:用于确定边界框位置的四个数值,可以是平移和调整锚框大小的偏移量,也可以是从网格单元中心到边界框四条边的距离。
  • 质量分数和任务输出:用于对边界框排序的 objectness 分数(YOLOv1 到 YOLOv5)或中心度分数(FCOS),以及实例分割中的掩码系数、姿态估计中的关键点等任务专属数值。

边界框的编码方式决定了基于锚框的检测器与无锚框检测器的区别。每个分支由几个卷积层组成,并以一个 1 × 1 卷积层结束;每个预测值对应一个输出通道。RetinaNet 和 FCOS 已经采用了彼此独立的分类分支和回归分支;YOLOX于 2021 年将这种解耦检测头引入 YOLO,并报告称其训练收敛速度远快于 YOLOv3的单个共享输出层。下面的示意代码为 640 × 640 图像的三个金字塔层级构建这些最终的 1 × 1 层,并将输出展平为一个候选框列表:

import torch
from torch import nn

# Neck outputs for a 640x640 image at strides 8, 16, and 32 (80x80, 40x40, and 20x20 grids)
channels = (64, 128, 256)
features = [torch.randn(1, c, 640 // s, 640 // s) for c, s in zip(channels, (8, 16, 32))]

# Decoupled head: a box branch (4 values) and a class branch (80 scores) for every pyramid level
box_branches = nn.ModuleList(nn.Conv2d(c, 4, 1) for c in channels)
cls_branches = nn.ModuleList(nn.Conv2d(c, 80, 1) for c in channels)

# Flatten each level's grid and concatenate, giving one candidate per grid cell
boxes = torch.cat([branch(f).flatten(2) for branch, f in zip(box_branches, features)], dim=2)
scores = torch.cat([branch(f).flatten(2) for branch, f in zip(cls_branches, features)], dim=2).sigmoid()
print(f"boxes {tuple(boxes.shape)}, class scores {tuple(scores.shape)}")

它会输出 boxes (1, 4, 8400), class scores (1, 80, 8400):6,400 + 1,600 + 400 个网格单元各自提出一个边界框,并为其提供 80 个类别分数。

从原始输出到检测结果#

训练过程会决定每个物体对应多少个预测结果。一对多分配会将每个物体附近的多个网格单元标记为正样本,为检测头提供更多训练信号;推理时,每个物体也会对应多个重叠框,因此需要使用 NMS 保留最佳结果。DETR和 YOLOv10的推理检测头采用一对一分配,为每个物体只训练一个预测结果,因此输出无需经过 NMS。

YOLO26检测头会直接预测四条边的距离,省去了 YOLOv8和 YOLO11使用的每条边 16 个分箱的 Distribution Focal Loss输出,并分别训练一对多和一对一的边界框分支与分类分支副本。YOLO26 默认对一对多输出应用 NMS;传入 nms=False 后则会切换到一对一分支,该分支每张图像最多返回 300 个边界框,且无需执行 NMS。

检测头的实际设计#

  • 针对新类别微调:分类分支的输出通道数与类别数相同,因此要在类别数不同的数据集上训练,就需要新的最终分类层;预训练的骨干网络和颈部网络权重则可以沿用。
  • 部署:检测头中的每项操作都会在目标设备上运行,因此简单的边界框解码和无需 NMS 的输出有助于简化模型导出并缩短后处理时间。
  • 小物体:添加步幅为 4 的金字塔层可以为微小物体提供更精细的网格,但会增加计算成本:对于 640 × 640 的输入,该层会增加 160 × 160 = 25,600 个网格单元,是步幅为 8 的层的四倍。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 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 的未来!

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