引言
分类只回答"图里有什么",检测还要回答"在哪、有几个"。从自动驾驶识别行人,到工厂流水线挑次品,目标检测是计算机视觉最能直接产生商业价值的任务之一。本篇用一条主线——YOLO 如何把检测做到实时——串起整个领域的演进,并给你一份拿来即用的 YOLOv8 训练脚本。
一、两阶段与单阶段对比
目标检测的两大范式,本质是"精度 vs 速度"的取舍:
| 范式 | 代表 | 流程 | 特点 |
|---|---|---|---|
| 两阶段(Two-stage) | R-CNN / Fast / Faster R-CNN | 先提候选区域(Region Proposal),再分类+回归 | 精度高、速度慢 |
| 单阶段(One-stage) | YOLO / SSD / RetinaNet | 一步直接预测框和类别 | 速度快、工程友好 |
Faster R-CNN用区域提议网络(RPN)替代了 Selective Search,把两阶段速度提了一个量级,但仍是"先找框再认物"。YOLO则把整张图当作一个回归问题,一次前向就出结果,把"实时"变成了可能。
二、YOLO 各版本关键改进
| 版本 | 年份 | 关键贡献 | 一句话记忆点 |
|---|---|---|---|
| YOLOv1 | 2015 | 网格划分 + 单次回归 | 实时检测的奠基者 |
| YOLOv2/v3 | 2016/2018 | Anchor、Darknet-19/53、多尺度预测 | v3 终于能抓小目标 |
| YOLOv4 | 2020 | Bag of Freebies/Specials、CSP、Mosaic | 训练技巧大礼包 |
| YOLOv5 | 2020 | PyTorch 重写、工程化极佳 | 工业落地首选之一 |
| YOLOv8 | 2023 | 无锚框 head、统一检测/分割/分类 | 当前最易上手的版本 |
核心演进线索:
从有锚框到无锚框(Anchor-free):早期靠人工设定 anchor 尺寸,v8 改为直接预测框中心偏移,减少了超参敏感。
多尺度(FPN/PAN):让浅层负责大目标、深层负责小目标,缓解小物体漏检。
训练策略:Mosaic 增强、CIoU 损失等"免费"提升精度的技巧,是 v4 之后工程化的精髓。
三、精度与速度权衡
| 模型(量级) | mAP@0.5(典型区间) | 推理速度 FPS(典型区间) | 场景 |
|---|---|---|---|
| YOLOv8n | ~37% | ~150+ | 边缘设备 |
| YOLOv8s | ~44% | ~80 | 通用实时 |
| YOLOv8m/l | ~50% | ~40/20 | 高精度服务端 |
| Faster R-CNN | ~38% | ~5~15 | 精度优先、不计较速度 |
注:数值随数据集与硬件浮动,非本机实测,仅作量级参考。选型铁律——边缘要 n/s,服务端要 m/l。
四、YOLOv8 自定义训练实战
Ultralytics 把 YOLO 封装得极简,下面是一份可直接跑的示例(需pip install ultralytics)。
4.1 数据格式(YOLO txt)
每张图对应一个.txt,每行:class_id center_x center_y width height(坐标均归一化到 0~1)。目录结构:
dataset/ images/train/ images/val/ labels/train/ labels/val/ data.yaml data.yaml: path: ./dataset train: images/train val: images/val nc: 2 names: ['cat', 'dog']4.2 训练与推理
from ultralytics import YOLO # 加载预训练权重(nano 版,适合快速验证) model = YOLO("yolov8n.pt") # 训练: imagen 增强、余弦调度都在内部默认开启 results = model.train( data="dataset/data.yaml", epochs=100, imgsz=640, batch=16, name="exp1", ) # 验证 metrics = model.val() print(metrics.box.map) # mAP # 推理 pred = model("test.jpg") pred[0].show() # 可视化框这套流程覆盖了标注转换、训练、验证、推理部署的完整闭环,是工业落地最快的入口。
五、DETR 等新范式
Transformer 也杀进了检测。DETR(Detection Transformer)用集合预测 + 二分图匹配,彻底去掉了 anchor 和 NMS,端到端更优雅,但训练慢、小目标弱。后续的Deformable DETR用可变形注意力解决了收敛慢的问题。当前格局:YOLO 系仍是实时场景霸主,DETR 系在端到端/无 NMS 场景有独特优势,二者在互相借鉴(如 YOLO 也引入注意力模块)。
六、选型建议
要实时、要落地:YOLOv8(n/s 上边缘,m/l 上服务端)。
精度优先、不计较帧率:Faster R-CNN / Cascade R-CNN。
想要端到端无 NMS:上 DETR 系。
数据极少:先用 COCO 预训练权重做迁移(呼应第 13 篇),再在你的数据集上微调。
总结
目标检测的十年,是"把框预测做得更快更准"的十年。YOLO 用单阶段范式把实时变成标配,v8 的无锚框 head 又把工程门槛降到最低。本文的 Ultralytics 实战代码可直接套你的数据——先把预训练权重跑通,再谈优化。
考资料
Redmon, J., et al. (2016).You Only Look Once: Unified, Real-Time Object Detection(YOLOv1).
Redmon, J., & Farhadi, A. (2018).YOLOv3: An Incremental Improvement.
Ultralytics YOLOv8 官方文档:YOLO Object Detection & Segmentation | Ultralytics
Carion, N., et al. (2020).End-to-End Object Detection with Transformers(DETR).