Anchor-Based Detectors
基于锚框的检测器会将物体预测为相对于预设锚框的偏移量,Faster R-CNN、SSD、RetinaNet 和 YOLOv5 都采用了这种方法。本文介绍其工作原理和对比。
基于锚框的检测器是目标检测模型,会在图像上平铺预定义的锚框,并针对每个锚框预测类别分数和偏移量,以将其调整为贴合目标的边界框。这一类模型包括两阶段模型,例如 Faster R-CNN,其区域提议网络会为锚框打分以生成候选区域;也包括单阶段模型,例如 SSD、RetinaNet 以及 YOLOv2 到 YOLOv5,它们会直接对每个锚框进行分类和调整。从 2015 年 Faster R-CNN 问世起,锚框一直是目标定位的标准方法,直到 2019 年 FCOS 等无锚框检测器达到同等准确率。
基于锚框的检测如何工作#
骨干网络和颈部网络会将图像转换为特征图,每张特征图的每个单元格都设有一组固定锚框,涵盖多种尺寸和宽高比。对于每个锚框,检测头会预测每个类别的一个分数、YOLOv2 到 YOLOv5 中的一个目标置信度分数,以及四个回归值。Faster R-CNN提出的广泛使用的编码方式,会按锚框宽度和高度的比例移动其中心点,并以指数方式缩放其宽度和高度:
import torch
# One anchor as (center x, center y, width, height) in pixels
anchor = torch.tensor([320.0, 240.0, 64.0, 128.0])
# Offsets (tx, ty, tw, th) that the regression branch predicts for this anchor
tx, ty, tw, th = torch.tensor([0.25, -0.10, 0.20, -0.05])
# Faster R-CNN decoding: shift the center in units of anchor size, scale width and height exponentially
cx = anchor[0] + tx * anchor[2]
cy = anchor[1] + ty * anchor[3]
w = anchor[2] * torch.exp(tw)
h = anchor[3] * torch.exp(th)
print(f"anchor 64x128 at (320, 240) -> box {w:.1f}x{h:.1f} at ({cx:.1f}, {cy:.1f})")锚框变为一个以 (336.0, 227.2) 为中心、大小为 78.2 × 121.8 像素的框:它向右移动了 16 像素,向上移动了 12.8 像素,宽度增加了 22%(exp(0.2)),高度缩小了 5%(exp(−0.05))。由于偏移量是相对于锚框大小计算的,因此小锚框和大锚框都可以使用相同的预测值。
推理时,检测器会按这种方式解码每个锚框,丢弃低于置信度阈值的边界框,然后运行非极大值抑制(NMS),去除相邻锚框产生的重复结果。
训练:为每个锚框标注#
训练时,会根据每个锚框与标注框的交并比(IoU)为锚框打标签。RetinaNet使用以下阈值:
Faster R-CNN 的区域提议网络使用更严格的阈值:0.7 和 0.3。RetinaNet 在五个金字塔层级的每个位置使用 9 个锚框,每张图像总计约 100,000 个,其中几乎全是负样本;其焦点损失会降低这些容易负样本的权重,避免它们主导训练。
主要的基于锚框的架构#
- 两阶段检测器:Faster R-CNN 的区域提议网络会为锚框打分,将其判定为目标或背景,并将其细化为每张图像约 300 个候选区域;第二个检测头则对每个候选区域进行分类和细化。使用 VGG-16 骨干网络时,它在 GPU 上的运行速度为 5 FPS;Mask R-CNN 在相同设计中增加了一个掩码分支。
- 单阶段目标检测器:SSD、RetinaNet 以及 YOLOv2 到 YOLOv5 的模型会在一次前向处理中对每个锚框进行分类和细化。YOLOv2 用对训练边界框的宽度和高度进行 k-means 聚类,取代了人工挑选锚框的方式。
Ultralytics YOLOv5采用基于锚框的设计,在三个输出层级上各使用 3 个锚框,并根据形状将标注与锚框匹配:当标注的宽度和高度都在锚框对应数值的 4 倍范围内时,该锚框就是候选锚框。Ultralytics 软件包的 YOLOv5u 变体将该检测头替换为无锚框分离头;这一设计最初由 YOLOv8引入,并由 YOLO26延续。
基于锚框与无锚框检测器#
无锚框检测器会从每个网格点预测边界框(以到四条边的距离表示),或从关键点(例如目标中心点)预测边界框,因此无需调节锚框尺寸、宽高比或 IoU 阈值,并且每个位置只生成一个候选框,而不是每种锚框形状各生成一个。ATSS追溯了 RetinaNet 与无锚框 FCOS 之间的准确率差距,发现差距来自两者选择正训练样本的方式:采用相同的选择规则后,两者准确率相同;RetinaNet 在 COCO minival 上每个位置使用 9 个锚框时的 AP为 39.2,使用 1 个时则为 COCO39.3 AP。










