Anchor-Free Detectors
无锚框检测器通过点或关键点预测框,不使用预设锚框。本文介绍 FCOS、CenterNet 和现代 YOLO 模型如何发现物体。
无锚框检测器是目标检测模型,可直接从特征图上的点,或从目标角点、中心等关键点,预测每个边界框,无需预定义的锚框。靠近目标的位置会预测自身到目标四条边的距离;或者用热力图峰值标记目标中心,并由网络回归目标的宽度和高度。这种方法无需针对每个数据集调节基于锚框的检测器所需的锚框尺寸、宽高比和锚框匹配阈值;无锚框检测头已成为实时检测的标准设计。
无锚框检测如何工作#
无锚框检测器分为两类:
- 基于点的检测器,例如 FCOS:每个特征图层级的每个单元格都是一个候选位置。FCOS(2019)会在目标内部的每个位置预测类别分数和四个距离(分别到左、上、右、下边缘),还会预测一个中心度分数,降低来自远离目标中心的位置所预测边界框的权重。
- 基于关键点的检测器,例如 CornerNet和 CenterNet:CornerNet(2018)会预测左上角和右下角的热力图,并通过学习到的嵌入向量配对属于同一目标的角点。CenterNet 会预测目标中心的热力图,并在每个峰值处回归宽度和高度;它通过 3 × 3 最大池化操作提取峰值,因此无需基于 IoU 的非极大值抑制(NMS)。
YOLO 系列中,无锚框预测出现得比锚框更早:YOLOv1在 2015 年直接从包含每个目标中心的网格单元预测边界框;YOLOv2 加入锚框后,召回率从 81% 提高到 88%,但 mAP 下降了 0.3 个百分点。YOLOX在 2021 年将密集的基于点的设计带回 YOLO;2023 年,Ultralytics 在 YOLOv8中将 YOLOv5的锚框替换为无锚框检测头,因此自定义数据集不再需要拟合锚框;YOLO26延续了这一设计。
解码密集的无锚框预测时,只需要单元格的位置和预测出的四个距离:
import torch
# Center of the grid cell at column 10, row 6 of a stride-16 feature map, in image pixels
stride = 16
point = (torch.tensor([10.0, 6.0]) + 0.5) * stride
# Distances the head predicts from that point to the left, top, right, and bottom box edges, in strides
ltrb = torch.tensor([2.0, 3.5, 1.5, 4.0]) * stride
# Anchor-free decoding: no template box, only the point and four distances
x1, y1 = point - ltrb[:2]
x2, y2 = point + ltrb[2:]
print(f"point {point.tolist()} -> box ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")位于 (168, 104) 的点会变成边界框 (136, 48, 192, 168),宽 56 像素、高 120 像素。密集检测头会在每个金字塔层级的每个单元格应用这种解码,因此每个单元格都会生成一个候选边界框。
选择哪些点来学习每个目标#
由于没有锚框可与标注框通过交并比(IoU)进行比较,无锚框检测器需要另一种规则来确定哪些点算作正训练样本。FCOS 根据位置和尺寸进行判断:如果某个点位于标注框内部,且该点到边界框各边的最大距离符合其金字塔层级的范围,则该点为正样本;例如步幅为 8 的层级范围为 0 到 64 像素,步幅为 16 的层级范围为 64 到 128 像素,之后依此类推,直到步幅为 128 的层级。
后续检测器会自适应地选择正样本。ATSS表明,基于锚框的 RetinaNet 与无锚框 FCOS 之间的准确率差距,主要来自两者定义正负样本的方式;采用相同采样规则后,在每个位置平铺多个锚框并不会带来收益。任务对齐分配由 TOOD引入,并被 PP-YOLOE 和许多后续实时检测器采用;它会根据预测的类别分数与边界框 IoU 的加权乘积,对每个目标内部的点进行排序,并保留排名靠前的若干点作为正样本。
无锚框与基于锚框的检测器#
- 更少的超参数:无需为每个数据集拟合锚框尺寸、宽高比或 IoU 匹配阈值;基于锚框的检测器通常会通过对训练边界框进行 k-means 聚类来完成这一步。
- 形状灵活性:基于点的分配方式只取决于目标的位置,因此即使目标形状与任何锚框都不相似(例如细长的管道),也能获得正样本。
- 术语沿用:许多无锚框代码库仍将网格点称为“锚点”,指的是没有尺寸或宽高比的位置。
- 预测数量更少:每个位置只预测一个边界框,而不是每种锚框形状预测一个,因此解码和 NMS 需要处理的候选框会少好几倍;RetinaNet 每个位置使用 9 个锚框,每张图像约有 100,000 个候选框。










