1. 课程导学与环境准备
各位同学好,我是你们这门课的主讲。在计算机视觉这行摸爬滚打了十几年,从最早的 Haar Cascade 到如今的 YOLOv8,我算是亲眼看着目标检测技术一步步走到今天的。说实话,YOLO 的出现确实改变了整个行业的玩法——它让实时检测从实验室走进了工厂车间、自动驾驶汽车,甚至你的手机里。
这一章咱们不急着写代码。先把地基打牢,搞清楚 YOLO 是什么、能干什么、我们用什么工具来玩转它。嗯,磨刀不误砍柴工嘛。
1.1 YOLO 发展史:从 v1 到 v8 的进化之路
YOLO 的全称是 You Only Look Once。说白了,就是让神经网络只看一眼图片,就能同时告诉你“图片里有什么”和“这些东西在哪儿”。
我刚开始做目标检测那会儿,主流还是 R-CNN 系列——先提候选区域,再逐个分类,速度慢得让人抓狂。2016 年 Joseph Redmon 提出 YOLOv1 时,我第一反应是:这玩意儿靠谱吗?结果一测,45 FPS 的实时速度直接把我震住了。
| 版本 | 发布时间 | 核心创新 | 我的评价 |
|---|---|---|---|
| YOLOv1 | 2016 | 端到端检测,网格划分 + 边界框回归 | 开山之作,但小目标检测很弱 |
| YOLOv2 | 2017 | Batch Normalization、Anchor Box、Darknet-19 | 精度大幅提升,我开始在项目里用它 |
| YOLOv3 | 2018 | 多尺度预测、Darknet-53、Logistic 分类器 | 工业界最经典的版本,至今仍有人用 |
| YOLOv4 | 2020 | CSPDarknet、PANet、Mish 激活函数 | 速度和精度的黄金平衡点 |
| YOLOv5 | 2020 | PyTorch 实现、Focus 结构、自适应锚框 | Ultralytics 出品,生态最好 |
| YOLOv6 | 2022 | 美团出品,RepVGG 骨干、Anchor-Free | 工业部署优化强 |
| YOLOv7 | 2022 | E-ELAN、重参数化、辅助训练头 | 当时精度最高的实时检测器 |
| YOLOv8 | 2023 | Anchor-Free、C2f 模块、解耦头 | 目前最推荐入门的版本 |
我的建议:初学者直接从 YOLOv8 入手。v3 虽然经典,但很多 API 已经过时了。v8 的代码结构清晰,文档完善,遇到问题社区里一搜就有答案。
1.2 应用场景:YOLO 到底能干什么?
你可能会问:学了 YOLO 能用在哪儿?我挑两个最典型的场景说说。
工业质检
我之前帮一家电子厂做过 PCB 缺陷检测项目。产线上每分钟要检测 60 块电路板,传统的人工目检根本跟不上。用 YOLOv5 部署后,检测速度达到了 80 FPS,漏检率从 3% 降到了 0.2%。
- 常见缺陷:焊点虚焊、线路短路、元件缺失、划痕
- 优势:实时性高、可部署在边缘设备(Jetson、RK3588)
- 挑战:小缺陷检测需要调优,数据标注成本高
自动驾驶
这是 YOLO 最“出圈”的应用。车辆、行人、交通标志、车道线——所有障碍物都需要在毫秒级内识别出来。我记得有一次在高速测试,YOLOv4 在 1080p 视频上跑到了 65 FPS,但到了夜间场景,精度直接掉了 15 个点。后来加了数据增强和多尺度训练才稳住。
- 检测目标:车辆、行人、自行车、红绿灯、锥桶
- 关键指标:mAP 要 > 85%,推理延迟 < 30ms
- 注意:安全第一,误检比漏检更危险
避坑指南:我曾经在一个项目中直接用 COCO 预训练权重做工业检测,结果 mAP 只有 40%。后来老老实实标注了 5000 张产线图片做微调,精度直接飙到 92%。记住:预训练模型只是起点,场景数据才是王道。
1.3 OpenCV 与 YOLO 的关系
很多人问我:OpenCV 和 YOLO 到底是什么关系?
简单来说,YOLO 是“大脑”——负责推理和检测;OpenCV 是“眼睛和手”——负责图像预处理、后处理、显示结果。两者配合才能完成一个完整的目标检测系统。
| 模块 | YOLO 负责 | OpenCV 负责 |
|---|---|---|
| 图像读取 | — | cv2.imread() / VideoCapture |
| 预处理 | — | resize、归一化、颜色空间转换 |
| 模型推理 | 前向传播、特征提取 | dnn.blobFromImage() + forward() |
| 后处理 | — | NMS、坐标映射、置信度过滤 |
| 结果展示 | — | cv2.rectangle()、putText() |
说白了,OpenCV 的 dnn 模块可以直接加载 YOLO 的 ONNX 或 Darknet 模型。你不需要装 PyTorch 也能跑 YOLO——这在嵌入式设备上特别实用。
注意:OpenCV 的 dnn 模块只支持推理,不支持训练。训练还得用 PyTorch 或 Darknet。别想着用 OpenCV 训练 YOLO,那会走弯路。
1.4 开发环境搭建
这部分我踩过不少坑。直接给你们一套经过验证的配置方案。
硬件要求
- CPU:Intel i5 或 AMD Ryzen 5 以上(训练用)
- GPU:NVIDIA GTX 1060 6GB 起步(推荐 RTX 3060 12GB)
- 内存:16GB 以上
- 硬盘:SSD 256GB + 数据盘 1TB
软件安装步骤
- 安装 Python 3.8-3.11(推荐 3.10,兼容性最好)
- 安装 CUDA 和 cuDNN
- CUDA 11.8 + cuDNN 8.9(PyTorch 2.x 标配)
- 验证命令:
nvcc --version
- 创建虚拟环境
python -m venv yolo_env source yolo_env/bin/activate # Linux/Mac yolo_env\Scripts\activate # Windows - 安装 PyTorch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 - 安装 OpenCV
pip install opencv-python opencv-contrib-python - 安装 Ultralytics(YOLOv8)
pip install ultralytics
验证安装:运行以下代码,如果能看到摄像头画面并检测到物体,说明环境配置成功。
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
results = model(frame)
annotated = results[0].plot()
cv2.imshow('YOLOv8 Detection', annotated)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我的经验:如果 GPU 显存不够(比如只有 4GB),训练时把 batch size 调到 4,用 --device cpu 也能跑,就是慢点。另外,Windows 用户装 CUDA 时记得选“自定义安装”,只勾选 CUDA 组件,别装 GeForce Experience,否则容易冲突。
1.5 本章知识体系
下面这张图帮你理清本章的核心脉络。我习惯在学新东西前先看整体结构,这样后面学细节时不会迷路。
好了,环境搭好、概念理清,咱们就可以正式开始动手了。记住:这一章的所有内容都是后面 29 章的基础。别急着跳,把环境配稳了,后面才能跑得顺。