简介:本文详细介绍了如何使用Python基于Yolov8实现物体检测,涵盖环境配置、模型加载、推理执行及结果可视化等全流程,适合开发者快速上手。
物体检测是计算机视觉领域的核心任务之一,广泛应用于安防监控、自动驾驶、工业质检等场景。Yolov8(You Only Look Once version 8)作为Ultralytics推出的新一代目标检测模型,以其高精度、高速度和易用性成为开发者首选。本文将通过Python实现Yolov8物体检测,从环境配置到结果可视化,提供完整的技术指南。
Yolov8继承了Yolo系列“单阶段检测”的核心思想,通过以下改进实现性能跃升:
| 版本 | 输入尺寸 | 精度(mAP) | 速度(FPS) |
|---|---|---|---|
| Yolov5s | 640x640 | 37.4% | 140 |
| Yolov8n | 640x640 | 44.9% | 165 |
| Yolov8x | 640x640 | 53.9% | 84 |
数据来源:Ultralytics官方测试(NVIDIA A100 GPU)
# 创建虚拟环境(推荐)python -m venv yolov8_envsource yolov8_env/bin/activate # Linux/macOSyolov8_env\Scripts\activate # Windows# 安装核心依赖pip install ultralytics opencv-python matplotlib numpy# GPU加速(可选)pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
from ultralytics import YOLOmodel = YOLO('yolov8n.yaml') # 加载模型配置print(model.info()) # 输出模型结构信息
Yolov8提供三种加载方式:
# 方式1:加载预训练模型(推荐)model = YOLO('yolov8n.pt') # 轻量级模型# 方式2:加载自定义训练模型model = YOLO('runs/detect/train/weights/best.pt')# 方式3:从配置文件初始化(需训练)model = YOLO('yolov8n.yaml')
results = model('bus.jpg') # 输入图片路径或OpenCV图像results.show() # 显示检测结果
# 批量图片检测batch_results = model(['img1.jpg', 'img2.jpg'])# 视频流检测cap = cv2.VideoCapture('video.mp4')while cap.isOpened():ret, frame = cap.read()if ret:results = model(frame)annotated_frame = results[0].plot()cv2.imshow('Detection', annotated_frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
conf=0.5(默认)过滤低置信度检测iou=0.7(默认)控制非极大值抑制(NMS)device='0'指定GPU,device='cpu'强制CPU运行
results = model('image.jpg', conf=0.6, iou=0.5, device='0')
Yolov8内置结果可视化工具:
# 单张结果可视化for result in results:boxes = result.boxes.data.cpu().numpy() # 获取边界框labels = result.boxes.cls.cpu().numpy() # 获取类别IDimg = result.plot() # 绘制检测结果cv2.imwrite('output.jpg', img)
import matplotlib.pyplot as pltimport cv2img = cv2.imread('image.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 手动绘制边界框for result in results:for box in result.boxes:x1, y1, x2, y2 = box.xyxy[0].tolist()label = f"{model.names[int(box.cls[0])]}"cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)cv2.putText(img, label, (int(x1), int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)plt.imshow(img)plt.axis('off')plt.show()
# 导出为ONNX格式(兼容TensorRT)model.export(format='onnx')# 导出为TensorRT引擎(需NVIDIA GPU)model.export(format='engine')
| 错误类型 | 解决方案 |
|---|---|
CUDA out of memory |
减小batch size或使用device='cpu' |
ModuleNotFoundError |
重新安装依赖pip install -r requirements.txt |
| 检测结果为空 | 调整conf阈值或检查输入图像质量 |
mosaic=True和hsv_h=0.015提升泛化能力
from ultralytics import YOLOimport cv2# 1. 加载模型model = YOLO('yolov8n.pt') # 或自定义路径# 2. 执行检测results = model('input.jpg', conf=0.5, iou=0.5)# 3. 可视化结果for result in results:img = result.plot()cv2.imwrite('output.jpg', img)# 4. 解析结果(可选)for result in results:print(f"检测到 {len(result.boxes)} 个物体")for box in result.boxes:x1, y1, x2, y2 = box.xyxy[0].tolist()label = model.names[int(box.cls[0])]confidence = float(box.conf[0])print(f"类别: {label}, 置信度: {confidence:.2f}, 坐标: ({x1}, {y1}), ({x2}, {y2})")
Yolov8通过架构创新和工程优化,实现了检测精度与速度的双重突破。开发者可通过调整模型规模、优化推理参数和部署方案,灵活适配不同场景需求。未来,随着Transformer与CNN的融合趋势,Yolov系列有望进一步拓展多模态检测能力。
行动建议:
yolov8n.pt开始实验,逐步尝试更大模型ultralytics/datasets中的示例数据快速验证通过本文的指南,开发者可快速构建基于Yolov8的物体检测系统,为实际业务场景提供智能视觉支持。