了解锚框如何作为物体detect的参考模板。发现它们如何提高准确性,以及Ultralytics YOLO26等模型如何采用无锚框设计。
锚框是预定义的具有特定长宽比和尺度的参考矩形,它们被放置在图像上,以协助 object detection 模型定位和 classify 对象。与其要求神经网络从头开始预测对象的精确大小和位置(这可能由于对象形状的多样性而不稳定),模型使用这些固定模板作为起点。通过学习预测如何调整或“回归”这些初始框以适应真实情况,系统可以实现更快的收敛和更高的准确性。这项技术通过将复杂的定位任务简化为更易于管理的优化问题,从根本上改变了 计算机视觉 (CV) 领域。
在经典的 基于锚框的检测器 中,输入图像被划分为网格单元。在每个单元格位置,网络会生成多个具有不同几何形状的锚框。例如,为了同时 detect 一个高大的行人和一辆宽大的汽车,模型可能会在同一中心点提出一个高而窄的框和一个短而宽的框。
在 模型训练 期间,这些锚框会使用一个名为 交并比 (IoU) 的指标与实际对象进行匹配。与标注对象显著重叠的锚框被指定为“正”样本。网络随后学习两个并行任务:
这种方法允许模型处理彼此靠近的多个不同大小的物体,因为每个物体都可以被分配到最匹配其形状的锚框。
尽管较新的架构正转向无锚框设计,但在许多已建立的生产系统中,锚框仍然至关重要,因为在这些系统中,对象的特征是可预测的。
区分传统的基于锚框的方法和现代的 无锚框检测器 很重要。
虽然像 Ultralytics Platform 这样的现代高级API在训练过程中抽象了这些细节,但理解锚点在处理较旧的模型架构或分析模型配置文件时仍然很有用。以下代码片段演示了如何加载模型并检查其配置,其中锚点设置(如果存在)通常会在此处定义。
from ultralytics import YOLO
# Load a pre-trained YOLO model (YOLO26 is anchor-free, but legacy configs act similarly)
model = YOLO("yolo26n.pt")
# Inspect the model's stride, which relates to grid cell sizing in detection
print(f"Model strides: {model.model.stride}")
# For older anchor-based models, anchors might be stored in the model's attributes
# Modern anchor-free models calculate targets dynamically without fixed boxes
if hasattr(model.model, "anchors"):
print(f"Anchors: {model.model.anchors}")
else:
print("This model architecture is anchor-free.")
尽管有效,但锚框引入了复杂性。生成的大量锚框(通常每张图像数万个)造成了类别不平衡问题,因为大多数锚框只覆盖背景。像 Focal Loss 这样的技术被用来通过降低容易背景示例的权重来缓解这个问题。此外,最终输出通常需要 非极大值抑制 (NMS) 来过滤掉冗余的重叠框,确保每个对象只保留最自信的 detect。
开启您的机器学习未来之旅