1. YOLO入门:目标检测概述、YOLO发展史与课程环境搭建
各位同学,欢迎来到《YOLO自定义模型训练与数据集制作实战》的第一章。
目标检测,说白了就是让计算机在图像里找到“什么东西在哪儿”。它不像分类只回答“这是什么”,也不像分割要抠出每个像素。检测要同时输出类别和位置框——这两个信息组合起来,才是工业场景真正需要的。
我刚开始做检测项目时,踩过一个坑:用分类模型硬改回归头去预测坐标,结果收敛极慢,精度还差。后来才明白,检测任务需要专门的网络结构设计。而YOLO,就是这类设计里最经典的代表。
1.1 目标检测的核心任务与评价指标
先搞清楚我们要解决什么问题。一张图进来,模型要输出:
- 类别:每个目标属于哪一类(人、车、猫……)
- 边界框:用 (x, y, w, h) 或 (x1, y1, x2, y2) 表示位置
- 置信度:模型对这个预测有多确定
评价模型好坏,主要看两个指标:
| 指标 | 含义 | 我的经验 |
|---|---|---|
| mAP | 平均精度均值,综合衡量召回率和精确率 | 工业项目里mAP@0.5:0.95比单阈值更有参考价值 |
| FPS | 每秒处理帧数,衡量速度 | 边缘设备上我一般要求至少30FPS才敢上线 |
小提示: 别只看mAP。我见过一个模型mAP很高,但推理一张图要2秒——这种模型在实时场景里根本没法用。速度和精度要一起看。
1.2 YOLO发展史:从v1到v8
YOLO的全称是You Only Look Once。为什么叫这个?因为之前的检测方法(比如R-CNN系列)需要“先提候选区域,再逐个分类”,相当于看很多眼。YOLO只用一眼——一次前向传播就同时预测类别和位置。
下面这张图是我整理的YOLO演进路线,帮你快速建立全局认知:
每个版本我都实际用过。说几个关键节点:
- YOLOv1:把检测当作回归问题,思想很惊艳,但小目标基本检测不到。我记得第一次跑v1,对着调参调了一周。
- YOLOv3:真正能用的版本。多尺度预测解决了小目标问题,Darknet-53骨干网络至今仍有参考价值。
- YOLOv5:PyTorch实现,Ultralytics出品,安装即用。我团队现在80%的项目都基于v5或v8。
- YOLOv8:2023年发布,支持检测、分割、姿态估计、分类。Anchor-Free设计,部署更友好。
避坑指南: 我曾经在v3和v5之间反复横跳,后来发现——不要追新版本。如果你的场景是固定场景的工业检测,v5s足够用;如果是复杂开放场景,再考虑v8。选版本看需求,不看年份。
1.3 YOLO应用场景
YOLO能做什么?我列几个真实落地的案例:
| 场景 | 具体任务 | 我参与过的项目 |
|---|---|---|
| 安防监控 | 人车检测、入侵报警、人群密度估计 | 某园区周界检测,用v5s在Jetson Nano上跑35FPS |
| 工业质检 | 表面缺陷检测、零件定位、装配验证 | 手机屏幕划痕检测,精度要求99.5%以上 |
| 自动驾驶 | 车辆/行人/交通标志检测 | 虽然现在多用BEV方案,但YOLO仍是感知pipeline的baseline |
| 智慧零售 | 商品识别、货架巡检、客流统计 | 无人货柜项目,用v5x检测200+SKU |
| 医疗影像 | 细胞检测、病灶定位 | 肺结节检测,需要配合数据增强处理小目标 |
核心观点: YOLO不是万能的。如果你的目标极度密集(比如上千个细胞),或者形状极不规则,可能需要考虑其他方案。但80%的检测任务,YOLO都是第一选择。
1.4 课程环境搭建
工欲善其事,必先利其器。下面是我个人习惯的环境配置方案,经过多个项目验证,兼容性最好。
1.4.1 硬件要求
- GPU:NVIDIA显卡,显存≥4GB(推荐8GB以上)
- 内存:≥16GB
- 硬盘:SSD,剩余空间≥50GB(数据集很占空间)
提示: 没有GPU也能学,但训练会慢10-20倍。我建议至少用Google Colab的免费GPU先跑通流程。
1.4.2 软件版本对照
版本匹配是最大的坑。我曾经因为CUDA和PyTorch版本不匹配,浪费了整整一天。下面这个表是我实测过的稳定组合:
| 组件 | 推荐版本 | 备注 |
|---|---|---|
| Python | 3.8 - 3.11 | 3.12部分库还不兼容,建议用3.10 |
| PyTorch | 2.0.1 或 2.1.0 | CUDA 11.8 或 12.1 |
| CUDA | 11.8 或 12.1 | 用 nvidia-smi 查看驱动支持的最高版本 |
| cuDNN | 8.9.0+ | 与CUDA版本对应 |
| Ultralytics | 8.0.0+ | YOLOv8官方库 |
1.4.3 安装步骤
我个人习惯用conda管理环境,干净、可复现。下面是完整流程:
# 1. 创建虚拟环境
conda create -n yolov8 python=3.10 -y
conda activate yolov8
# 2. 安装PyTorch(以CUDA 11.8为例)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
# 3. 验证PyTorch和CUDA是否可用
python -c "import torch; print(torch.cuda.is_available()); print(torch.__version__)"
# 输出应为:True 和 2.0.1
# 4. 安装Ultralytics(YOLOv8)
pip install ultralytics
# 5. 验证安装
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
常见错误: 安装后运行报错
CUDA error: no kernel image is available。这通常是因为PyTorch的CUDA版本和系统驱动不匹配。解决办法:用 nvidia-smi 查看驱动支持的CUDA最高版本,然后安装对应版本的PyTorch。
1.4.4 验证环境
安装完成后,运行下面这段代码,确认一切正常:
import torch
from ultralytics import YOLO
# 检查GPU
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"GPU数量: {torch.cuda.device_count()}")
print(f"当前GPU: {torch.cuda.get_device_name(0)}")
# 加载预训练模型
model = YOLO('yolov8n.pt')
# 推理测试
results = model('https://ultralytics.com/images/bus.jpg')
results[0].show() # 显示检测结果
如果能看到检测框画在图片上,恭喜你,环境搭建成功!
我的建议: 第一次跑通后,把整个环境导出为yaml文件:
conda env export > yolov8_env.yaml。以后换机器或者环境坏了,一条命令就能恢复:conda env create -f yolov8_env.yaml。这个习惯帮我省了无数次重装环境的时间。