YOLOv8制作自定义数据集并训练

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:1if 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: phone1: mouse

注:配置文件中所有的冒号:后面都必须要有一个空格,注意是所有冒号,只要有冒号,后面就必须要有一个空格,否则在后面训练的时候会报错,path、train、valid后面必须是绝对路径

五、训练、验证数据集

在pycharm新建一个python,输入以下代码:

# -*- coding: utf-8 -*-
from ultralytics import YOLO
import torchif __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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主…

机器学习入门--LSTM原理与实践

LSTM模型 长短期记忆网络&#xff08;Long Short-Term Memory&#xff0c;LSTM&#xff09;是一种常用的循环神经网络&#xff08;RNN&#xff09;变体&#xff0c;特别擅长处理长序列数据和捕捉长期依赖关系。本文将介绍LSTM模型的数学原理、代码实现和实验结果&#xff0c;并…

OpenCV库及在ROS中使用

OpenCV库及在ROS中使用 依赖 cv_bridge image_transport roscpp rospy sensor_msgs std_msgsCMakeLists.txt添加 find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(pub_img_topic ${catkin_LIBRARIES} ${Opencv_LIBS}) C …

基于springboot大学生租房系统源码和论文

伴随着全球信息化发展&#xff0c;行行业业都与计算机技术相衔接&#xff0c;计算机技术普遍运用于各大行业&#xff0c;大学生租房系统便是其中一种。实施计算机系统来管理可以降低大学生租房管理的成本&#xff0c;使整个大学生租房的发展和服务水平有显著提升。 本论文主要面…

Github Copilot是什么?Ai高效编程!一键远程授权…

GitHub Copilot是一款Ai编程插件&#xff0c;由OpenAi和Github联合推出&#xff0c;目前支持主流的IDE编辑器安装使用&#xff0c;包括JetBrains IDEs、VSCode、Visual Studio、Neovim等。 官方地址&#xff1a;https://github.com/features/copilot 官方文档&#xff1a;http…

VBA即用型代码手册之取消隐藏工作表及删除工作表

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

【maya 入门笔记】基本视图和拓扑

1. 界面布局 先看基本窗口布局&#xff0c;基本窗口情况如下&#xff1a; 就基本窗口布局的情况来看&#xff0c;某种意义上跟blender更像一点&#xff08;与3ds max相比&#xff09;。 那么有朋友就说了&#xff0c;玛格基&#xff0c;那blender最下面的时间轴哪里去了&…

使用PaddleNLP UIE模型提取上市公司PDF公告关键信息

项目地址&#xff1a;使用PaddleNLP UIE模型抽取PDF版上市公司公告 - 飞桨AI Studio星河社区 (baidu.com) 背景介绍 本项目将演示如何通过PDFPlumber库和PaddleNLP UIE模型&#xff0c;抽取公告中的相关信息。本次任务的PDF内容是破产清算的相关公告&#xff0c;目标是获取受理…

pubg开启之路

概要&#xff1a; pubg中文名绝地求生&#xff0c;一款免费游戏&#xff0c;本篇主要讲述如何在电脑上开始pubg 要想下载并开始玩pubg有两个方法(具体就是两个软件)&#xff0c;一个是epic games&#xff0c;另一个是steam 一、加速器是必要的吗&#xff1f; 1、不使用加速…

Pandas数据库大揭秘:read_sql、to_sql 参数详解与实战篇【第81篇—Pandas数据库】

Pandas数据库大揭秘&#xff1a;read_sql、to_sql 参数详解与实战篇 Pandas是Python中一流的数据处理库&#xff0c;而数据库则是数据存储和管理的核心。将两者结合使用&#xff0c;可以方便地实现数据的导入、导出和分析。本文将深入探讨Pandas中用于与数据库交互的两个关键方…

代码随想录 Leetcode135. 分发糖果

题目&#xff1a; 代码(首刷看解析 2024年2月15日&#xff09;&#xff1a; class Solution { public:int candy(vector<int>& ratings) {vector<int> left(ratings.size(), 1);vector<int> right(ratings.size(), 1);for (int i 1; i < ratings.si…

半导体物理基础-笔记

源内容参考&#xff1a;https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 半导体物理要解决的四个问题 载流子在哪里&#xff1b;如何获得足够多的载流子&#xff1b;载流子如何运动…

html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】

css3新特性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

linux kernel 内存踩踏之KASAN_SW_TAGS(二)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 上一篇简单介绍了标准版本的KASAN使用方法和实现&#xff0c;这里将介绍KASAN_SW_TAGS和KASAN_HW_TAGS 的使用和背后基本原理&#xff0c;下图是三种方式的对比&#x…

萨科微半导体宋仕强介绍说

萨科微半导体宋仕强介绍说&#xff0c;电源管理芯片是指在电子设备系统中&#xff0c;负责对电能的变换、分配、检测等进行管理的芯片&#xff0c;其性能和可靠性直接影响电子设备的工作效率和使用寿命&#xff0c;是电子设备中的关键器件。萨科微slkor&#xff08;www.slkormi…

2023年中国数据智能管理峰会(DAMS上海站2023):核心内容与学习收获(附大会核心PPT下载)

随着数字经济的飞速发展&#xff0c;数据已经渗透到现代社会的每一个角落&#xff0c;成为驱动企业创新、提升治理能力、促进经济发展的关键要素。在这样的背景下&#xff0c;2023年中国数据智能管理峰会&#xff08;DAMS上海站2023&#xff09;应运而生&#xff0c;汇聚了众多…

1.逆向基础

文章目录 一、前言二、什么是逆向&#xff1f;三、软件逆向四、逆向分析技术五、文本字符六、Windows系统1.Win API2.WOW643.Windows消息机制4.虚拟内存 一、前言 原文以及后续文章可点击查看&#xff1a;逆向基础 逆向真的是一个很宏大的话题&#xff0c;而且大多数都是相当…

数据预处理 —— AI算法初识

一、预处理原因 AI算法对数据进行预处理的原因主要基于以下几个核心要点&#xff1a; 1. **数据清洗**&#xff1a; - 数据通常包含缺失值、异常值或错误记录&#xff0c;这些都会干扰模型训练和预测准确性。通过预处理可以识别并填充/删除这些不完整或有问题的数据。 2. **数…

LabVIEW智能监测系统

LabVIEW智能监测系统 设计与实现一个基于LabVIEW的智能监测系统&#xff0c;通过高效的数据采集和处理能力&#xff0c;提高监测精度和响应速度。系统通过集成传感器技术与虚拟仪器软件&#xff0c;实现对环境参数的实时监测与分析&#xff0c;进而优化监控过程&#xff0c;提…

如何实现Vuex数据持久化

Vuex是一个非常流行的状态管理工具&#xff0c;它可以帮助我们在Vue.js应用中管理和共享数据。然而&#xff0c;当应用重新加载或刷新时&#xff0c;Vuex的状态会被重置&#xff0c;这就导致了数据的丢失。那么&#xff0c;如何才能实现Vuex的数据持久化呢&#xff1f;让我们一…