1. YOLOv9 课程导学
大家好,欢迎来到《YOLOv9模型结构及多类别检测实战》课程。
我是这门课的主讲。做了这么多年计算机视觉,从早期的 Haar 分类器一路摸爬滚打到今天的 Transformer,说实话,YOLO 系列是我个人最欣赏的检测框架之一。它够快、够直接,而且一直在进化。
这一章,我们不急着敲代码。先聊聊目标检测这个领域是怎么走到今天的,YOLO 又是怎么一步步从 v1 杀到 v9 的。搞清楚这些,你后面学起来会顺很多。
1.1 目标检测:从“有没有”到“是什么、在哪”
图像分类解决的是“有没有”的问题。目标检测呢?它要回答两个问题:“是什么” 和 “在哪”。
我刚开始做项目时,客户的需求很简单:帮我数一下车间里有多少个零件。但真正落地才发现,光照一变、角度一转,模型就懵了。这就是检测的难点——它既要识别,又要定位。
目标检测的发展,大致可以分为三个阶段:
| 阶段 | 代表方法 | 核心思路 | 我的评价 |
|---|---|---|---|
| 传统方法 | Haar + Adaboost、HOG + SVM | 手工设计特征 + 滑动窗口 | 慢、泛化差,但思路值得学习 |
| 两阶段检测 | R-CNN、Fast R-CNN、Faster R-CNN | 先提候选区域,再分类回归 | 精度高,但速度是硬伤 |
| 单阶段检测 | YOLO、SSD、RetinaNet | 一步到位,直接回归 | 快,真快,YOLO 是代表 |
核心认知: 两阶段检测(如 Faster R-CNN)像“先圈地再细看”,精度高但慢;单阶段检测(如 YOLO)像“扫一眼就报数”,速度快但早期精度稍弱。YOLOv9 的目标就是:既要快,又要准。
1.2 YOLO 系列演进:每一代都在解决什么问题?
YOLO 从 2015 年诞生到现在,几乎每年都有大版本更新。我经历过从 v3 到 v5 的工程落地,也踩过不少坑。下面这张图,是我梳理的 YOLO 演进脉络:
每一代 YOLO 都在解决上一代的痛点:
- YOLOv1:把检测当成回归问题,端到端训练。但小目标检测很差,定位也不准。
- YOLOv2:引入 Anchor Box 和 Batch Normalization,召回率提升不少。
- YOLOv3:多尺度预测 + 更好的骨干网络,真正能用了。我第一个落地的检测项目就是基于 v3 改的。
- YOLOv4:集大成者,Mish 激活、CIoU 损失、数据增强,把工程技巧用到极致。
- YOLOv5:PyTorch 原生实现,训练部署都方便,社区生态最繁荣。
- YOLOv6~v8:各自在结构、部署、任务泛化上做了优化。
- YOLOv9:我们这门课的主角。它提出了 PGI(可编程梯度信息)和 GELAN 结构,解决了深层网络信息丢失的问题。
我的建议: 不要只盯着最新版本。理解 v3 的多尺度思想和 v4 的 Bag of Freebies,对你理解 v9 的设计哲学非常有帮助。我经常跟团队说:“读懂历史,才能用好未来”。
1.3 课程目标:学完你能做什么?
这门课不是纯理论课。我的目标是:学完你能独立用 YOLOv9 做多类别检测项目。
具体来说,你会掌握:
- YOLOv9 核心原理:PGI 是什么?GELAN 怎么搭?为什么它能比 v8 强?
- 数据准备与标注:从零构建自己的检测数据集,格式转换、增强策略。
- 模型训练与调优:训练脚本、超参数调整、断点续训、迁移学习。
- 多类别检测实战:用真实数据集跑通完整流程,包括难例分析。
- 部署与推理优化:ONNX 导出、TensorRT 加速、边缘端部署。
一句话总结: 这门课带你从“会用 YOLO” 进阶到 “懂 YOLO、能调 YOLO、能部署 YOLO”。
1.4 前置知识:你需要准备什么?
我不希望你学得吃力。所以提前说清楚,你需要具备的基础:
| 知识领域 | 具体要求 | 如果不够怎么办 |
|---|---|---|
| Python 编程 | 熟悉 NumPy、OpenCV 基本操作,能看懂 PyTorch 代码 | 建议先补一下 PyTorch 官方教程的 60min 入门 |
| 深度学习基础 | 理解 CNN、卷积、池化、全连接、反向传播 | 我会在关键点做简要回顾,但不会从头讲 |
| 目标检测常识 | 知道 mAP、IOU、NMS 是什么 | 本章后面会快速过一遍核心概念 |
| 硬件环境 | 建议有 NVIDIA GPU(4GB 以上显存) | CPU 也能跑,但训练会很慢,不推荐 |
注意: 如果你完全没接触过 PyTorch,建议先花一周时间跑通一个简单的分类任务。我曾经带过一个学员,直接跳进 YOLO 源码,结果连 DataLoader 都看不懂,白白浪费了两周。基础不牢,地动山摇。
1.5 学习路线图:我们怎么走?
整个课程 30 章,我把它分成 5 个阶段:
每个阶段都有对应的代码和作业。我的建议是:不要跳着看。尤其是阶段 1 的原理部分,虽然有点枯燥,但它是后面所有内容的基础。
学习技巧: 每章结束后,花 10 分钟用自己的话总结一下核心知识点。如果能讲给别人听,说明你真的懂了。我当年学 Faster R-CNN 时就是这么干的,效果出奇的好。
1.6 快速回顾:目标检测核心概念
为了照顾不同基础的同学,这里快速过一遍后续会反复用到的几个概念。如果你已经很熟了,可以直接跳过。
- IOU(交并比):预测框和真实框的重叠程度。大于 0.5 就算检测到了,这是最常用的阈值。
- NMS(非极大值抑制):同一个目标会有多个预测框,NMS 负责保留最好的那个,去掉冗余的。
- mAP(平均精度均值):衡量模型整体性能的指标。mAP@0.5 是常用指标,mAP@0.5:0.95 更严格。
- Anchor Box(锚框):预定义的先验框,模型基于它做微调。YOLOv9 已经用 Anchor-Free 了,但理解 Anchor 有助于理解历史。
一句话记住: IOU 看框准不准,NMS 去重,mAP 看整体表现。这三个概念,后面每章都会出现。