4、YOLOv8模型下载与配置:官方模型仓库介绍、YOLOv8权重文件下载、模型配置文件解读
好,咱们接着往下走。上一章我们把环境搭好了,现在该请主角登场了——YOLOv8模型本身。
很多新手上来就急着写代码,结果模型文件没下对,或者配置文件路径写错了,折腾半天跑不起来。我刚开始搞目标检测那会儿也犯过这毛病,下载了个v5的权重硬往v8的代码里塞,报错报得我怀疑人生。所以这一章,咱们把模型下载和配置这件事彻底捋清楚。
4.1 官方模型仓库长什么样?
YOLOv8的官方仓库在GitHub上,地址是 https://github.com/ultralytics/ultralytics。这个仓库不仅是代码,它本身就是一套完整的生态。
我个人习惯把仓库分成三块来看:
- 代码本体:就是
ultralytics/这个目录,里面包含了模型定义、训练逻辑、推理逻辑。 - 模型权重:官方不把权重文件直接放GitHub仓库里(太大了),而是托管在
https://github.com/ultralytics/assets/releases这个页面下。 - 配置文件:在
ultralytics/cfg/models/v8/目录下,有yolov8n.yaml、yolov8s.yaml这些文件。
你想想看,这三个东西缺一不可。代码是引擎,权重是经验,配置文件是蓝图。少一个,你的目标检测就转不起来。
4.2 权重文件怎么下载?
YOLOv8官方提供了5种不同大小的预训练模型,我整理了一张表,你一看就明白:
| 模型名称 | 大小(约) | mAPval 50-95 | 速度(CPU) | 适用场景 |
|---|---|---|---|---|
| YOLOv8n | 6.3 MB | 37.3% | 快 | 移动端、嵌入式设备 |
| YOLOv8s | 21.5 MB | 44.9% | 中等 | 普通PC、实时检测 |
| YOLOv8m | 49.7 MB | 50.2% | 较慢 | 精度优先、服务器端 |
| YOLOv8l | 83.7 MB | 52.9% | 慢 | 高精度场景 |
| YOLOv8x | 130.5 MB | 53.9% | 最慢 | 极致精度、离线分析 |
yolov8n.pt 就够了。它小、快,跑起来不费劲。等你想追求更高精度了,再换大的。我在项目里做边缘端部署时,用的就是nano版本,在树莓派上能跑到15帧左右,够用了。
下载方式有两种。第一种,直接用代码自动下载:
from ultralytics import YOLO
# 这行代码会自动下载 yolov8n.pt 到当前目录
model = YOLO('yolov8n.pt')
第二种,手动下载。去 https://github.com/ultralytics/assets/releases 找到对应版本的 .pt 文件,下载后放到你的项目目录下。我个人更推荐第二种,因为你能清楚知道文件在哪,不会出现「咦,模型文件跑哪去了」的尴尬。
4.3 模型配置文件到底在配什么?
配置文件,说白了就是告诉YOLOv8:「你的神经网络长什么样」。它定义了网络的深度、宽度、以及每个模块怎么连接。
我们打开 yolov8n.yaml 看看核心内容:
# Parameters
nc: 80 # 类别数量,COCO数据集是80类
scales: # 模型缩放因子
n: [0.33, 0.25, 1024] # depth, width, max_channels
# YOLOv8.0n backbone
backbone:
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C2f, [128, True]] # 2
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C2f, [256, True]] # 4
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 6, C2f, [512, True]] # 6
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C2f, [1024, True]] # 8
- [-1, 1, SPPF, [1024, 5]] # 9
# YOLOv8.0n head
head:
- [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 10
- [[-1, 6], 1, Concat, [1]] # 11
- [-1, 3, C2f, [512]] # 12
- [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 13
- [[-1, 4], 1, Concat, [1]] # 14
- [-1, 3, C2f, [256]] # 15
- [-1, 1, Conv, [256, 3, 2]] # 16
- [[-1, 12], 1, Concat, [1]] # 17
- [-1, 3, C2f, [512]] # 18
- [-1, 1, Conv, [512, 3, 2]] # 19
- [[-1, 9], 1, Concat, [1]] # 20
- [-1, 3, C2f, [1024]] # 21
- [[15, 18, 21], 1, Detect, [nc]] # 22
嗯,看着有点晕是吧?别急,我拆开给你讲。
4.4 配置文件里的关键参数
第一块:全局参数
nc:类别数量。你训练自己的数据集时,这个必须改。比如你只检测人和车,那就改成2。scales:缩放因子。n、s、m、l、x 分别对应不同的深度和宽度。nano版本的深度是0.33,宽度是0.25,所以它特别轻量。
第二块:Backbone(骨干网络)
这部分负责提取图像特征。从输入图像开始,一层层卷积、下采样,把图片从640x640压缩成20x20的特征图。每一行的格式是:
[输入来源, 重复次数, 模块名称, [参数]]
比如 [-1, 3, C2f, [128, True]] 的意思是:从上一层取输入,重复3次C2f模块,输出128个通道。
第三块:Head(检测头)
这部分负责在特征图上做检测。它把不同尺度的特征图融合起来,最终输出三个尺度的检测结果。为什么是三个?因为YOLOv8在P3、P4、P5三个层级上做检测,分别对应小、中、大目标。
核心要点:配置文件决定了模型的「骨架」。你换一个yaml文件,就等于换了一个模型。YOLOv8n和YOLOv8x的区别,本质上就是配置文件里的scales参数不同。
4.5 实际项目中怎么用?
假设你要训练自己的数据集,比如检测交通标志。你需要做三件事:
- 复制一份
yolov8n.yaml,改名为traffic_sign.yaml - 把
nc: 80改成你的类别数,比如nc: 10 - 在训练代码中指定这个配置文件
代码示例:
from ultralytics import YOLO
# 加载配置文件,构建模型
model = YOLO('traffic_sign.yaml')
# 加载预训练权重(迁移学习)
model = YOLO('yolov8n.pt')
# 开始训练
model.train(data='traffic_sign.yaml', epochs=100)
好了,模型下载和配置这块就讲完了。下一章我们真正开始写代码,用YOLOv8做实时目标检测。到时候你会看到,前面这些准备工作到底有多重要。