yolo V8 训练自己的模型(标注数据,更改训练配置文件等)
了解yolo的发展历程
一、环境配置:
1、安装 Anaconda
下载安装包安装即可
2、创建虚拟环境
# 创建虚拟环境,注意使用Anaconda Prompt命令行
conda create --name yolotest python=3.8.19
3、创建虚拟环境成功后,安装yolo
# 进入虚拟环境
conda activate yolotest
# 安装之前可以配置一下镜像源,提升下载安装速度
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
# 安装yolo
pip install yolo
# 安装ultralytics
pip install ultralytics
# 安装标注工具
pip install labelimg
# 安装ncnn 本次不使用,可以不安装
pip install ncnn
Yolo 命令解释:
yolo 命令行工具用于处理 YOLOv8 模型的不同任务。以下是一些基本用法的中文解释:
训练检测模型:训练一个 YOLOv8 检测模型,使用 Yolo train 命令,指定数据、模型文件、训练轮数和初始学习率。
例如:yolo train data=coco8.yaml model=yolov8n.pt epochs=10 lr0=0.01
预测视频:使用一个预训练的分割模型对YouTube 视频进行预测,指定图像大小。
例如:yolo predict model=yolov8n-seg.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320
验证模型:对一个预训练的检测模型进行验证,设置批次大小和图像大小。
例如:yolo val model=yolov8n.pt data=coco8.yaml batch=1 imgsz=640
导出模型:将 YOLOV8 分类模型导出为 ONNX格式,指定图像大小。
例如:yolo export model=yolov8n-cls.pt format=onnx imgsz=224,128
数据集探索:使用 Utralytics Explorer API浏览数据集,支持语义搜索和 SQL查询。
例如:yolo explorer data=data.yaml model=yolov8n.pt
实时摄像头推理:使用 Streamlit 启动一个实时摄像头推理界面。
例如:yolo streamlit-predict
二、新建训练文件夹
1、创建yolotrain文件并在该文件夹下创建images、labels,
2、images、labels文件夹下分别都创建 train、val文件夹(images文件夹下多创建一个test文件夹)
三、标注数据
将准备好的图片放到 images/train文件夹,下面并且复制一份到 images/val文件夹
在命令控制台,输入labelimg命令,即可打开labelimg程序,进行图片标注。
- 点击Open Dir按钮,选择到你的 images/train文件夹即可,例如E:/yolotest/images/train。
- 点击Change Save Dir 按钮,选择到你的 labels/train文件夹即可,例如E:/yolotest/labels/train。
- 点击Save 下面的格式按钮,注意调整到 YOLO格式的模式再保存,请看下图
四、模型训练
再训练模型之前还需要一些必要的准备工作,除了准备必要的数据,还需要一些文件。
Arial文件是字体文件,如果需要自定义字体,那么需要安装一下,点击复制路径Atial.ttf即可;否则可以不使用。
blood文件是yaml类型,配置信息如下:
path: E:/yolotrain
train: images/train
val: images/val
test: images/test
nc: 2
names: ["armor","blood"]
labeling 文件是 中文版的图片标注程序,可以不使用。
pnnx-20240618-windows 文件用于模型转换导出,本次也未用到,可以不使用
yolov8s.pt文件是yolo已经训练好的模型,本次训练是在该模型的基础上训练的,必须使用。
准备好必要文件 yaml配置文件 和 .pt 两个必须文件(可以去yolo官网下载即可)
放入yolotrain项目文件夹后可以开始训练模型:
# 训练模型
yolo detect train data=e:/yolotrain/blood.yaml model=e:/yolotrain/yolov8s.pt epochs=20 imgsz=2100
五 、测试模型
# 训练后的模型存储路径
E:\yolotrain\runs\detect\train\weights\best.pt
from ultralytics import YOLO
import cv2
# Load a COCO-pretrained YOLOv8n model
model = YOLO(model="./best.pt")
# 视频路径
video_path = "./val.mp4"
# 读取视频
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
# 读取视频播放状态、视频帧
status, frame = cap.read()
if not status:
break
# 使用模型预测
results = model.predict(source=frame)
# 多个结果,取第一个展示
result = results[0]
# 画标注框
anno_frame = result.plot()
# 调整帧大小
# 获取原始帧的高度和宽度
height, width, _ = anno_frame.shape
# 计算调整后的宽度
new_width = int((width / height) * 600)
# 调整帧大小并保持纵横比
anno_frame_resized = cv2.resize(anno_frame, (new_width, 600))
# 创建固定大小的窗口并展示调整大小后的结果
cv2.namedWindow("yy", cv2.WINDOW_NORMAL)
cv2.resizeWindow("yy", 1100, 600)
# 展示结果
cv2.imshow("yy", anno_frame)
# 退出代码
key = cv2.waitKey(1)
if key & 0xFF == ord('q') or key == 27: # 检查按键是否为 'q' 或者 Esc 键的 ASCII 值
break
# 资源释放
cap.release()
cv2.destroyAllWindows()
工具:
# 将视频转为图片放到文件夹
import cv2
import os
# 打开视频文件
video = cv2.VideoCapture('./train.mp4')
# 视频帧计数
frame_count = 0
# 指定保存图片的文件夹
output_folder = "E:/yolotrain/images/train/"
# 确保输出文件夹存在,如果不存在则创建它
os.makedirs(output_folder, exist_ok=True)
# 循环读取视频帧
while True:
success, frame = video.read()
if not success:
break
# 保存当前帧为图片文件
cv2.imwrite(output_folder + "frame%d.jpg" % frame_count, frame)
frame_count += 1
video.release()
cv2.destroyAllWindows()