赞
踩
YOLOv8是单阶段目标检测的集大成之作,它可以帮助我们在图像或视频中自动识别和定位感兴趣的目标物体。本文将介绍如何调用YOLOv8的API实现训练、测试和调用摄像头进行实时检测和追踪。
import netron
import torch
from PIL import Image
import onnx
import sys
import os
import numpy as np
from pathlib import Path
from typing import Union
import cv2
from ultralytics import YOLO
在YOLOv8中使用下面的代码即可实现公共数据集的自动下载和模型训练。如果你需要是使用自制数据集进行训练,首先需要增加新数据集的配置文件xx.yaml
,需要准备训练数据集和标注文件。将图像文件和相应的标注文件存储在一个文件夹中,并按照一种标准格式进行标注,YOLOv8默认使用的是YOLO格式标注。然后,使用目标检测框架提供的训练代码,指定训练参数和路径,开始训练模型。具体的训练命令取决于您选用的目标检测框架,以下是一个示例:
def train():
# 加载模型配置文件,这里使用v8的m模型结构
model = YOLO('yolov8m.yaml')
# 做预训练
# model = YOLO('yolov8x.pt')
# model = YOLO('yolov8n.yaml').load('yolov8n.pt')
# 训练模型
model.train(data="coco.yaml", epochs=100, imgsz=640)
上述代码中加载模型配置文件时,如果加载的是 .yaml 文件格式,采用的是从头训练的方案。如果加载的是 .pt 格式则采用的是对应的预训练方案,这种方式在训练时会额外下载对应模型的预训练权重(如果下载失败可考虑科学上网),在训练模型代码中配置数据集文件data
、训练迭代次数epochs
和输入图片尺寸imgsz
。通过执行上述命令,训练代码将读取图像和标注文件,然后使用指定的配置文件和预训练权重进行模型训练。训练过程可能需要一些时间,具体取决于数据集的大小和计算资源的性能。
在训练完成后,我们可以使用训练的模型权重进行测试。以下是测试图片代码:
def test_img():
# 训练好的模型权重路径
model = YOLO("YOLOv8/runs/detect/train1/weights/best.pt")
# 测试图片的路径
img = cv2.imread("YOLOv8/7.jpg")
res = model(img)
ann = res[0].plot()
while True:
cv2.imshow("yolo", ann)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 设置保存图片的路径
cur_path = sys.path[0]
print(cur_path, sys.path)
if os.path.exists(cur_path):
cv2.imwrite(cur_path + "out.jpg", ann)
else:
os.mkdir(cur_path)
cv2.imwrite(cur_path + "out.jpg", ann)
以上代码主要实现了一个测试图片的功能 。首先,通过导入训练好的模型权重来初始化YOLO模型。然后,读取指定路径下的测试图片,并使用YOLO模型对图片进行推理,得到目标检测结果。接下来,通过将检测结果中的目标物体绘制在图片上形成标注框的方式,将标注框的图片显示出来。用户可以通过按下键盘上的"q"键来退出显示。最后,将带有标注框的图片保存到当前路径下作为"out.jpg"的图片文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。