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演进路线,帮你快速建立全局认知:

YOLO 发展历程(v1 → v8) YOLOv1 2016 · 开山之作 网格划分 + 直接回归 YOLOv2 2017 · 更好更快 Anchor Box + Darknet-19 YOLOv3 2018 · 里程碑 多尺度 + Darknet-53 YOLOv4 2020 · 工程优化 CSP + Mish + PANet YOLOv5 2020 · 普及之王 PyTorch实现 · 易用 YOLOv6 2022 · 工业部署 RepVGG + 量化友好 YOLOv7 2022 · 速度巅峰 E-ELAN + 重参数化 YOLOv8 2023 · 全能框架 Anchor-Free + 多任务 关键趋势 手工设计 → 自动化结构搜索 Anchor-Based → Anchor-Free 单一检测 → 检测+分割+姿态

每个版本我都实际用过。说几个关键节点:

  • 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。这个习惯帮我省了无数次重装环境的时间。