Anchor Boxes
了解锚框如何充当目标检测的参考模板。探索它们如何提升准确率,以及 Ultralytics YOLO26 等模型如何采用无锚设计。
锚框是具有特定宽高比和尺度的预定义参考矩形,它们被铺设在图像各处,以帮助目标检测模型定位和分类对象。模型不是要求神经网络从头预测对象的精确大小和位置——这可能会因对象形状种类繁多而不稳定——而是将这些固定模板作为起点。通过学习预测需要调整的幅度,即对这些初始框进行“回归”以匹配真实标注框,系统可以实现更快的收敛速度和更高的准确率。这项技术通过将复杂的定位任务简化为更易处理的优化问题,从根本上改变了计算机视觉 (CV)领域。
锚框的工作机制#
在经典的锚框式检测器中,输入图像会被划分为网格单元。在每个单元位置,网络会生成多个具有不同几何形状的锚框。例如,为了同时检测一个高个行人和一辆宽车,模型可能会在同一中心点提出一个高而窄的框以及一个矮而宽的框。
在模型训练期间,系统会使用名为交并比 (IoU)的指标,将这些锚框与实际对象进行匹配。与标注对象有较大重叠的锚框会被指定为“正”样本。随后,网络会学习两个并行任务:
-
分类: 为锚框分配一个概率分数,表示其中包含特定类别(例如“狗”或“自行车”)的可能性。这一过程使用交叉熵损失等标准监督学习目标。
-
边界框回归: 计算将通用锚框转换为紧密贴合的边界框所需的精确偏移值(坐标偏移和缩放因子)。
这种方法使模型能够处理彼此靠近且大小不同的多个对象,因为每个对象都可以分配给与其形状最匹配的锚框。
实际应用#
尽管较新的架构正逐渐转向无锚框设计,但在许多对象特征可预测的成熟生产系统中,锚框仍然至关重要。
- 零售与库存管理: 在AI 驱动的零售解决方案中,摄像头会监控货架库存。由于麦片盒或汽水罐等产品具有标准化尺寸,因此可以针对这些特定宽高比调优锚框。这些先验知识有助于模型即使在杂乱环境中也保持较高的召回率。
- 自动驾驶: 自动驾驶车辆中的感知系统依赖于检测行人、车辆和交通标志。由于从远处看到的汽车相对于道路具有较为一致的形状轮廓,使用针对这些形状定制的锚框可以确保稳健的目标跟踪和距离估计。
锚框式与无锚框式#
区分传统的锚框式方法与现代的无锚框检测器非常重要。
- 锚框式: 原始的Faster R-CNN或早期 YOLO 版本(例如 Ultralytics YOLOv5)等模型使用这些预定义模板。它们具有较强的鲁棒性,但通常需要手动调优超参数(锚框尺寸/宽高比),或使用k-means 聚类等聚类算法来适应新数据集。
- 无锚框式: 包括YOLO26在内的高级模型通常采用无锚框或端到端方法。这些网络直接预测对象中心或关键点,从而无需手动配置锚框。通过消除处理数千个空背景锚框所需的计算,这种方法简化了架构并加快了推理速度。
示例:访问锚框信息#
尽管现代高级 API(如Ultralytics Platform)会在训练期间隐藏这些细节,但在使用较旧的模型架构或分析模型配置文件时,理解锚框仍然很有用。以下代码片段演示了如何加载模型并检查其配置,其中通常会定义锚框设置(如果存在)。
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)过滤掉冗余的重叠框,以确保每个对象只保留置信度最高的检测结果。









