4. 通用模型初探:下载YOLOv8预训练权重,运行官方推理demo,理解模型输出结构

好,咱们进入正题。

上一章我们聊了迁移学习的基本思路。说白了,就是拿别人训练好的模型,改一改,用到自己的场景里。那第一步是什么?你得先拿到这个“别人训练好的模型”。

这一章,我们就来干三件事:下载、运行、看懂

4.1 下载预训练权重:别下错了版本

YOLOv8 官方提供了好几种规格的模型。我刚开始接触时,也犯过迷糊——到底该下哪个?

官方仓库在 GitHub 上,叫 ultralytics/ultralytics。你不需要手动去翻 Release 页面,直接用 Python 代码就能拉下来。

我个人习惯用命令行,简单直接:

pip install ultralytics

装好之后,模型权重会自动缓存。你也可以手动指定下载哪个:

from ultralytics import YOLO

# 下载 YOLOv8n(nano 版本,最快最轻)
model = YOLO('yolov8n.pt')

这里有个坑,我提醒一下:yolov8n.pt 是自动从官方服务器拉的。如果你网络不好,可能会卡住。我曾经在内网环境里折腾了半天,最后发现是防火墙把下载地址给拦了。

官方提供的预训练权重有这几个规格:

模型名称 参数量 mAP(COCO) 推理速度(GPU) 适用场景
YOLOv8n 3.2M 37.3 最快 移动端、实时检测
YOLOv8s 11.2M 44.9 较快 通用场景
YOLOv8m 25.9M 50.2 中等 精度优先
YOLOv8l 43.7M 52.9 较慢 高精度场景
YOLOv8x 68.2M 53.9 最慢 极致精度
我的建议:刚开始做迁移学习,用 yolov8n.ptyolov8s.pt 就够了。模型小,迭代快,等调通了再换大的。

4.2 运行官方推理 demo:看看它到底能干啥

下载完权重,咱们先跑个 demo 感受一下。官方代码非常简洁,几行就能搞定:

from ultralytics import YOLO

# 加载模型
model = YOLO('yolov8n.pt')

# 对一张图片进行推理
results = model('bus.jpg')

# 显示结果
results[0].show()

你想想看,就这么几行代码,一个能检测 80 类物体的模型就跑起来了。我第一次跑通时,还挺兴奋的——毕竟从零训练一个这样的模型,没个几天几夜下不来。

如果你没有图片,可以用官方自带的示例图片:

# 官方会自动下载示例图片
results = model('https://ultralytics.com/images/bus.jpg')

嗯,这里要注意:results 返回的是一个列表,每个元素对应一张图片的检测结果。如果你只传了一张图,那就是 results[0]

4.3 理解模型输出结构:别被张量吓到

跑完 demo,你可能会想:这模型到底输出了什么?

咱们把输出拆开看看:

# 获取检测结果
result = results[0]

# 边界框
boxes = result.boxes
print(boxes.xyxy)   # 坐标:左上角 (x1, y1) 右下角 (x2, y2)
print(boxes.conf)   # 置信度
print(boxes.cls)    # 类别索引

# 可视化
result.show()

输出结构其实就三样东西:

  • 边界框坐标xyxy 格式,四个值,单位是像素。
  • 置信度:0 到 1 之间的数,越高越可信。
  • 类别索引:0 到 79 的数字,对应 COCO 数据集的 80 个类别。

为什么会这样设计?说白了,YOLO 把检测问题转化成了回归问题。它直接预测每个网格里有没有物体,以及物体的位置和类别。

核心理解:YOLOv8 的输出是一个三维张量。对于 640x640 的输入,输出形状大约是 [1, 84, 8400]。其中 84 表示 4 个坐标 + 80 个类别概率,8400 是预测框的数量。

你可能觉得 8400 个框太多了。没错,这里面大部分框的置信度都很低。后处理阶段会通过 NMS(非极大值抑制)来过滤掉重叠的框。

避坑指南:我曾经在解析输出时,直接拿了所有 8400 个框去画图,结果图片上密密麻麻全是框。后来才意识到,必须用 conf > 0.5 过滤一下。记住,置信度阈值一定要设

4.4 动手试试:换个自己的图片

光跑官方示例没意思。咱们换张自己的图试试:

# 用自己的图片
model = YOLO('yolov8n.pt')
results = model('my_photo.jpg')

# 保存结果
results[0].save('output.jpg')

你拿一张办公室的照片,它应该能检测出人、椅子、显示器。拿一张街景,它能认出车、行人、红绿灯。

这就是预训练模型的威力——它已经见过足够多的数据,能处理大多数常见场景。

但问题来了:如果你的场景很特殊呢?比如检测工业零件、识别特定农作物?这时候,通用模型就不够用了。

嗯,这正是我们接下来要讲的内容——迁移学习。

不过在那之前,你得先把这个通用模型玩熟。下载、运行、看懂输出,这三步走通了,后面的路就好走了。

小练习:试着用 yolov8s.ptyolov8x.pt 分别跑同一张图,对比一下推理速度和检测精度。你会发现,模型越大,框得越准,但也越慢。

好,这一章就到这里。下一章,我们开始动手做迁移学习——把 YOLOv8 变成你自己的专属检测器。