从零开始实现YOLOv8示例
1. YOLOv8环境配置
yolov8官网
# 安装YOLOv8
pip install "ultralytics<=8.3.40"
# 安装 ONNX Runtime
pip install onnxruntime
2. 预训练模型检测图片
# 下载示例图片
wget https://ultralytics.com/images/bus.jpg
# 使用预训练模型检测图片
yolo detect predict model=yolov8n.pt source=bus.jpg
#输出结果
# 生成 runs/detect/predict 目录,包含标注后的图片(如 bus.jpg 中检测到车辆、行人等)。
3. 训练模型实时检测
# 下载小型数据集(如 COCO 格式的 coco128):
yolo download data=coco128
# 训练模型, epochs=10 表示训练 10 轮,训练完成后,模型保存在 runs/detect/train
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=10
# 实时摄像头检测,source=0 表示调用本地摄像头
yolo detect predict model=yolov8n.pt source=0
# 导出模型为 ROS 2 兼容格式
yolo export model=yolov8n.pt format=onnx
4. 使用 ONNX 模型进行推理
#
import cv2
import numpy as np
import onnxruntime as ort# 加载 ONNX 模型
session = ort.InferenceSession("yolov8n.onnx") # <button class="citation-flag" data-index="6"><button class="citation-flag" data-index="8"># 准备输入图像
image = cv2.imread("bus.jpg") # <button class="citation-flag" data-index="1">
input_blob = cv2.resize(image, (640, 640)) # 固定输入尺寸(YOLOv8 默认要求)<button class="citation-flag" data-index="7">
input_blob = input_blob.transpose(2, 0, 1) # 转换为 CHW 格式 <button class="citation-flag" data-index="4">
input_blob = input_blob[np.newaxis, ...].astype(np.float32) / 255.0 # 归一化 <button class="citation-flag" data-index="4"># 执行推理
outputs = session.run(None, {"images": input_blob}) # <button class="citation-flag" data-index="6"><button class="citation-flag" data-index="8"># 解析输出(示例简化版)
detections = outputs[0][0] # 假设输出为检测结果
for detection in detections:class_id, confidence, bbox = detectionprint(f"Class: {class_id}, Confidence: {confidence}, BBox: {bbox}") # <button class="citation-flag" data-index="7">
5. 部署验证
# 示例:导出为 RKNN 格式(需额外工具)
python3 -m airockchip.export --model yolov8n.onnx --output yolov8n.rknn
# 验证导出模型
yolo val model=yolov8n.onnx data=coco128.yaml