1. 项目概述:五分钟快速上手YOLOv8检测demo
刚接触计算机视觉的新手常被复杂的模型部署流程劝退,今天我们就用最简化的方式实现YOLOv8的首次推理体验。作为当前最流行的实时目标检测框架之一,YOLOv8通过pip安装即可获得完整的推理能力,无需繁琐的环境配置。下面这个demo将带你完成从零安装到运行检测的全过程,过程中我会特别标注几个容易翻车的细节。
2. 环境准备与工具选型
2.1 Python环境检查
建议使用Python 3.8-3.10版本(实测3.11存在部分依赖冲突)。通过命令行执行:
python --version # 检查版本 python -m pip install --upgrade pip # 升级pip注意:若系统同时存在Python2和Python3,需明确使用python3和pip3命令
2.2 安装Ultralytics套件
官方推荐使用pip安装最新版:
pip install ultralytics国内用户可添加清华源加速:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ultralytics常见安装问题排查:
- 报错"Failed building wheel for pycocotools":需先安装C++编译工具链
- 报错"SSL certificate verify failed":添加
--trusted-host pypi.tuna.tsinghua.edu.cn参数
3. 核心代码实现
3.1 基础检测脚本
创建demo.py文件,写入以下代码:
from ultralytics import YOLO import cv2 # 加载预训练模型(自动下载yolov8n.pt) model = YOLO('yolov8n.pt') # 检测图片(支持jpg/png等格式) results = model('bus.jpg') # 替换为你的测试图片路径 # 可视化结果 res_plotted = results[0].plot() cv2.imshow("YOLOv8 Detection", res_plotted) cv2.waitKey(0)3.2 关键参数解析
- 模型选择:
yolov8n.pt为nano版本(最小模型),可选s/m/l/x不同尺寸 - 推理设备:自动使用可用GPU,强制CPU模式添加
device='cpu'参数 - 置信度阈值:默认0.25,可通过
conf=0.5调整检测灵敏度
4. 进阶功能扩展
4.1 视频流处理
修改检测源为视频文件或摄像头:
# 视频文件检测 results = model.predict(source='test.mp4', save=True) # 实时摄像头(0为默认摄像头) results = model.predict(source=0, show=True)4.2 结果导出与分析
获取结构化检测结果:
for result in results: boxes = result.boxes # 边界框坐标 masks = result.masks # 分割掩码(需segmentation模型) keypoints = result.keypoints # 关键点检测 print(result.verbose()) # 打印详细统计信息5. 常见问题解决方案
5.1 模型下载失败
手动下载模型后指定本地路径:
- 从官网下载对应模型.pt文件
- 修改加载代码:
model = YOLO('/path/to/yolov8n.pt')5.2 CUDA内存不足
减小推理批次大小:
results = model.predict(source='input.jpg', batch=1)5.3 检测结果漂移
尝试以下优化方案:
- 调整置信度阈值(conf参数)
- 使用更大尺寸模型(如yolov8m.pt)
- 添加数据增强参数:
results = model.predict(..., augment=True)6. 性能优化技巧
6.1 量化加速
使用FP16半精度推理:
model = YOLO('yolov8n.pt').half()6.2 ONNX导出
转换为ONNX格式提升跨平台性能:
model.export(format='onnx') # 生成onnx模型6.3 TensorRT部署
生成极致优化的引擎:
model.export(format='engine', device=0) # 需要CUDA环境经过这些步骤,你应该已经完成了YOLOv8的初体验。我在实际部署中发现,对于720p视频流,yolov8n模型在RTX 3060上能达到150+ FPS,而CPU推理也有20+ FPS的表现。如果遇到任何卡点,建议先尝试降低模型尺寸或输入分辨率。