Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Anchor Boxes

锚框是预设尺寸和纵横比的框,检测器会移动并调整这些框的大小以贴合物体。本文介绍锚框的尺寸设定、匹配和使用方法。

锚框是预先定义的矩形,具有固定尺寸和宽高比,并平铺在检测器特征图的每个位置,作为对目标位置和形状的初始猜测。基于锚框的检测器会为每个锚框计算各类别的分数,并预测用于移动和调整锚框尺寸的小幅偏移量,使锚框适配目标;这种做法比从零开始预测边界框更容易学习。Faster R-CNN在每个位置放置 9 个锚框:3 种面积(128²、256² 和 512² 像素)乘以 3 种宽高比(1:1、1:2 和 2:1),对于 1000 × 600 的图像,总计约 20,000 个锚框。

锚框的定义方式#

一组锚框是在特征图的每个单元格重复使用的尺寸和宽高比列表,因此锚框数量等于单元格数 × 每个单元格的形状数。采用特征金字塔网络(FPN)的检测器会将小锚框分配给精细、高分辨率层,将大锚框分配给粗糙层:RetinaNet在五个层级的每个位置使用 9 个锚框,每张图像约有 100,000 个。SSD将它们称为默认框,而 SSD300 会平铺 8,732 个默认框。

人工挑选的形状未必适合某些数据集,因此 YOLOv2对训练边界框的宽度和高度运行了k-means 聚类,以 1 − IoU 作为距离,并保留 5 个聚类中心作为锚框。YOLOv3聚类出 9 个锚框,并将它们平均分配到三个输出步幅上,从步幅为 8 的层级上的 10 × 13 像素,到步幅为 32 的层级上的 373 × 326 像素。

将锚框与目标匹配#

训练期间,每个锚框都会通过交并比(IoU)与每个标注框进行比较。与目标重叠足够多的锚框会成为正样本,并学习目标类别以及其边界框的偏移量;重叠很少的锚框会成为负样本并学习“背景”,而介于两者之间的锚框则会被忽略。Faster R-CNN 的区域提议网络将 IoU 不低于 0.7 的锚框标记为正样本,将低于 0.3 的标记为负样本;它还会将每个目标匹配度最高的锚框设为正样本,因此不会有目标缺少对应锚框。

import torch
from torchvision.ops import box_iou

# Nine anchors centered on one feature-map cell at (200, 200): 3 sizes x 3 aspect ratios (height / width)
shapes = [(size, ratio) for size in (64, 128, 256) for ratio in (0.5, 1.0, 2.0)]
anchors = []
for size, ratio in shapes:
    w, h = size / ratio**0.5, size * ratio**0.5
    anchors.append([200 - w / 2, 200 - h / 2, 200 + w / 2, 200 + h / 2])

# A labeled pedestrian box (x1, y1, x2, y2): tall and narrow
person = torch.tensor([[160.0, 110.0, 240.0, 290.0]])

# Faster R-CNN RPN rule: IoU >= 0.7 is positive, below 0.3 is negative, anything between is ignored
iou = box_iou(torch.tensor(anchors), person).squeeze(1)
for (size, ratio), value in zip(shapes, iou.tolist()):
    label = "positive" if value >= 0.7 else "negative" if value < 0.3 else "ignored"
    print(f"size {size}, ratio {ratio}: IoU {value:.2f} -> {label}")

只有高 128 像素的锚框(宽高比 2.0)与行人的重叠程度足以成为正样本,IoU 为 0.88。另外两个 128 像素锚框的 IoU 分别为 0.31 和 0.50,因此会被忽略;六个尺寸不匹配的锚框则为负样本。随后,正锚框会按标准参数化方式学习偏移量:中心点按锚框宽度和高度的比例移动,宽度和高度则按预测值的指数进行缩放。

为数据集选择锚框尺寸#

与数据集目标形状匹配的锚框能让更多目标获得正锚框,从而提高检测器可达到的召回率。Ultralytics YOLOv5以 YOLOv3 的 9 个锚框为起点,并在训练前通过 AutoAnchor 检查这些锚框:它会测量这些锚框在训练标注上的理论最佳召回率;除非该值超过 0.98,否则就会用 k-means 和 1,000 代遗传演化重新拟合锚框,并且只有召回率提高时才保留新锚框。

局限性与无锚框检测器#

锚框会带来三方面的成本。图像中数万个锚框几乎都覆盖背景,容易负样本会使损失占据主导,因此 RetinaNet 引入了焦点损失来降低这些样本的权重。多个相邻锚框可能匹配同一个目标,因此输出需要经过非极大值抑制(NMS),为每个目标保留一个边界框。尺寸、宽高比和 IoU 阈值也都是会随数据集和图像尺寸变化的超参数。

无锚框检测器通过从点或关键点预测边界框,去除了这些超参数;自 2021 年 YOLOX 发布以来,大多数实时检测器都采用了无锚框设计。基于锚框的检测器仍包括 Faster R-CNN、Mask R-CNN和 RetinaNet 等模型。通过比较 RetinaNet 与无锚框的 FCOS,ATSS发现,只要两者采用相同的正样本选择方式,每个位置使用 9 个锚框的 RetinaNet 并不比使用 1 个锚框更准确。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来