YOLOv8制作自定义数据集并训练
- 前言
- 一、制作自定义数据集
- 1、建立相应文件夹
- 2、下载图片
- 3、为图片打标签
- (1)安装labelimg
- (2)打开labelimg
- (3)标记图片
- 二、按比例移动自定义数据集中的内容
- 三、建立数据集测试、训练、验证的的文件夹
- 四、在文件夹中添加yaml文件
- 1、下载yolov8项目
- 2、添加模型配置文件
- 3、添加数据集配置文件
- 五、训练、验证数据集
- 代码注释
- 1、model
- 1、data
- 2、epochs
- 3、workers
前言
本文中的数据集以制作一个鼠标和手机的自定义为例,大家在制作自定义数据集时方法类似。
一、制作自定义数据集
1、建立相应文件夹
在桌面建立一个YOLO_phonemouse(该名字自定义,自由设置即可),点击打开,在其中新建两个文件夹分别命名为images和labels,再新建一个文本文件命名为classes,里面写上需要标记的类的名称,博主要标记手机和鼠标,所以在里面写上phone、mouse
YOLO_phonemouse的目录结构如下所示:
YOLO_phonemouse
├─ images
├─ labels
├─ classes.txt
2、下载图片
在网络上下载关于鼠标和手机的照片,下载的照片放在YOLO_phonemouse的images文件夹中
注:下载的时候要把下载名称的后缀都改为.jpg
3、为图片打标签
(1)安装labelimg
用快捷键:win+r,输入cmd,进入cmd命令行控制台。输入如下的命令:
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
(2)打开labelimg
用快捷键:win+r,输入cmd,进入cmd命令行控制台。输入如下命令:
cd "C:\Users\86139\Desktop\YOLO_phonemouse" //这里的路径根据自己文件夹所在的位置进行修改
输入以下命令:
labelimg images classes.txt
指打开labelimg工具,打开imagines文件夹,初始化classes.txt里面定义的类。
(3)标记图片
打开labelimg后,labelimg中的一些设置、标注方法和快捷键可以参考以下文章的3.2之后的部分:
目标检测—利用labelimg制作自己的深度学习目标检测数据集
标注完成后,打开labels文件夹,可以看到里面都是txt文件。
到这里,自定义的数据集就制作好了。
二、按比例移动自定义数据集中的内容
在pycharm中运行以下代码即可,需要根据自己的情况修改相应文件的路径。
# -*- coding: gbk -*-
import os
import random
import shutil
from tqdm import tqdm
# 数据集images 文件夹路径
image_dir = "C:/Users/86139/Desktop/YOLO_phonemouse/images"
# 数据集labels 文件夹路径
label_dir = "C:/Users/86139/Desktop/YOLO_phonemouse/labels"
# 创建一个空列表来存储有效图片的路径
valid_images = []
# 创建一个空列表来存储有效 label 的路径
valid_labels = []
# 遍历 images 文件夹下的所有图片
for image_name in os.listdir(image_dir):
# 获取图片的完整路径
image_path = os.path.join(image_dir, image_name)
# 获取图片文件的扩展名
ext = os.path.splitext(image_name)[-1]
# 根据扩展名替换成对应的 label 文件名
label_name = image_name.replace(ext, ".txt")
# 获取对应 label 的完整路径
label_path = os.path.join(label_dir, label_name)
# 判断 label 是否存在
if not os.path.exists(label_path):
# 删除图片
os.remove(image_path)
print("Deleted:", image_path)
else:
# 将图片路径添加到列表中
valid_images.append(image_path)
# 将 label 路径添加到列表中
valid_labels.append(label_path)
# 遍历每个有效图片路径
for i in tqdm(range(len(valid_images))):
image_path = valid_images[i]
label_path = valid_labels[i]
# 随机生成一个概率
r = random.random()
# 判断图片应该移动到哪个文件夹
# train:valid:test = 7:2:1
if r < 0.1:
# 移动到 test 文件夹
destination = "E:/Robot/YOLO/datasets/phoneandmouse/test"
elif r < 0.2:
# 移动到 valid 文件夹
destination = "E:/Robot/YOLO/datasets/phoneandmouse/valid"
else:
# 移动到 train 文件夹
destination = "E:/Robot/YOLO/datasets/phoneandmouse/train"
# 创建目标文件夹中 images 和 labels 子文件夹
os.makedirs(os.path.join(destination, "images"), exist_ok=True)
os.makedirs(os.path.join(destination, "labels"), exist_ok=True)
# 生成目标文件夹中图片的新路径
image_destination_path = os.path.join(destination, "images", os.path.basename(image_path))
# 移动图片到目标文件夹
shutil.move(image_path, image_destination_path)
# 生成目标文件夹中 label 的新路径
label_destination_path = os.path.join(destination, "labels", os.path.basename(label_path))
# 移动 label 到目标文件夹
shutil.move(label_path, label_destination_path)
# 输出有效图片路径列表
print("Valid images:", valid_images)
# 输出有效 label 路径列表
print("Valid labels:", valid_labels)
三、建立数据集测试、训练、验证的的文件夹
在所在的项目的文件中新建一个文件夹名称为datasets,点击进入datasets文件夹,在datasets中新建一个文件夹,名称自定义,这个文件夹即为自己制作的一个数据集,博主要制作一个鼠标和手机的数据集,这里就命名为phoneandmouse了,打开这个文件夹,在其中再新建3个文件夹如下图所示
再在每个文件夹中再新建两个文件夹,datasets的目录结构如下所示:
datasets
├─ phoneandmouse
│ ├─ test
│ │ ├─ images
│ │ ├─ labels
│ ├─ train
│ │ ├─ images
│ │ ├─ labels
│ ├─ valid
│ │ ├─ images
│ │ ├─ labels
四、在文件夹中添加yaml文件
1、下载yolov8项目
注:如果使用的模型是yolov8官方给的模型执行这一步,如果用的自己的模型不用执行这一步
具体方法可以参考以下文章中的第一点内容:
YOLOv8推理使用(指令讲解+报错解决方法)
下载好之后在pycharm中打开该项目
2、添加模型配置文件
博主以使用yolov8n模型为例
先找到yolov8模型所在的文件夹,博主的路径为ultralytics/cfg/models/v8
在该文件夹下找到使用的模型(博主使用的yolov8n模型包含在yolov8中,所以找到yolov8.yaml即可),将选择使用的模型的yaml文件复制粘贴到datasets文件夹下
3、添加数据集配置文件
在phoneandmouse中新建一个data.yaml文件,打开后将以下内容复制进去并根据注释内容进行相应的修改,一般只要修改path、nc、names
train: E:/Robot/YOLO/datasets/phoneandmouse/train/images #修改成train中images的绝对路径
val: E:/Robot/YOLO/datasets/phoneandmouse/valid/images #修改成valid中images的绝对路径
test: E:/Robot/YOLO/datasets/phoneandmouse/test/images #修改成test中images的绝对路径
nc: 2 #类的数目
names: #每个类对应的名称
0: phone
1: mouse
注:配置文件中所有的冒号:后面都必须要有一个空格,注意是所有冒号,只要有冒号,后面就必须要有一个空格,否则在后面训练的时候会报错,path、train、valid后面必须是绝对路径
五、训练、验证数据集
在pycharm新建一个python,输入以下代码:
# -*- coding: utf-8 -*-
from ultralytics import YOLO
import torch
if __name__ == '__main__':
# 加载预训练模型,在该模型基础上,训练目标检测的模型
model=YOLO('yolov8n.pt')
#训练自定义数据集,数据配置保存在data.yaml中
model.train(data='datasets/phoneandmouse/data.yaml',epochs=500,batch=2,workers=0)
#使用验证集验证效果
model.val()
代码注释
1、model
model=YOLO(‘填写预训练模型的相对路径’)
1、data
data=后面要修改成data.yaml的相对路径
2、epochs
指训练的轮数
3、workers
根据电脑的算力进行设置,不设置默认为8