1. YOLO初识
1.1 目标检测:从“看见”到“看懂”
大家好,欢迎来到这门实战课。我是你们这门课的主讲,一个在计算机视觉领域摸爬滚打了七八年的工程师。今天咱们先不急着敲代码,坐下来聊聊目标检测这件事儿。
说白了,目标检测就是让计算机不仅“看见”图像,还得“看懂”——知道图里有什么东西,并且指出这些东西在哪儿。比如一张街景照片,你得告诉我这里有车、有人、有红绿灯,还得用框把它们的精确位置标出来。
我刚开始入行那会儿,这还是个挺头疼的问题。传统的做法是用滑动窗口加手工特征,比如HOG(方向梯度直方图)配合SVM分类器。你想想看,一张图要滑成千上万个窗口,每个窗口都要算一遍特征,速度慢得让人抓狂。而且遇到遮挡、光照变化,效果就直线下降。
传统方法:手工设计特征 + 滑动窗口 + 分类器 → 慢、泛化差
深度学习方法:端到端学习 → 快、准、自动化
直到2012年AlexNet在ImageNet上大放异彩,大家才意识到:原来特征可以自动学啊!从那以后,目标检测领域进入了深度学习时代,诞生了两大流派:两阶段检测器(如R-CNN系列)和一阶段检测器(如YOLO系列)。
1.2 YOLO系列演进:从v1到v8的蜕变
YOLO的全称是You Only Look Once——只看一次。这个名字起得特别形象。它不像R-CNN那样先提候选区域再分类,而是把检测问题直接当作回归问题来处理:一张图进去,一次前向传播,同时输出物体的类别和位置。
我记得2016年YOLOv1刚出来的时候,整个圈子都震惊了。45帧/秒的实时检测速度,这在当时简直是降维打击。虽然精度比Faster R-CNN差一截,但速度优势太明显了。
| 版本 | 发布时间 | 核心贡献 | 我的评价 |
|---|---|---|---|
| YOLOv1 | 2016 | 开创性的一阶段检测范式 | 思想超前,但精度一般 |
| YOLOv2 | 2017 | 引入Anchor Box、Batch Normalization | 更稳定,训练友好 |
| YOLOv3 | 2018 | 多尺度预测、Darknet-53骨干 | 经典之作,至今仍有人用 |
| YOLOv4 | 2020 | Bag of Freebies、CSPDarknet | 工程优化集大成者 |
| YOLOv5 | 2020 | PyTorch实现、易用性极佳 | 社区最活跃的版本 |
| YOLOv6 | 2022 | 美团出品,工业部署优化 | 对部署场景很友好 |
| YOLOv7 | 2022 | E-ELAN结构、重参数化 | 速度与精度的平衡 |
| YOLOv8 | 2023 | Ultralytics出品,统一框架 | 目前最推荐入门的版本 |
从这张表你能看出来,YOLO的演进不是简单的堆叠层数,而是每一代都在解决上一代的痛点。比如v2解决了v1定位不准的问题,v3解决了小目标检测的问题,v4/v5解决了训练效率的问题。
1.3 YOLOv8核心优势:为什么选它?
咱们这门课选YOLOv8作为主力模型,不是因为它最新,而是因为它确实好用。我去年在一个智慧安防项目里用了v8,从训练到部署到边缘设备,整个流程非常顺畅。
YOLOv8的核心优势,我总结了四点:
- 统一框架:一个模型搞定检测、分割、分类、姿态估计,不用学好几套代码
- Anchor-Free:不再需要手动调Anchor参数,省心不少
- C2f模块:比v5的C3更高效,特征融合更好
- Decoupled Head:分类和回归分支解耦,收敛更快
嗯,这里要特别说一下Anchor-Free。以前用YOLOv3/v5的时候,Anchor的尺寸和数量需要根据数据集手动聚类,换一个数据集就得重新算。我曾经在一个工业缺陷检测项目里,因为Anchor没设好,模型训了三天都不收敛,后来才发现是Anchor和实际目标尺寸差太多。v8直接把这个坑填平了。
1.4 课程全景预览:30章,从零到部署
这门课一共30章,我把它分成了四个阶段。你跟着走完,就能独立完成一个完整的目标检测项目。
你看这个图,四个阶段是递进的。第一阶段让你跑起来,第二阶段让你跑得稳,第三阶段让你跑得快,第四阶段让你真正落地。
我个人觉得,第三阶段(模型部署)是很多教程忽略但实际工作中最重要的部分。模型在服务器上跑得再快,部署到嵌入式设备上卡成PPT,那也没用。这门课会花大量篇幅讲ONNX导出、TensorRT加速、NCNN在ARM上的优化,这些都是我踩过坑之后总结出来的经验。
✅ 每一行代码都能跑通
✅ 每一个项目都有真实数据集
✅ 每一个部署方案都经过硬件验证
✅ 遇到问题,有完整的排查思路