本节摘要:YOLO 之外,SSD 和 RetinaNet 是单阶段的重要分支。本节讲 SSD 的多尺度多框和 RetinaNet 的 focal loss——单阶段检测的另两条路。
阅读完本节,你应当能够:
SSD 2016 年发布,和 YOLO 同期,是单阶段另一代表。

SSD 核心思想:
SSD 比 YOLOv1 小目标好,速度快,但精度不及两阶段。SSD 是第一个把"多尺度特征图检测"做扎实的单阶段方法:浅层特征图分辨率高,负责小目标;深层特征图感受野大,负责大目标。这个思想直接启发了 YOLOv3 的多尺度头。
SSD 在 VGG 基础上加多个卷积层,得到 6 个不同尺度特征图(38x38 到 1x1),每个位置用 4-6 个锚点,覆盖多尺度多长宽比。
损失 = 分类损失(交叉熵)+ 回归损失(Smooth L1),用难例挖掘平衡正负样本。
# SSD 多尺度锚点:每层特征图配不同尺度的锚点 def ssd_default_boxes(layer_sizes): """layer_sizes: 各层特征图尺寸,如 [38,19,10,5,3,1]""" default_boxes = [] for i, size in enumerate(layer_sizes): s = base_scale[i] # 该层锚点基础尺度 for cx in np.linspace(0, 1, size): for cy in np.linspace(0, 1, size): for ratio in ratios[i]: w = s * ratio ** 0.5 h = s / ratio ** 0.5 default_boxes.append([cx, cy, w, h]) return np.array(default_boxes)
SSD 也面临正负样本不均衡,它用难例挖掘(hard negative mining):排序所有负样本的损失,只取损失最大的前 3 倍正样本数量来训练。这和 focal loss 是解决同一问题的两种路线——一个挑难样本,一个给难样本加权。
RetinaNet 2017 年发布,核心是 focal loss,解决单阶段检测的正负样本不均衡问题。
单阶段检测每张图生成数万个候选位置,绝大多数是背景(负样本),正样本(含目标)极少。普通交叉熵让大量易分背景样本主导损失,模型学不到有效信息。
focal loss 让单阶段精度首次追平两阶段,是单阶段的关键突破。
# focal loss 实现(二分类版) def focal_loss(logits, targets, gamma=2.0, alpha=0.25): p = torch.sigmoid(logits) ce = F.binary_cross_entropy_with_logits(logits, targets, reduction='none') p_t = p * targets + (1 - p) * (1 - targets) # 样本被分对的置信度 alpha_t = alpha * targets + (1 - alpha) * (1 - targets) return (alpha_t * (1 - p_t) ** gamma * ce).mean()
当 \gamma=0 时 focal loss 退化为带 \alpha 加权的交叉熵;\gamma=2 时,一个被分对的背景样本(p_t=0.99)权重是 (0.01)^2=0.0001,几乎不贡献梯度;而难分样本(p_t=0.5)权重是 0.25。模型被迫把注意力放在那些"像目标却分错"的区域。
RetinaNet 证明:单阶段精度不如两阶段,不是范式问题,而是损失函数问题。focal loss 解决不均衡后,单阶段也能 SOTA。
RetinaNet 的检测头还有个细节:分类和回归是解耦的两个子网络(各 4 层卷积)。早期单阶段方法用共享头,分类和回归的需求不同(分类要区分前景背景,回归要对正样本精修),共享会互相干扰。解耦头后来被 YOLOv6/v8 继承。
| 检测器 | 特点 | 优势 |
|---|---|---|
| YOLO 系列 | 回归思想,迭代快 | 速度极快,生态好 |
| SSD | 多尺度多框 | 速度快,小目标可 |
| RetinaNet | focal loss | 精度追平两阶段 |
| FCOS | anchor-free | 无锚点,简洁 |
| CenterNet | 中心点预测 | 极简 |
| 需求 | 选择 |
|---|---|
| 与 YOLO 生态衔接 | YOLO 系 |
| 要可解释的多尺度基线 | SSD |
| 正负样本严重失衡 | RetinaNet(focal loss) |
| 无锚点简洁实现 | FCOS / CenterNet |
SSD 和 RetinaNet 已经很少作为生产首选,但它们的两个贡献活在每个现代检测器里:SSD 的多尺度检测思想被 YOLOv3 吸收,RetinaNet 的 focal loss 被无数模型采用。学它们不是为了"用",而是为了看懂"多尺度"和"样本不均衡"这两个问题的标准解法。
⚠️ 单阶段精度瓶颈的真相:不是范式不行,而是正负样本不均衡。RetinaNet 用 focal loss 解决后单阶段追平两阶段,这是关键认知。
💡 关键直觉:SSD 多尺度多框(不同层级+多锚点),RetinaNet focal loss 解决正负不均衡(单阶段精度追平两阶段的关键)。两者影响后续 YOLO 设计。单阶段精度瓶颈是损失函数问题非范式问题。
第 4 章结束。下一章讲核心技术与通用模块。