Yolov8训练自己的数据集(脱离ultralytics库)

news2024/12/25 9:12:29

最近在整理关于yolov8的相关内容,有个很大的问题,抛开yolov8性能不谈,yolov8代码的使用灵活性不如yolov5,尤其是对于一些新手或者对yolo框架不是很熟悉的人(这也是因人而异,有些人可能会喜欢v8代码的使用方式)。比如在使用v8的时候需要安装ultralytics库,然后再调用YOLO进行训练或者预测,那么就有这几个问题:

问题1:安装了ultralytics库后如何使用YOLO呢?

针对该问题,就需要我们不断的查看v8提供的各类doc说明文档,很不便利,比如训练和检测应该传入哪些参数,有些人也不知道去哪查看。

问题2:如果希望像v5一样修改网络或者修改其他代码怎么办?

因为是安装的ultralytics库,直接在源代码中修改显然是不方便的。

为了解决诸多代码上使用的不利因素,本文旨在脱离ultralytics库实现yolov8,使其能够更加的方便使用。


参照yolov5的传入参数形式,我对训练和检测代码进行了实现(部分功能还不是那么完整,后期会慢慢的完善)

代码准备

git clone https://github.com/YINYIPENG-EN/YOLOV8.git

clone代码到本地

环境说明

torch==1.10.0+cu102

torchvision==0.11.0+cu102

numpy==1.22.4

训练自己的数据集

数据集准备

我这里的数据集是只有一个类,数据集名称叫target(根据自己的数据集自己命名),然后我把我的数据集放在了cfg/datasets文件下。目录形式如下:

其中Annotations存储的是xml形式的标签文件images存储的所有的图像labels存储的是将xml转为txt的标签文件(也是我们需要用的)。

$ tree
|-- Annotations
|-- images
|-- labels

然后我们需要将images和labels划分成训练集和验证集。

修改split_dataset.py中的datasets_path路径,运行划分数据集脚本代码:

python split_dataset.py

划分完成后会在cfg/datasets/your_Datasets/下生成train和val两个文件夹,同时各包含images和labels子文件。

新建yaml文件

在cfg/datasets/下新建一个mydata.yaml文件,由于我这里只有一个类,而且类的name为"target",因此配置文件内容如下:(这里建议填写绝对路径,否则可能会出现问题)

path: F:/YOLOV8/cfg/datasets/target
train: F:/YOLOV8/cfg/datasets/target/train/images
val: F:/YOLOV8/cfg/datasets/target/val/images
test: #
 
# number of classes
nc: 1
 
# class names
names:
  0: target

训练

训练代码在train.py中,这里传入的参数是模仿yolov5的同时并结合yolov8需要的参数实现的。

快速开启训练:

python train.py --weights yolov8s.pt --epochs 100 --bs 64 
Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
        1/5     0.669G      1.297      3.061      1.504          7        640: 100%|██████████| 54/54 [00:29<00:00,  1.80it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 3/3 [00:00<00:00,  3.87it/s]
                   all         12         24      0.698      0.583      0.665       0.38

也可以与其他训练参数搭配使用,这里介绍几个常用的参数:

--weights:预权重路径

--model:加载的yolov8类型,默认为yolov8s.yaml

--epochs:训练的epochs数量,默认100

--device:cuda训练

--cache:开启缓存,默认是开启的

--bs:batch size大小

--optimizer:优化器类型

--resume:继续训练

--freeze:冻结训练

 

其中一个训练batch可视化

检测

检测代码在detect.py中,快速开启检测

python detect.py --weights yolov8s.pt --source assets --show --save

检测效果如下:

 

也可以与其他参数搭配使用,介绍几种常用参数:

--weights:权重路径

--source:source路径,可以是图像、视频、文件夹

--visualize:特征可视化

--classes:仅检测特定的类别

--show:显示检测结果

--save:保存检测结果

--save_frames:如果是视频检测,开启后可以把每帧进行保存

--save_crop:开启后,可以把目标从背景中截出来并保存

 例如特征可视化:

python detect.py --source bus.jpg --visualize --save

 

 

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

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

相关文章

牛客网刷题 | BC94 反向输出一个四位数

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 将一个四位数&…

1.int 与 Integer 的简单区别

蓝桥杯刷题从此开始&#xff1a; 第一题就是两个数的和&#xff0c;个人看来主要考察 int与integer 的区别&#xff1b; 这是我提交的答案&#xff0c;竟然会报错&#xff1a; import java.util.*; //输入A、B&#xff0c;输出AB。 class add {public static void main(String …

MT7628原厂Uboot修改交互串口

工作中&#xff0c;遇到用户用Skylab的SKW92A模组&#xff0c;在参考设计时&#xff0c;将UART接口预留错的情况&#xff0c;对于这种情况&#xff0c;需要将原厂SDK默认的交互串口UART0&#xff0c;改为UART1。在开发过程中&#xff0c;经常需要在Uboot阶段升级固件&#xff0…

5.25机器人基础-空间描述和变换1

参考资料&#xff1a;《机器人学导论》John.J.Craig 彻底搞懂“旋转矩阵/欧拉角/四元数”&#xff0c;让你体会三维旋转之美_欧拉角判断动作-CSDN博客 机器人操作的定义是指通过某种机构使零件和工具在空间运动。因此&#xff0c;对于坐标系的定义显得尤为重要&#xff0c;相…

【docker】Docker的基本指令和HTML/PYTHON/C++的简单创建示例

目录 &#x1f30a;1. 什么是 Docker&#xff1f; &#x1f30a;2. Docker 安装 &#x1f30a;3. Docker基本指令 &#x1f30a;4. Docker 创建示例【联网情况】 &#x1f30d;4.1 示例&#xff1a;HTML &#x1f30d;4.2 示例&#xff1a;Python 脚本 &#x1f30d;4.3…

log4j2远程代码执行

漏洞复现 漏洞复现2 这个框架不是web框架了&#xff0c;不是服务器web网站框架了&#xff0c;是java日志框架&#xff0c;就是记录日志信息&#xff0c;每一个程序都有一个日志文件&#xff0c;这个就是java里面记录日志的一个框架&#xff0c;它存在的点也是日志框架那几个代…

Python语法(全)

前言&#xff1a; 下面是Python基本的语法&#xff0c;大家耐心观看&#xff01; 1.基础语法 1.1字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面 1.2字符串 字符串&#xff08;string&#xff09;&#xff0c;又称文本&#xff…

防火墙——域网络、专用网络、公用网络

在防火墙设置中&#xff0c;域网络、专用网络和公用网络是指计算机连接到网络时所处的不同环境。每种环境都有不同的安全级别和配置。 1、域网络&#xff08;宽松&#xff09; 域网络是指计算机加入了一个Windows域&#xff08;Domain&#xff09;环境&#xff0c;这通常在企业…

v-rep---script-function

作用&#xff0c;实现&#xff0c;参数讲解。 script-function标签 作用 问题&#xff1a;如何在插件的接口中调用lua脚本中定义的函数&#xff1f; 用于声明一个函数&#xff0c;这个函数的作用是通过v-rep提供的接口sim::callScriptFunctionEx()调用脚本的函数&#xff0…

用AI比赛助手降维打击数学建模,比赛过程详细介绍,这保研不就稳了吗

数学建模是个小众的赛道&#xff0c;可能很多大学生不知道&#xff0c;简单来说&#xff1a;他能薅学分、保研加分、毕业好找工作(简历上写一辈子)&#xff0c;尤其是基于GPT-4o模型&#xff0c;简直对他们是降维打击。 数学建模每年的比赛非常多&#xff0c;像国赛、美赛、深…

直流电机的基本原理与结构

一些基本定理 磁感应强度&#xff08;又称磁通密度&#xff09;B —— 表征磁场强弱及方向的物理量。单位&#xff1a;T 右手定则&#xff1a;伸开右手&#xff0c;使拇指与其余四个手指垂直&#xff0c;并且都与手掌在同一平面内&#xff1b;让磁感线从手心进入&#xff0c;…

软件设计师基础知识难点总结

软件设计师基础知识难点 I/O设备管理软件一般分为4个层次&#xff0c;如下图所示。 用户进程与设备无关的系统软件设备驱动程序中断处理程序硬件 直接查询控制 分为有无条件传送和程序查询方式&#xff0c;都需要通过CPU执行程序来查询外设的状态&#xff0c;判断外设是否准备好…

牛客热题:有效括号

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;有效括号题目链接方法一&#x…

数据结构--二叉搜索树

目录 二叉搜索树的概念 二叉树的实现 结点类 函数接口总览 实现二叉树 二叉搜索树的应用 K模型 KV模型 二叉搜索树的性能分析 二叉搜索树的概念 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;其具有以下几…

CSP俄罗斯方块(简单易懂)

开始将题目理解成了&#xff0c;开始的列应该是从输入图案的最左端开始计算&#xff0c;将前面所有的空列都删掉&#xff0c;代码如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

【yolov10】使用自己的数据集训练目标检测模型

【yolov10】使用自己的数据集训练目标检测模型 一、anaconda安装二、环境配置三、数据集制作1、labelimg的安装2、使用labelimg 四、正片1、下载yolov10源码2、数据集目录3、训练4、推理 一、anaconda安装 直接参考前一篇博客&#xff1a; https://blog.csdn.net/m0_71523511/…

八国多语言微盘微交易所系统源码 单控点控 K线完好

安装环境linux NGMySQL5.6PHP7.2&#xff08;函数全删&#xff09;pm2管理器&#xff08;node版本选择v12.20.0&#xff09; config/ database.php 修改数据库链接 设置运行目录 public 伪静态thinkphp

【图解IO与Netty系列】IO的同步与异步、阻塞与非阻塞,Linux五种IO模型

IO的同步与异步、阻塞与非阻塞&#xff0c;Linux五种IO模型 IO的同步与异步&#xff0c;阻塞与非阻塞阻塞IO与非阻塞IO同步IO与异步IO Linux五种IO模型BIONIOIO多路复用信号驱动IOAIO IO的同步与异步&#xff0c;阻塞与非阻塞 我们有时会看到类似于同步阻塞式IO、同步非阻塞式…

【python】python 全国5A级景区数据采集与pyecharts可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

C++ prime 第五版 第14章 重载运算与类型转换

一、基本概念 重载的运算符是具有特殊名字的函数&#xff1a;它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样&#xff0c;重载的运算符也包含返回类型、参数列表以及函数体。 我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说&…