YOLO 系与单阶段检测

核心04-深度学习视觉预计 30 分钟YOLO单阶段检测锚框实时检测

前置知识点

kp-017 目标检测:IoU、mAP 与两阶段流程

一句话定义

单阶段检测把检测压缩为对整图的一次前向:网络在稠密网格(或锚框/锚点)上同时预测类别、置信度与框,以少量精度换取数十 FPS 的实时性,YOLO 系列是其代表谱系。

为什么重要

工业落地里「实时」往往是硬指标:视频流 30 FPS、边缘设备个位数瓦特功耗,两阶段架构的候选区开销难以承受;YOLO 把检测变成「可训练的稠密回归 + 后处理」,是理解所有实时检测器(YOLO、SSD、FCOS、RetinaNet)的共同骨架。

直观类比

两阶段像先圈出「可能有人的区域」再逐一细看(慢而准),单阶段像一张考卷上每道网格题都直接作答(快而需要更多训练技巧);FPN 多尺度检测头则像给近视考官配上三副不同度数的眼镜,远的小目标用高分辨率那副看。

前置知识

kp-017(IoU/mAP/NMS 与两阶段流程);kp-005(多尺度思想)。

核心概念

原理与机制

单阶段范式把「候选区生成」并入稠密预测:每个网格点(或锚框/锚点)输出 C 类分数 + 4 个框参数 + 1 个目标置信度,训练用标签分配决定监督对象——正样本稀缺(中心点附近才有)曾是单阶段召回低的主因,RetinaNet 用 Focal Loss 压制易负样本、动态分配(v8 的 TAL)按「分类分 × IoU」综合挑正样本后,单阶段精度已与两阶段同档。版本谱系(概览):v1(2015,网格回归开山)→ v2/v3(锚框 + 多尺度 + 更强骨干)→ v4/v5(训练技巧集成与工程化,v5 为社区实现未发正式论文)→ v6/v7(重参数化与高效骨干)→ v8(anchor-free + 解耦头 + 动态标签分配,成为当前工程默认)。推理时延与 mAP 的权衡由「骨干宽度/深度缩放系数 + 输入分辨率」三要素控制(v3 起的 s/m/l/x 命名)。

公式与模型

CIoU 损失(v4 起常用): L_CIoU = 1 − IoU + ρ²(b, b_gt)/c² + α·v (ρ 中心点距离,c 最小包围框对角线,v 衡量长宽比一致性) Focal Loss(RetinaNet): FL = −α (1 − p)^γ log p (γ=2 压制易分负样本)

图示

网格:目标中心所在格负责预测 P3 特征(stride 8)→ 小目标 P4 特征(stride 16)→ 中目标 P5 特征(stride 32)→ 大目标 三头共用损失,输出拼接后过 NMS

实例与案例

边缘部署基线:YOLOv8n 在 640 输入下 COCO mAP@0.5 约 52.6%,TensorRT INT8 后在 Orin 级设备可跑实时;安防场景常用 s/m 档位。训练实操:小目标占比高时把输入分辨率提到 960 并提高 P3 头权重,比换更大骨干收益更直接。选型经验:有稠密小目标(人群、远距车辆)优先验证 P3 头与分辨率;吞吐优先则降分辨率比缩骨干更有效。

from ultralytics import YOLO     # 社区工程库,本地安装使用,无网络调用
model = YOLO('yolov8n.pt')
model.train(data='custom.yaml', epochs=100, imgsz=640, mosaic=1.0)
results = model.predict('frame.jpg', conf=0.25, iou=0.5)

常见误区

与其他知识点的关系

评测完全复用 kp-017;多尺度头继承 kp-005 金字塔思想;部署与量化的实战在 kp-027 展开;实例分割头(kp-019)就是在同一检测框架上加掩码分支。

自测题

  1. YOLOv1 的核心思想与两阶段的本质差异是什么?

答案要点:把候选区生成并入稠密网格回归,一次前向同时输出全部框,省去候选阶段的开销。

  1. Focal Loss 解决什么问题?

答案要点:稠密预测中易分负样本数量巨大、主导损失,(1−p)^γ 因子压低其贡献,使训练聚焦难样本。

  1. 小目标检测效果差,第一步该调什么?

答案要点:优先提高输入分辨率并检查 P3 头与标签分配,其次才考虑更大骨干或更大模型。

延伸阅读

相关知识点

kp-019 图像分割:语义、实例与全景kp-027 部署:量化剪枝与边缘推理