Object Detection
目标检测会找出图像中的每个对象,并为每个对象返回一个边界框、类别标签和置信度分数。了解检测器的工作原理和评估方式。
目标检测是一项计算机视觉任务,目的是在图像或视频帧中找出已知类别的每个实例,并报告其位置。对于每个对象,模型都会返回一个边界框、类别标签和置信度分数,因此一张街景照片会变成一个带标签的框列表,每辆车、每个人或每个交通灯对应一个框。这个列表是计数、测量、跟踪和机器人控制的输入。
检测器会返回什么#
每个检测结果包含三部分。边界框可以存储为角点坐标 (x1, y1, x2, y2),也可以存储为中心点加宽度和高度,单位为像素或相对于图像尺寸归一化后的值。类别是模型标签集中的索引,例如 COCO 数据集的 80 个类别。分数介于 0 和 1 之间,用于表示边界框中包含该类别目标的可能性;应用只保留高于置信度阈值的检测结果,在漏检和误报之间进行权衡。
from ultralytics import YOLO
# Load a YOLO26 nano detector pretrained on the 80 COCO classes
model = YOLO("yolo26n.pt")
# Run detection on one image
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Each detection carries a class, a confidence score, and a box in pixels
for box in result.boxes:
name = result.names[int(box.cls)]
corners = box.xyxy[0].int().tolist()
print(f"{name} {box.conf.item():.2f} {corners}")每一行打印结果都对应一个检测到的对象:对象的类别名称、置信度,以及左上角和右下角的像素坐标。
目标检测器如何工作#
现代检测器是由三个阶段组成的神经网络。主干网络通常是卷积网络或视觉 Transformer,可将图像转换为特征图。特征金字塔网络等颈部网络会融合不同尺度的特征图,从而同时表示大小对象。随后,检测头会在数千个位置预测类别分数和框坐标。相邻位置可能会针对同一对象触发,因此原始输出中会有许多重叠候选框;大多数流水线会丢弃低分框,并运行非极大值抑制 (NMS),为每个对象保留一个框。像 DETR 这样的端到端检测器经过训练后会为每个对象恰好输出一个预测,因此可以跳过这一步。
检测器设计的不同之处在于如何寻找候选框。两阶段检测器(例如 Faster R-CNN)会先提出可能包含对象的区域,然后对每个区域进行分类和细化。单阶段检测器(例如 2015 年推出的 YOLO)会在一次前向计算中预测所有框和类别,使实时检测成为现实。早期单阶段模型会从预定义锚框回归偏移量,而无锚框检测器则直接预测网格点到框四条边的距离。YOLO26是一种单阶段无锚框检测器,默认会执行 NMS;传入 nms=False 可切换到一对一检测头,直接输出最终框而无需执行 NMS。
训练与评估#
检测器通过学习带有对象框和类别标注的图像来训练。在训练过程中,标签分配步骤会决定哪些预测负责检测每个已标注对象;损失函数将分类项与边框回归项结合,后者通常基于交并比 (IoU),即预测框与标注框之间的重叠程度。评估时也会使用 IoU:当检测类别匹配且检测框与标注框的 IoU 达到阈值时,该检测才算正确。随后,平均精度均值 (mAP)会汇总所有置信度级别和类别的精确率与召回率。COCO 报告在 IoU 为 0.5 时计算的 mAP50,并将平均 IoU 阈值为 0.50 到 0.95 的 mAP50-95作为主要指标。VLM Leaderboard使用 mAP50 比较仅根据类别名称检测对象的视觉语言模型。YOLO26 在这些标签上训练之前,Ultralytics Platform 会使用这类模型自动标注检测数据集。
实际应用#
- 自动驾驶:驾驶辅助和自动驾驶系统会在每一帧摄像头画面中检测车辆、行人、骑行者和交通标志,跟踪和运动规划则会根据这些框采取行动。
- 零售:货架摄像头会检测商品和空货位,以标记缺货商品;自助结账系统则会检测顾客放在收银台上的商品。
- 制造业质检:生产线摄像头会检测划痕、凹痕和缺失部件,以便在有缺陷的零件经过时将其剔除。










