了解非极大值抑制 (NMS) 如何消除目标检测中的重复边界框。探索 Ultralytics YOLO26 如何提供原生的端到端 NMS。
非极大值抑制 (NMS) 是一种后处理技术,用于 目标检测,以优化模型生成的原始预测结果。当目标检测模型分析图像时,它通常会为一个目标生成多个重叠的 边界框,每个边界框都带有一个相关的 置信度分数。这些冗余预测的产生是因为模型可能在略微不同的尺度或位置上 detect 到相同的特征。NMS 通过保留每个目标最准确的边界框并丢弃其他边界框来过滤此输出,从而确保最终输出结果清晰、精确且无重复。
NMS 算法对候选边界框列表及其对应的置信度分数进行操作。目标是为对象选择最佳边界框,并抑制(移除)任何与其显著重叠的其他边界框,因为这些很可能是同一对象的重复 detect。该过程通常遵循以下步骤:
NMS 在精度至关重要且重复的 detect 会混淆下游系统的场景中至关重要。
尽管许多现代框架在内部处理NMS,但理解其实现有助于调整参数。以下示例演示了如何使用PyTorch库应用NMS:
import torch
import torchvision.ops as ops
# Example bounding boxes: [x1, y1, x2, y2]
boxes = torch.tensor(
[
[100, 100, 200, 200], # Box A
[105, 105, 195, 195], # Box B (High overlap with A)
[300, 300, 400, 400], # Box C (Distinct object)
],
dtype=torch.float32,
)
# Confidence scores for each box
scores = torch.tensor([0.9, 0.8, 0.95], dtype=torch.float32)
# Apply NMS with an IoU threshold of 0.5
# Boxes with IoU > 0.5 relative to the highest scoring box are suppressed
keep_indices = ops.nms(boxes, scores, iou_threshold=0.5)
print(f"Indices to keep: {keep_indices.tolist()}")
# Output will likely be [2, 0] corresponding to Box C (0.95) and Box A (0.9),
# while Box B (0.8) is suppressed due to overlap with A.
传统上,NMS一直是主神经网络之外的强制性“清理”步骤,增加了推理延迟。然而,该领域正在向端到端架构发展。

开启您的机器学习未来之旅