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,一经查实,立即删除!

相关文章

考虑分库分表的时机与问题

考虑分库分表的时机与问题 什么时候考虑分库分表&#xff1f; 在以下情况下&#xff0c;考虑分库分表可能是一个不错的选择&#xff1a; 数据量大&#xff1a;单一数据库已经无法满足数据存储和查询的需求&#xff0c;数据量巨大导致性能下降。并发量高&#xff1a;单一数据…

vue3-生产部署-性能优化

生产部署 开发环境 vs. 生产环境 在开发过程中&#xff0c;Vue 提供了许多功能来提升开发体验&#xff1a; 对常见错误和隐患的警告 对组件 props / 自定义事件的校验 响应性调试钩子 开发工具集成 然而&#xff0c;这些功能在生产环境中并不会被使用&#xff0c;一些警…

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

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

Unity3D 游戏开发中如何判断几何形状的位置关系详解

前言 在Unity3D游戏开发中&#xff0c;经常需要判断不同几何形状之间的位置关系&#xff0c;以便进行碰撞检测、物体运动和触发事件等操作。本文将详细介绍几种常见的几何形状位置关系判断方法&#xff0c;并给出相应的技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开…

对链表使用插入排序的C语言实现示例

#include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 struct ListNode {int val;struct ListNode *next; };// 插入排序函数 struct ListNode* insertionSortList(struct ListNode* head) {if (head NULL || head->next NULL) {return head;}struct…

【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理

文章目录 01 基本概念02 工作原理03 优势与劣势04 核心组件05 Watermark 生成器 使用06 应用场景07 注意事项08 案例分析8.1 窗口统计数据不准8.2 水印是如何解决延迟与乱序问题&#xff1f;8.3 详细分析 09 项目实战demo9.1 pom依赖9.2 log4j2.properties配置9.3 Watermark水印…

机器学习入门--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;积木编程最重要的是积木如何搭建…

基于Python的爬取天气数据及可视化分析

项目查看&#xff1a;基于Python的爬取天气数据及可视化分析 摘 要 天气数据视化系统是一种能自动从网络上收集水情信息分析的工具&#xff0c;可根据用户的需求定向采集特定天气数据信息来作可视化分析&#xff0c;自动在网络上获取网页源码。对于天气数据视化系统信息数量较…

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

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

Shell:终端输入一个字符,判断是大写字母小写字母还是数字字符。

#!/bin/bash # 获取用户输入 read char case $char in [[:upper:]]) echo 大写 ;; [[:lower:]]) echo 小写 ;; [1-9]) echo 数字 ;; esac

使用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…

Docker安装和使用Redis

Docker安装和使用Redis 一、拉取 Redis 镜像二、根据镜像运行容器三、配置 Redis 密码1、进入 redis 容器内部2、使用 redis 命令行设置密码 一、拉取 Redis 镜像 docker pull redis二、根据镜像运行容器 docker run \ --name redis \-p 6379:6379 \-d \redis \redis-server …

Object

Object类的作用 Object类是Java中所有类的父类&#xff0c;所以&#xff0c;Java中所有类的对象都可以直接使用Object类中提供的一些方法 Object类的常见方法 方法名说明public String toString()返回对象的字符串表示形式public boolean equals(Object o)判断两个对象…