YOLO官方模型全解析:检测、分类、分割、姿态估计
一、YOLO模型发展历程
YOLO家族进化史:
YOLOv1 (2016) → YOLOv2 (2017) → YOLOv3 (2018) → YOLOv4 (2020)
↓
YOLOv5 (2020) → YOLOv6 (2022) → YOLOv7 (2022) → YOLOv8 (2023)
↓
YOLOv9 (2024) → YOLOv10 (2024) ← 最新!
注意 :现在主要用的是 Ultralytics YOLO(v5, v8, v9, v10),不是原版Darknet的YOLO。
二、YOLO官方任务类型对比
| 任务类型 | 模型后缀 | 输入 → 输出 | 典型应用场景 |
|---|---|---|---|
| 目标检测 | .pt(检测模型) |
图片 → 框+类别 | 人脸识别、车辆检测、安防监控 |
| 实例分割 | -seg.pt |
图片 → 像素级掩码 | 医疗影像分析、自动驾驶场景理解 |
| 图像分类 | -cls.pt |
图片 → 类别标签 | 商品分类、图像审核、场景识别 |
| 姿态估计 | -pose.pt |
图片 → 关键点坐标 | 动作识别、体育分析、人机交互 |
| 目标跟踪 | 配合BYTE/Tracker | 视频 → 轨迹ID | 视频监控、交通流量统计 |
三、YOLOv5系列(工业部署首选)
3.1 模型尺寸选择
yaml
# YOLOv5 五种预训练模型(检测任务)
yolov5n.pt: # Nano - 1.9M参数 - 边缘设备(树莓派、手机)
yolov5s.pt: # Small - 7.2M参数 - 轻量级应用
yolov5m.pt: # Medium - 21M参数 - 平衡型(最常用)
yolov5l.pt: # Large - 47M参数 - 高精度需求
yolov5x.pt: # XLarge - 87M参数 - 服务器/云端
# 性能对比(COCO数据集)
模型 | mAP@0.5 | 速度(FPS) | 内存占用 | 适用场景
--------|---------|-----------|----------|---------
yolov5n | 45.7 | 280 | 1.8GB | 嵌入式、移动端
yolov5s | 56.8 | 220 | 2.4GB | 实时视频流
yolov5m | 64.1 | 140 | 4.2GB | 通用检测
yolov5l | 67.3 | 99 | 6.8GB | 工业质检
yolov5x | 68.9 | 75 | 10.1GB | 自动驾驶
3.2 YOLOv5特点
python
优点:
1. ✅ 部署友好:支持ONNX、TensorRT、CoreML、OpenVINO
2. ✅ 训练简单:python train.py --data coco.yaml --weights yolov5s.pt
3. ✅ 社区丰富:大量教程、改进方案
4. ✅ 精度-速度平衡:实际项目验证最多
缺点:
1. ❌ 没有官方分割、姿态模型
2. ❌ 网络结构相对传统
3. ❌ 小目标检测一般
3.3 使用代码示例
python
# 检测
import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
results = model('image.jpg')
results.show()
# 训练自己的数据
"""
python train.py \
--weights yolov5s.pt \
--data data.yaml \
--epochs 100 \
--batch-size 16 \
--img 640
"""
四、YOLOv8系列(多功能全家桶)
4.1 统一架构设计
python
# 一个框架,四种任务
from ultralytics import YOLO
# 检测
model = YOLO('yolov8n.pt') # 检测专用
# 分割
model = YOLO('yolov8n-seg.pt') # 实例分割
# 分类
model = YOLO('yolov8n-cls.pt') # 图像分类
# 姿态
model = YOLO('yolov8n-pose.pt') # 关键点检测
4.2 YOLOv8模型规格
yaml
# 检测模型(以nano为例)
yolov8n.pt: # 3.2M参数 - 80类COCO - mAP50-90: 37.3
yolov8s.pt: # 11.2M参数 - mAP50-90: 44.9
yolov8m.pt: # 25.9M参数 - mAP50-90: 50.2
yolov8l.pt: # 43.7M参数 - mAP50-90: 52.9
yolov8x.pt: # 68.2M参数 - mAP50-90: 53.9
# 多任务模型对比
任务类型 | 输出格式 | 计算复杂度 | 典型场景
------------|---------------------|-----------|---------
检测(.pt) | [x1,y1,x2,y2,class] | ★★☆☆☆ | 通用物体定位
分割(-seg) | 掩码+边界框 | ★★★☆☆ | 精细物体分割
分类(-cls) | 类别概率 | ★☆☆☆☆ | 整图分类
姿态(-pose) | 17个关键点坐标 | ★★★★☆ | 人体姿态
4.3 YOLOv8核心改进
python
# 相比YOLOv5的改进
改进点 | 效果
----------------------|------
无锚框(Anchor-Free) | 训练更简单,泛化更好
C2f模块 | 更好的特征融合
分布焦点损失(DFL) | 定位更准确
任务特定头 | 多任务不冲突
# 使用示例(更简洁的API)
from ultralytics import YOLO
# 训练(一行命令)
model = YOLO('yolov8n.pt')
model.train(data='coco8.yaml', epochs=100, imgsz=640)
# 验证
metrics = model.val()
# 预测
results = model('image.jpg')
五、YOLOv9/v10(最新技术)
5.1 YOLOv9特点(2024年3月)
yaml
核心创新:可编程梯度信息(PGI) + 广义高效层聚合网络(GELAN)
优点:
1. 🚀 更高的精度:相同参数量下,mAP提升明显
2. 🚀 更少的参数:比YOLOv8小,但精度更高
3. 🚀 真正的无锚框:完全摆脱anchor设计
模型对比:
yolov9-c.pt: # 7.2M参数 - mAP50-90: 46.8(v8s是44.9)
yolov9-e.pt: # 58.1M参数 - mAP50-90: 55.6(v8x是53.9)
适用场景:
- 对精度要求极高的工业检测
- 资源受限但需要高精度
- 学术研究和算法验证
5.2 YOLOv10特点(2024年5月)
yaml
核心创新:无NMS设计 + 一致双重分配
优点:
1. ⚡ 无NMS推理:后处理简化,速度提升
2. ⚡ 精度更高:COCO上SOTA
3. ⚡ 端到端优化:从训练到推理全流程优化
模型版本:
yolov10n.pt: # 2.3M参数 - 640推理速度:1.06ms
yolov10s.pt: # 7.2M参数 - 精度速度最佳平衡
yolov10m.pt: # 15.4M参数
yolov10b.pt: # 19.1M参数
yolov10l.pt: # 24.4M参数
yolov10x.pt: # 29.5M参数
适用场景:
- 实时性要求极高的应用
- 需要部署在边缘设备
- 大规模视频流处理
六、不同场景模型选型指南
6.1 按硬件选择
python
# 嵌入式/Jetson/Raspberry Pi
推荐:YOLOv5n / YOLOv8n / YOLOv10n
原因:参数量小,内存占用低,实时推理
# 边缘计算设备(NVIDIA Tesla T4)
推荐:YOLOv5s / YOLOv8s / YOLOv10s
原因:精度和速度平衡,支持TensorRT加速
# 服务器/云端(V100/A100)
推荐:YOLOv5x / YOLOv8x / YOLOv9-e
原因:追求最高精度,计算资源充足
# 移动端(iOS/Android)
推荐:YOLOv8n + CoreML/TFLite转换
原因:官方支持移动端导出
6.2 按任务类型选择
python
# 任务1:通用目标检测(人、车、动物)
✅ 推荐:YOLOv8m.pt(平衡性好)
❌ 避免:YOLOv5x(太重)或 YOLOv8n(精度低)
# 任务2:工业缺陷检测(小目标、高精度)
✅ 推荐:YOLOv9-c.pt(精度高)或 YOLOv10b.pt
✅ 技巧:img_size增大到1280,使用TTA增强
# 任务3:实时视频分析(30+FPS)
✅ 推荐:YOLOv10n.pt(无NMS最快)或 YOLOv5n.pt
✅ 技巧:使用TensorRT加速,half精度推理
# 任务4:实例分割(物体抠图)
✅ 必须:YOLOv8-seg系列(v5无官方分割)
✅ 推荐:yolov8m-seg.pt(平衡精度速度)
# 任务5:人体姿态估计
✅ 必须:YOLOv8-pose系列
✅ 推荐:yolov8m-pose.pt(17关键点)
# 任务6:图像分类
✅ 推荐:YOLOv8-cls或专用分类网络(ResNet、EfficientNet)
⚠️ 注意:YOLO分类不是强项,简单任务可用
6.3 按数据集规模选择
python
# 小数据集(<1万张)
推荐:YOLOv5s / YOLOv8s + 数据增强 + 预训练权重
技巧:冻结部分层,防止过拟合
# 中等数据集(1-10万张)
推荐:YOLOv8m / YOLOv9-c + 正常训练
技巧:使用超参数进化自动调参
# 大数据集(>10万张)
推荐:YOLOv8x / YOLOv9-e + 长时间训练
技巧:分布式训练,混合精度
七、训练配置建议
7.1 基础训练命令对比
bash
# YOLOv5 训练
python train.py \
--weights yolov5s.pt \
--data data.yaml \
--epochs 100 \
--imgsz 640 \
--batch-size 16 \
--device 0
# YOLOv8 训练(更简洁)
yolo train \
model=yolov8s.pt \
data=data.yaml \
epochs=100 \
imgsz=640 \
batch=16 \
device=0
# YOLOv10 训练
yolo train \
model=yolov10s.pt \
data=data.yaml \
epochs=100 \
imgsz=640 \
batch=16
7.2 关键参数设置
yaml
# data.yaml 数据集配置示例
path: ../datasets/coco8 # 数据集根目录
train: images/train # 训练集路径
val: images/val # 验证集路径
test: images/test # 测试集路径
nc: 80 # 类别数
names: ['person', 'bicycle', 'car', ...] # 类别名称
八、部署方案对比
8.1 导出格式支持
python
# YOLOv5 导出
python export.py --weights yolov5s.pt --include torchscript,onnx,engine
# YOLOv8 导出(支持更多格式)
model.export(format='onnx') # ONNX
model.export(format='engine') # TensorRT
model.export(format='coreml') # CoreML (iOS)
model.export(format='tflite') # TFLite (Android)
model.export(format='openvino') # OpenVINO (Intel)
# 部署性能对比
格式 | 延迟(ms) | 内存(MB) | 适用平台
-----------|----------|----------|---------
PyTorch | 12.3 | 1250 | 训练/推理
ONNX | 8.7 | 890 | 多平台
TensorRT | 3.2 | 720 | NVIDIA GPU
OpenVINO | 5.1 | 650 | Intel CPU/GPU
TFLite | 15.4 | 320 | Android
CoreML | 18.2 | 280 | iOS
九、综合选型决策树
开始选择YOLO模型
│
├─ 问:需要什么任务?
│ ├─ 检测 → 所有版本都行
│ ├─ 分割 → 只能YOLOv8/v9/v10的-seg
│ ├─ 姿态 → 只能YOLOv8/v9/v10的-pose
│ └─ 分类 → YOLOv8-cls或专用分类网络
│
├─ 问:部署在哪里?
│ ├─ 嵌入式 → YOLOv5n/v8n/v10n
│ ├─ 边缘端 → YOLOv5s/v8s/v10s
│ ├─ 服务器 → YOLOv8x/v9-e
│ └─ 移动端 → YOLOv8n + CoreML/TFLite
│
├─ 问:数据集大小?
│ ├─ 小(<1万) → 小模型 + 数据增强
│ ├─ 中(1-10万) → 中模型
│ └─ 大(>10万) → 大模型 + 长训练
│
└─ 问:最新技术需求?
├─ 要最高精度 → YOLOv9-e/v10x
├─ 要最快速度 → YOLOv10n(无NMS)
└─ 要稳定性 → YOLOv5s(工业验证最多)
十、实用建议总结
10.1 新手推荐
python
# 第一次用YOLO?按这个顺序:
1. 从 YOLOv5s.pt 开始 → 文档最多,问题好解决
2. 用官方教程跑通训练流程
3. 在自己的数据上微调
4. 熟悉后再尝试 YOLOv8/v9/v10
10.2 项目快速启动模板
bash
# 1. 安装
pip install ultralytics # v8/v9/v10
# 或
git clone https://github.com/ultralytics/yolov5 # v5
# 2. 准备数据(YOLO格式)
# images/train/xxx.jpg
# labels/train/xxx.txt
# 3. 训练
yolo train model=yolov8s.pt data=data.yaml epochs=50
# 4. 验证
yolo val model=runs/train/exp/weights/best.pt
# 5. 推理
yolo predict model=runs/train/exp/weights/best.pt source='test.jpg'
10.3 避坑指南
python
# 常见问题及解决:
1. ❌ CUDA内存不足 → 减小batch-size或imgsz
2. ❌ 训练损失NaN → 检查数据标注,降低学习率
3. ❌ 验证精度低 → 增加数据增强,延长训练时间
4. ❌ 推理速度慢 → 使用TensorRT加速,减小输入尺寸
5. ❌ 小目标检测差 → 增大imgsz,使用FPN/PAN结构
最终推荐表
| 你的需求 | 首推模型 | 备选方案 | 训练时间参考 |
|---|---|---|---|
| 最快上手 | YOLOv5s.pt | YOLOv8s.pt | 2-4小时 |
| 最高精度 | YOLOv9-e.pt | YOLOv8x.pt | 24-48小时 |
| 最快推理 | YOLOv10n.pt | YOLOv5n.pt | 1-2小时 |
| 移动端部署 | YOLOv8n.pt + TFLite | YOLOv5n.pt + NCNN | 2-4小时 |
| 工业检测 | YOLOv8m.pt | YOLOv5m.pt | 8-12小时 |
| 学术研究 | YOLOv9-c.pt | YOLOv10s.pt | 12-24小时 |
记住:没有最好的模型,只有最适合的模型。先用小数据快速验证,再决定最终方案!