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.yamlyolov8s.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 文件,下载后放到你的项目目录下。我个人更推荐第二种,因为你能清楚知道文件在哪,不会出现「咦,模型文件跑哪去了」的尴尬。

注意:权重文件有版本对应关系。YOLOv8的权重不能用在YOLOv5或YOLOv9上。我曾经见过有人把v8的权重改个名就当成v5用,结果模型直接崩了。不同版本的网络结构不一样,权重文件里的张量形状对不上。

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 实际项目中怎么用?

假设你要训练自己的数据集,比如检测交通标志。你需要做三件事:

  1. 复制一份 yolov8n.yaml,改名为 traffic_sign.yaml
  2. nc: 80 改成你的类别数,比如 nc: 10
  3. 在训练代码中指定这个配置文件

代码示例:

from ultralytics import YOLO

# 加载配置文件,构建模型
model = YOLO('traffic_sign.yaml')

# 加载预训练权重(迁移学习)
model = YOLO('yolov8n.pt')

# 开始训练
model.train(data='traffic_sign.yaml', epochs=100)
一个小技巧:如果你只是做推理,不需要改配置文件。直接用预训练权重就行。只有当你训练自己的数据集时,才需要动yaml文件。我刚开始学的时候,把配置文件改得乱七八糟,结果模型训练出来啥也检测不到——后来才发现是nc写错了。

好了,模型下载和配置这块就讲完了。下一章我们真正开始写代码,用YOLOv8做实时目标检测。到时候你会看到,前面这些准备工作到底有多重要。