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






