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.pt 或 yolov8s.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(非极大值抑制)来过滤掉重叠的框。
conf > 0.5 过滤一下。记住,置信度阈值一定要设。
4.4 动手试试:换个自己的图片
光跑官方示例没意思。咱们换张自己的图试试:
# 用自己的图片
model = YOLO('yolov8n.pt')
results = model('my_photo.jpg')
# 保存结果
results[0].save('output.jpg')
你拿一张办公室的照片,它应该能检测出人、椅子、显示器。拿一张街景,它能认出车、行人、红绿灯。
这就是预训练模型的威力——它已经见过足够多的数据,能处理大多数常见场景。
但问题来了:如果你的场景很特殊呢?比如检测工业零件、识别特定农作物?这时候,通用模型就不够用了。
嗯,这正是我们接下来要讲的内容——迁移学习。
不过在那之前,你得先把这个通用模型玩熟。下载、运行、看懂输出,这三步走通了,后面的路就好走了。
yolov8s.pt 和 yolov8x.pt 分别跑同一张图,对比一下推理速度和检测精度。你会发现,模型越大,框得越准,但也越慢。
好,这一章就到这里。下一章,我们开始动手做迁移学习——把 YOLOv8 变成你自己的专属检测器。