anchor-based与anchor-free对比
一、Anchor-based YOLO(YOLOv3/v5)的分类设计
输出结构(每个 anchor):
[x, y, w, h, objectness, cls_0, cls_1, ..., cls_{nc-1}]各部分含义:
objectness ∈ [0,1]:该 anchor 是否包含任意前景物体(不管哪一类)cls_i ∈ [0,1]:在已知有物体的前提下,该物体属于类别i的概率
关键性质:
cls分支只负责 前景类别 的区分,不包含“背景”或“无物体”类- 总体置信度 =
objectness × cls_i - 如果
objectness ≈ 0,则cls的值无关紧要(训练时通常不监督)
✅ 举例:
COCO 有 80 类 → nc = 80
输出 80 个 cls 值,没有第 81 类表示“背景”
📌 所以:YOLOv5 的
cls是 条件概率 P(class=i | object exists)
🔹 二、Anchor-free 检测器(如 YOLOv8、FCOS)的分类设计
输出结构(每个点):
[x, y, w, h, cls_0, cls_1, ..., cls_{nc-1}]各部分含义:
cls_i:该位置预测为类别i的无条件置信度- 没有显式的 background 类
- 如果该位置没有物体,理想情况下 所有
cls_i ≈ 0
关键性质:
cls同时承担了 “是否存在物体” + “是什么类别” 的功能- 推理时置信度 =
max(cls_i) - 训练时,负样本(无物体位置)被监督为
cls → 0
🔸 三、哪些检测器 真的 包含背景类?
只有 两类主流范式 显式使用背景类:
| 范式 | 代表模型 | 分类输出维度 | 背景类 |
|---|---|---|---|
| Two-stage | Faster R-CNN | nc + 1 | ✅ 第 0 类是 background |
| Dense detector with background | RetinaNet (某些实现) | nc + 1 | ✅ |
但在 YOLO 系列(无论 anchor-based 或 free)中,几乎从不使用显式背景类。
🔁 四、对比总结
| 特性 | Anchor-based YOLO (v5) | Anchor-free YOLO (v8) |
|---|---|---|
| 是否含背景类 | ❌ 否 | ❌ 否 |
cls 含义 | P(class=i | object exists) | P(object of class i exists) |
| 如何表示“无物体” | objectness → 0 | all cls_i → 0 |
| 分类通道数 | nc(仅前景) | nc(仅前景) |
| 总置信度 | obj × cls_i | cls_i |
✅ 所以,虽然两者都没有背景类,但 语义不同:
- YOLOv5 的
cls是条件概率- YOLOv8 的
cls是边缘置信度
