适合小白的超详细配置YOLOv8教程(毕设必看)(训练自己数据集)(Pycharm保姆级安装教程)(lablme的使用)(GPU版)

目录

1.Pycharm的安装和虚拟环境调用(已经安装好的可以跳过此步骤)

1.1 下载pycharm软件

 1.2 调用已创建虚拟环境(调用上一篇教程中创建好的虚拟环境)

2.标注自己数据集(已有数据集的这部分可跳过)

2.1配置标注软件labelme

 2.2 标注自己数据集

2.3 制作自己数据集

3. 用YOLOv8训练自己数据集

3.1 部署YOLOv8代码

3.2 训练自己数据集

3.3 推理数据集

4. 总结


 

文章主要详细介绍如何标注自己数据集,然后从0开始利用YOLOv8训练自己数据集,推理数据集等,本文的相关torch环境主要基于上一篇文章,如果还没配置torch环境的可以阅读上篇文章配置,希望大家多多点赞关注支持,后期还会继续更新更多相关代码复现和模块替换等内容!!!

上一篇:从零配置torch深度学习环境详细教程

1.Pycharm的安装和虚拟环境调用(已经安装好的可以跳过此步骤)

1.1 下载pycharm软件

大家直接进入pycharm官网下载:Pycharm官网下载

大家进入官网后记得选择和自己相关系统的版本,然后我这边用的是专业版(Professional),专业版前30天是免费的,后续要收费(如果大家是在读学生的话可以申请自己学校的教育邮箱,然后教育邮箱可以免费使用Pycharm专业版),不过社区版也是可以的

压缩包下载好之后,大家下载好之后直接双击运行安装程序即可

下一步

设置好自己的安装路径,然后点击下一步

在这一步的时候,我推荐是把这几个都选中,特别是添加将文件夹打开为项目,本人觉得还是很好用的,都选择完毕后点击下一步

然后继续点击下一步

点击安装,最后成功安装就可以了,安装完成后桌面上就会有pycharm界面了,大家可以先创建一个文件夹(文件夹名称不要带中文),然后将该文件夹在pychram打开

打开后就是以下页面

 1.2 调用已创建虚拟环境(调用上一篇教程中创建好的虚拟环境)

首先,点击右下角的这个环境配置器部分,由于我之前配置过环境,所以显示的是我的环境名称(pidenet_code)大家不用在意,打开自己的就可以

 点击之后,依次打开添加本地解释器

 大家打开之后,依次进行选择现有,conda,然后环境的下拉键,就可以显示出自己所建的虚拟环境,大家选择自己在上一篇教程中建立的虚拟环境,然后点击确定就可以进入所建环境了

选择确认之后,右下角出现自己所选择环境名称后,则表示成功进入虚拟环境(我的虚拟环境名称是torch) 

2.标注自己数据集(已有数据集的这部分可跳过)

2.1配置标注软件labelme

打开anaconda的终端,依次输入以下指令,即可创建一个名为labelme的标注环境

conda create -n labelme python=3.9

然后输入y ,回车

 紧接着输入以下指令激活环境

conda activate labelme

 输出下面这样则表述环境创建并激活成功

然后执行以下指令,安装标注软件

pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple

这个的配置有时候加镜像也会很慢,会容易报错,大家多试几次,直到配置成功就行

出现以下界面就表示配置成功

 然后就在当前界面输入以下指令,然后自动跳转至标注界面

labelme

出现这个界面表明已经打开了标注软件

 2.2 标注自己数据集

紧接着我们开始标注自己的数据集,首先我们点击打开目录,然后将自己存放图片的文件夹打开(最好是路径和文件夹都不要带中文),具体操作步骤如下

选择好自己的图片所在文件夹路径之后点击下面的选择文件夹即可 

 点击之后文件夹内图片就会导入labelme标注软件,然后右下方会显示已导入图片(ps:我的图片是voc数据集里面随便找的两张,用作示例)

接下来大家可以点击上方的编辑,选择创建矩形,然后大家就可以利用这个矩形框对相应目标进行框选标注

 大家框选完自己想标注的目标之后,就可以给目标定义一个名称,然后点击ok即可保存,下面是我标注了人(person)这个目标的示例

 下面是我标注的所有目标,然后右边会显示标注的数量和目标名称,大家标注不同目标的话,只需定义不同目标名称即可

大家标注完之后点击下一张后会出现保存提示界面,一般会把标注的信息默认存在图片所在文件夹,大家也可以自定义保存路径

 点击下一张后会在右下角显示是否已经标注且保存,已保存会有对号,大家可以检查一下,然后第二张的标注和第一张同理,后面的都按照这个方法标注保存即可

将自己数据集全部标注完成之后,会得到以下的内容,分别是图片和与其名称对应的.json标注文件

然后我们需要利用一个转换脚本代码,将这个.json文件转换为yolo格式的.txt文件

首先,我们在第一步的文件夹内右键点击建立一个新的.py格式文件

 自定义好,py文件的名称后回车就可以新建一个名为json_to_txt的py文件

 将以下转换代码粘贴到该文件

import json
import os
from tqdm import tqdmdef convert_label(json_dir, save_dir, classes):json_paths = os.listdir(json_dir)classes = classes.split(',')for json_path in tqdm(json_paths):path = os.path.join(json_dir, json_path)with open(path, 'r') as load_f:json_dict = json.load(load_f)h, w = json_dict['imageHeight'], json_dict['imageWidth']# save txt pathtxt_path = os.path.join(save_dir, json_path.replace('json', 'txt'))txt_file = open(txt_path, 'w')for shape_dict in json_dict['shapes']:label = shape_dict['label']label_index = classes.index(label)points = shape_dict['points']points_nor_list = []for point in points:points_nor_list.append(point[0] / w)points_nor_list.append(point[1] / h)points_nor_list = list(map(lambda x: str(x), points_nor_list))points_nor_str = ' '.join(points_nor_list)label_str = str(label_index) + ' ' + points_nor_str + '\n'txt_file.writelines(label_str)if __name__ == "__main__":json_dir = r'D:\my_dataset\json'   ####将路径替换为你的json文件夹路径save_dir = r'D:\my_dataset\txt'    ####将路径替换为你的txt文件夹保存路径classes = 'person'                 ####这里将自己标注的类别名称填进去,如果有还有其他标注目标,就在person后面加个,然后跟上就行#classes = 'person,others,others2,...'                 ####多个目标示例convert_label(json_dir, save_dir, classes)

然后将最下面的路径根据我的提示进行修改,并且将classes改为自己标注目标的名称即可(ps:json文件夹中只能有.json文件),运行代码后就会在保存路径中生成.txt文件

如果大家在运行时发生了以下报错

那么大家就在anaconda中打开自己的环境,或者打开终端界面,如下所示

 其中()内的就是当前环境名称,大家确认好是自己的虚拟环境名称

 然后输入以下指令回车后,就可以安装缺失的tqdm包

pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple

出现以下界面即表示安装成功 

然后就可以直接运行上面那个代码了,会最终得到自己的txt文件

2.3 制作自己数据集

大家把自己的图片数据和txt数据分别放在两个不同文件夹内进行归类,然后再新建一个py代码,复制粘贴下面这些代码后,在最下面根据我的提示更改路径,然后运行(这个代码的主要功能是对训练集,验证集和测试集按照比例进行随机划分)

import shutil
import random
import os# 检查文件夹是否存在
def mkdir(path):if not os.path.exists(path):os.makedirs(path)def split(image_dir, txt_dir, save_dir):# 创建一级目录train_dir = os.path.join(save_dir, 'train')val_dir = os.path.join(save_dir, 'valid')test_dir = os.path.join(save_dir, 'test')# 创建二级目录train_images_dir = os.path.join(train_dir, 'images')train_labels_dir = os.path.join(train_dir, 'labels')val_images_dir = os.path.join(val_dir, 'images')val_labels_dir = os.path.join(val_dir, 'labels')test_images_dir = os.path.join(test_dir, 'images')test_labels_dir = os.path.join(test_dir, 'labels')# 创建所有需要的文件夹mkdir(train_dir)mkdir(val_dir)mkdir(test_dir)mkdir(train_images_dir)mkdir(train_labels_dir)mkdir(val_images_dir)mkdir(val_labels_dir)mkdir(test_images_dir)mkdir(test_labels_dir)# 数据集划分比例,训练集75%,验证集15%,测试集10%,按需修改train_percent = 0.75val_percent = 0.15test_percent = 0.10total_txt = os.listdir(txt_dir)num_txt = len(total_txt)list_all_txt = range(num_txt)  # 范围 range(0, num)num_train = int(num_txt * train_percent)num_val = int(num_txt * val_percent)num_test = num_txt - num_train - num_valtrain = random.sample(list_all_txt, num_train)# 在全部数据集中取出trainval_test = [i for i in list_all_txt if not i in train]# 再从val_test取出num_val个元素,val_test剩下的元素就是testval = random.sample(val_test, num_val)print("训练集数目:{}, 验证集数目:{},测试集数目:{}".format(len(train), len(val), len(val_test) - len(val)))for i in list_all_txt:name = total_txt[i][:-4]srcImage = os.path.join(image_dir, name + '.jpg')srcLabel = os.path.join(txt_dir, name + '.txt')if i in train:dst_train_Image = os.path.join(train_images_dir, name + '.jpg')dst_train_Label = os.path.join(train_labels_dir, name + '.txt')shutil.copyfile(srcImage, dst_train_Image)shutil.copyfile(srcLabel, dst_train_Label)elif i in val:dst_val_Image = os.path.join(val_images_dir, name + '.jpg')dst_val_Label = os.path.join(val_labels_dir, name + '.txt')shutil.copyfile(srcImage, dst_val_Image)shutil.copyfile(srcLabel, dst_val_Label)else:dst_test_Image = os.path.join(test_images_dir, name + '.jpg')dst_test_Label = os.path.join(test_labels_dir, name + '.txt')shutil.copyfile(srcImage, dst_test_Image)shutil.copyfile(srcLabel, dst_test_Label)if __name__ == '__main__':image_dir = r'D:\my_dataset\image'          ####图片文件夹路径txt_dir = r'D:\my_dataset\txt'              ####txt文件夹路径save_dir = r'D:\my_dataset\dataset'         ####划分后的保存路径split(image_dir, txt_dir, save_dir)

运行代码后,会按照规定文件夹格式对图片和标签进行存放,格式如下

dataset/
├── train/
│   ├── images/
│   └── labels/
├── valid/
│   ├── images/
│   └── labels/
└── test/├── images/└── labels/

3. 用YOLOv8训练自己数据集

3.1 部署YOLOv8代码

大家可以去YOLOv8的官网去下载代码包(尽量利用我的链接下载,我在链接中已经选好版本了,最新版本也可以用,但是有可能会因为python版本报错)

yolov8官方下载链接

大家打不开官网的也可以用百度网盘链接下载

yolov8网盘下载链接     提取码:x8yj

进入链接后,依次点击code和下载安装包进行下载

下载好之后解压,然后将解压文件在pycharm中打开,打开后是这样

打开后继续新建一个训练的.py文件脚本,以后大家就可以利用这个脚本去训练

from ultralytics import YOLO# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML# 断点续训
#Load a model
#model =#YOLO(r'E:\anzhi\car\3\ultralytics-8.2.82\runs\detect\train27\weights\last.pt')  # load a partially trained modelif __name__ == '__main__':#results = model.train(data=r'E:\anzhi\car\ultralytics\my.yaml', batch=80, epochs=10000, imgsz=640, resume=True,#workers=8, device=0)results = model.train(data=r'E:\anzhi\car\3\ultralytics-8.2.82\train.yaml',batch=40,close_mosaic=0,epochs=1000,imgsz=640,resume=True,workers=8,device=1)

然后大家将右下角的环境切换到之前配置的有torch包的环境

打开项目的终端,在终端输入以下命令配置yolov8所需包(一定要确定是在该环境内)

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

这个里面需要配置的包有点多,大家一定要确定完全配置好了再进行下一步,出现以下界面表示配置成功

3.2 训练自己数据集

大家依次点击ultralytics---cfg--datasets--voc.yaml,

 

打开之后是以下页面

我们接下来我们将其中的内容全部替换为以下内容,其中,上面三个都替换为之间建好数据集的训练、验证和测试集的路径,然后names下面将自己标注的目标个数和名称进行替换,如果只有一个目标那就只留下0,有多的就自己加上,切记,目标的名称也得修改(我这个是从voc数据集中截取了一部分,所有就有这些类别)

train: D:\my_dataset\voc\train  # train images (relative to 'path') 128 images
val: D:\my_dataset\voc\valid  # val images (relative to 'path') 128 images
test: D:\my_dataset\voc\test# Classes
names:0: person1: dog2: cow3: horse4: sheep

然后在上面找到该yaml文件右键复制该文件绝对路径

点击这个绝对路径就可以直接复制成功

 复制成功后将该路径粘贴到我们之间创建的tain.py脚本中,就是以下位置

大家后面的指令可以先修改成我这样,这里面的batch表示批次数,epochs表示训练的轮次,resume表示是否打开中断续训,workers表示线程数,大家先按照我这个设置,等能跑起来没问题之后再自己调参数训练

batch=-1,epochs=10,imgsz=640,resume=True,workers=8

 全部修改完成后,在该页面右键直接运行这个python文件即可

出现下面页面表示配置成功,已经开始调用gpu训练了

 已经开始调用GPU了,速度还是比较快的(然后可以看到,我的训练集共有5527张,验证集有3409张,GPU显卡调用了5.3g)

紧接着大家耐心等待一段时间,等训练完成后会出现以下界面

 然后最下面是相关结果的保存路径,打开自己的yolov8文件夹,然后按照对应路径打开就行,最终结果如下

这个里面就是所有的训练结果了

3.3 推理数据集

咱们在训练结果的文件夹中,找到weights文件夹,然后将其中的best.pt的路径进行复制(包括文件名称和后缀)

然后创建一个prediction的推理脚本,并将以下内容复制进去,然后将相应的路径进行修改,运行该脚本

from ultralytics import YOLOif __name__ == '__main__':# 使用训练好的权重文件加载模型model = YOLO(r'D:\Desktop\yolo\ultralytics-8.2.82\runs\detect\train3\weights\best.pt') #替换为自己训练好的best.pt文件的绝对路径# 推理参数设置results = model.predict(save=True, source=r'D:\my_dataset\voc\valid\images\2008_000026.jpg')# 推理的图片存放路径

得到以下的推理输出

这个是推理结果的保存地址,我们进入地址查看推理结果 

可以看出,由于训练的次数比较少,因此存在了一个错误预测,不过由于右上角置信度比较低,所以还算不错(哈哈哈哈,毕竟只训练了10轮) 

4. 总结

本篇文章从最基础的标注数据集开始教学,直到最终成功调用GPU训练本人标注数据集,整个过程超级详细,基本都可以成功复现,同时也希望能对大家有所启发。

博主后续将还会更新更多的与YOLO相关的一些复现和yolov8的模块替换和改进,希望大家继续关注博主!!!创作不易,希望大家多多关注点赞!!!

 

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

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

相关文章

EC800X QuecDuino开发板介绍

支持的模组列表 EG800KEC800MEC800GEC800E 功能列表 基本概述 EC800X QuecDuino EVB 搭载移远 EC800 系列模组。支持模组型号为: EC800M 系列、EC800K 系列、EG800K 系列、EC800E 系列等。 渲染图 开发板的主要组件、接口布局见下图 资料下载 EC800X-QuecDui…

Unity + HybirdCLR热更新 入门篇

官方文档 HybridCLR | HybridCLRhttps://hybridclr.doc.code-philosophy.com/docs/intro 什么是HybirdCLR? HybridCLR(原名 huatuo)是一个专为 Unity 项目设计的C#热更新解决方案,它通过扩展 IL2CPP 运行时,使其支持动态加载和…

类 Excel 数据填报

类 Excel 填报模式,满足用户 Excel 使用习惯 数据填报,可作为独立的功能模块,用于管理业务流程、汇总采集数据,以及开发各类数据报送系统,因此,对于报表工具而言,其典型场景之一就是利用报表模…

MySQL 8.0 OCP 英文题库解析(十)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题81~90 试题81:…

JavaScript 性能优化实战:从原理到框架的全栈优化指南

在 Web 应用复杂度指数级增长的今天,JavaScript 性能优化已成为衡量前端工程质量的核心指标。本文将结合现代浏览器引擎特性与一线大厂实践经验,构建从基础原理到框架定制的完整优化体系,助你打造高性能 Web 应用。 一、性能优化基础&#x…

基于Web的分布式图集管理系统架构设计与实践

引言:为什么需要分布式图集管理? 在现代Web图形应用中,纹理图集(Texture Atlas)技术是优化渲染性能的关键手段。传统的图集制作流程通常需要美术人员使用专业工具(如TexturePacker)离线制作&am…

鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp

在UniApp中集成Three.js:打造跨平台3D可视化应用 引言 在最近的一个项目中,我们需要在UniApp应用中展示3D模型,并实现实时交互功能。经过技术选型和实践,我们选择了Three.js作为3D渲染引擎。本文将分享我们在UniApp中集成Three.…

Flask中关于app.url_map属性的用法

目录 一、app.url_map 是什么? 二、可以查看哪些信息? 三、示例:打印所有路由 四、结合 url_for() 使用 五、常见用途场景 六、结合 Flask CLI 使用 总结 app.url_map 是 Flask 中非常重要的一个属性,用于查看或操作整个应用的 URL 路由映射表(routing map)。它展…

SpringBoot项目搭建指南

SpringBoot项目搭建指南 文章目录 SpringBoot项目搭建指南一、SpringBoot项目搭建1.1 SpringBoot 版本选择1.2 SpringBoot 框架引入方式1.2.1 继承 Starter Parent POM1.2.2 不使用 Parent POM 来使用 Spring Boot 1.3 SpringBoot 打包插件 二、日志框架引入2.1 引入SpringBoot…

数据库系统概论(十六)数据库安全性(安全标准,控制,视图机制,审计与数据加密)

数据库系统概论(十六)数据库安全性 前言一、数据库安全性1. 什么是数据库安全性?2. 为何会存在安全问题? 二、安全标准的发展1. 早期的“开拓者”:TCSEC标准2. 走向国际统一:CC标准3. TCSEC和CC标准有什么不…

Jvm 元空间大小分配原则

JVM元空间(Metaspace)的大小分配原则与系统物理内存密切相关,但并不是直接等比例分配,而是通过一系列参数和JVM的动态管理机制来确定。下面从原理和实际行为两方面详细说明: 1. 元空间(Metaspace&#xff0…

编程之巅:语言的较量

第一章:代码之城的召集令 在遥远的数字大陆上,有一座名为“代码之城”的神秘都市。这里居住着各种编程语言的化身,他们以拟人化的形态生活,每种语言都有独特的性格与技能。Python是个优雅的学者,C是个硬核战士&#x…

飞牛fnNAS装机之迷你小主机的利旧

前几天找Console线的时候,翻出一台迷你小主机,想起来以前是做“软路由”用的,现在用不上了。本想放回箱子,但突然想起最近正在做飞牛NAS的专题,不如将其改造成NAS得了。 这个东东有HDMI、VGA接口,2个USB(其中一个支持3.0),还有4个网口。 打开机盖,看看内部情况。发现…

uv:一个现代化的 Python 依赖管理工具

在 Python 的生态系统中,依赖管理和 Python 版本管理一直是开发者关注的核心问题。传统的工具如 pip、poetry 和 pyenv 虽然功能强大,但在性能和使用体验上仍有改进空间。uv 是由 Python 核心开发者开发的 现代化依赖管理工具,旨在提供更快、…

ubuntu 22.04安装k8s高可用集群

文章目录 1.环境准备(所有节点)1.1 关闭无用服务1.2 环境和网络1.3 apt源1.4 系统优化1.5 安装nfs客户端 2. 装containerd(所有节点)3. master的高可用方案(master上操作)3.1 安装以及配置haproxy&#xff…

PnP(Perspective-n-Point)算法 | 用于求解已知n个3D点及其对应2D投影点的相机位姿

什么是PnP算法? PnP 全称是 Perspective-n-Point,中文叫“n点透视问题”。它的目标是: 已知一些空间中已知3D点的位置(世界坐标)和它们对应的2D图像像素坐标,求解摄像机的姿态(位置和平移&…

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象 键值对QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…

解决各个系统报错TDengine:no taos in java.library.path问题

windows 系统解决办法 在本地上安装一个TD的Windows客户端&#xff0c;注意安装的客户端版本一定要和服务端TD版本完全一致。&#xff08;或者将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下&#xff09; 客户端各个历史版本下载链接&#xff1a;TDengin…

我提出结构学习的思路,意图用结构学习代替机器学习

我提出结构学习的思路&#xff0c;意图用结构学习代替机器学习 1.机器学习的本质和缺点 机器学习的规律是设计算法、用数据训练算法、让算法学会产生正确的数据回答问题&#xff0c;其缺点在于&#xff0c;需要大规模训练数据和巨大算力还其次&#xff0c;机器学习不能产生智…

【Hive 运维实战】一键管理 Hive 服务:Metastore 与 HiveServer2 控制脚本开发与实践

一、引言 在大数据开发中&#xff0c;Hive 作为重要的数据仓库工具&#xff0c;其核心服务metastore&#xff08;元数据服务&#xff09;和hiveserver2&#xff08;查询服务&#xff09;的启停管理是日常运维的基础操作。手动执行命令启停服务不仅效率低下&#xff0c;还容易因…