当前位置: 首页 > news >正文

【YOLO】YOLOv8训练自定义数据集(4种方式)

YOLOv8 出来一段时间了,继承了分类、检测、分割,本文主要实现自定义的数据集,使用 YOLOV8 进行检测模型的训练和使用

YOLOv8 此次将所有的配置参数全部解耦到配置文件 default.yaml,不再类似于 YOLOv5,一部分在配置文件,一部分在 train.py

1. 运行环境

windows11 和 Ubuntu20.04(建议使用 Linux 系统)

首先切换到自己建立的虚拟环境安装 pytorch

torch              1.12.0+cu116(根据自身设备而定)
torchvision        0.13.0+cu116(根据自身设备而定)

安装完成后,使用 git 命令将源码克隆下来

git clone https://github.com/ultralytics/ultralytics.git

参照官网,直接使用以下语句即可导入项目所需要的库

pip install ultralytics

根据官方的解释,pip 的 ultralytics 库包含了 requirements.txt中的所有库

2. 自定义数据集

我自己准备了一批 熊猫、老虎的图片作为实验数据集,文件夹命名为 data (文件路径:/home/mango/ultralytics/data),对数据集进行划分后的文件夹整体目录结构如下
在这里插入图片描述
images 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 图片信息
labels 下包含 train、val 文件夹,这两个文件夹下包含此次需要的 对应图片的标注信息
test_images 下包含的是提供测试的数据集

ps:数据集形式共有3种,可根据自己实际情况采用

1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]

3. 模型训练(四种方式)

首先在 data 文件夹下新建一个数据加载配置文件 animal.yaml

train: /home/mango/ultralytics/data//images/train
val: /home/mango/ultralytics/data/images/val
# number of classes
nc: 2
# class names
names: ['panda', 'tiger']

接下来就可以准备开始训练了
打开终端,进入虚拟环境,进入yolov8的文件夹,
考虑到命令行模式下下载模型可能有点慢,所以先在官方仓库下载好模型,并放入新建的 weights (文件路径:/home/mango/ultralytics/weights)目录下

YOLOv8模型仓库
在这里插入图片描述

(1) 第一种方式(参数重写)

参数很多,建议查看 官网文档

下面是yolov8官方给定的命令行训练/预测/验证/导出方式:

yolo task=detect    mode=train    model=yolov8n.pt        args...classify       predict        yolov8n-cls.yaml  args...segment        val            yolov8n-seg.yaml  args...export         yolov8n.pt        format=onnx  args...

最后输入以下命令即可开始训练(参数很多可以修改,建议查看官网文档,或者查看/home/mango/ultralytics/ultralytics/yolo/cfg下的 default.yaml 文件)

yolo task=detect mode=train model=weights/yolov8n.pt data=data/animal.yaml batch=16 epochs=50 imgsz=640 workers=16 device=0

在这里插入图片描述
可以看到已经成功开始训练,运行生成的权重、混淆矩阵等信息存在于/home/mango/ultralytics/runs 下面

(2) 第二种方式(重写配置文件)

可以新建一个配置文件,例如:demo.yaml,参数配置内容从 /home/mango/ultralytics/ultralytics/yolo/cfg/default.yaml 复制即可

或者使用命令行

yolo copy-cfg

它会自动生成一个 default_copy.yaml (目录地址:/home/mango/ultralytics/default_copy.yaml)

截取的部分参数信息如下:

# Ultralytics YOLO 🚀, GPL-3.0 license
# Default training settings and hyperparameters for medium-augmentation COCO trainingtask: detect  # inference task, i.e. detect, segment, classify
mode: train  # YOLO mode, i.e. train, val, predict, export# Train settings -------------------------------------------------------------------------------------------------------
model:  # path to model file, i.e. yolov8n.pt, yolov8n.yaml
data:  # path to data file, i.e. coco128.yaml
epochs: 100  # number of epochs to train for
patience: 50  # epochs to wait for no observable improvement for early stopping of training
batch: 16  # number of images per batch (-1 for AutoBatch)
imgsz: 640  # size of input images as integer or w,h
save: True  # save train checkpoints and predict results
save_period: -1 # Save checkpoint every x epochs (disabled if < 1)
cache: False  # True/ram, disk or False. Use cache for data loading
device:  # device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
workers: 8  # number of worker threads for data loading (per RANK if DDP)
project:  # project name
name:  # experiment name
...
...

根据自身需求,修改相应参数,例如:修改 model、data、epochs、batch

model: weights/yolov8n.pt # path to model file, i.e. yolov8n.pt, yolov8n.yaml
data: data/animal.yaml # path to data file, i.e. coco128.yaml
epochs: 20  # number of epochs to train for
batch: 8  # number of images per batch (-1 for AutoBatch)

然后在终端输入下列代码行命令即可开始训练

yolo cfg=default_copy.yaml

ps: 还可以使用 yolo cfg=default_copy.yaml imgsz=320 batch=8 的方式修改 imgz、batch 等参数信息
在这里插入图片描述
可以看到也已经成功开始训练,运行生成的权重、混淆矩阵等信息存在于/home/mango/ultralytics/runs 下面

(3) 第三种方式(python命令)

在 Python 环境中直接使用

from ultralytics import YOLO# 加载模型
# model = YOLO("yolov8n.yaml")  # 从头开始构建新模型
model = YOLO("weights/yolov8n.pt")  # 加载预训练模型(推荐用于训练)# Use the model
results = model.train(data="data/animal.yaml", epochs=20, batch=8)  # 训练模型

或者创建一个 demo.py, 将上述代码拷贝到 demo.py,然后调用 python demo.py 即可
在这里插入图片描述
可以看到也已经成功开始训练,运行生成的权重、混淆矩阵等信息存在于/home/mango/ultralytics/runs 下面

(4) 第四种方式(python文件调用)

进入 /home/mango/ultralytics/ultralytics/yolo 目录下,复制 animal.yaml、yolov8n.pt/home/mango/ultralytics/ultralytics/yolo/v8/detect 目录,
修改 /home/mango/ultralytics/ultralytics/yolo/cfg/default.yamlmodel、data 路径及其他参数信息

# Ultralytics YOLO 🚀, GPL-3.0 license
# Default training settings and hyperparameters for medium-augmentation COCO trainingtask: detect  # inference task, i.e. detect, segment, classify
mode: train  # YOLO mode, i.e. train, val, predict, export# Train settings -------------------------------------------------------------------------------------------------------
model: yolov8n.pt # path to model file, i.e. yolov8n.pt, yolov8n.yaml
data: animal.yaml # path to data file, i.e. coco128.yaml
epochs: 100  # number of epochs to train for
patience: 50  # epochs to wait for no observable improvement for early stopping of training
batch: 16  # number of images per batch (-1 for AutoBatch)
imgsz: 640  # size of input images as integer or w,h
save: True  # save train checkpoints and predict results
save_period: -1 # Save checkpoint every x epochs (disabled if < 1)
cache: False  # True/ram, disk or False. Use cache for data loading
device:  # device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
workers: 8  # number of worker threads for data loading (per RANK if DDP)

运行 train.py
在这里插入图片描述
可以看到也已经成功开始训练,运行生成的权重、混淆矩阵等信息存在于/home/mango/ultralytics/yolo/v8/detect/runs 下面

4. 模型预测

可修改的参数很多,建议查看 官网文档

和模型训练一样,预测同样可以采用不同的方式去实现,这里展示其中一种方法,主要目前还是看看模型效果
将训练得到的 best.pt 复制到 /home/mango/ultralytics/weights 下,执行如下指令

yolo detect predict model=weights/best.pt source=data/test_images save=True

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后一张图没有检测好,估计是跟我训练数据集数量有关系(总共40+张),还有一个就是训练轮次(50轮,花了不到2分钟时间😂)

👍 但总体来说,效果还是可以的,速度精度都不低 🔥

5. 最后

🚀 接下来准备试试 onnx、和 TensorRT 的部署 ❗️

相关文章:

【YOLO】YOLOv8训练自定义数据集(4种方式)

YOLOv8 出来一段时间了&#xff0c;继承了分类、检测、分割&#xff0c;本文主要实现自定义的数据集&#xff0c;使用 YOLOV8 进行检测模型的训练和使用 YOLOv8 此次将所有的配置参数全部解耦到配置文件 default.yaml&#xff0c;不再类似于 YOLOv5&#xff0c;一部分在配置文件…...

linux重置root用户密码

重置root密码 法一&#xff1a;rd.break 第 1 步&#xff1a;重启系统编辑内核参数 第 2 步&#xff1a;找到 linux 这行&#xff0c;在此行末尾空格后输入rd.break &#xff08;End键也可直接进入行尾&#xff09; 成功后显示页面为&#xff1a; 第 3 步&#xff1a;查看。…...

【DBC专题】-10-CAN DBC转换C语言代码Demo_接收Rx报文篇

案例背景(共15页精讲)&#xff1a; 该篇博文将告诉您&#xff0c;CAN DBC转换C语言代码Demo&#xff0c;只需传递对应CAN信号关联参数&#xff0c;无需每个信号"左移"和"右移"&#xff0c;并举例介绍&#xff1a;在CANoe/Canalyzer中CAPL中的应用&#xff…...

AtCoder292 E 思维

题意&#xff1a; 给定一副n(n≤3000)n(n\leq 3000)n(n≤3000)个顶点&#xff0c;mmm条有向边的图&#xff0c;可以在图中添加有向边&#xff0c;求添加的最少边数&#xff0c;使得这副图满足&#xff1a;如果顶点aaa到顶点bbb有边&#xff0c;顶点bbb到ccc右有边&#xff0c;…...

20230309英语学习

What Is Sleep Talking? We Look at the Science 为什么人睡觉会说梦话&#xff1f;来看看科学咋说 Nearly everyone has a story about people talking in their sleep.Though it tends to be more common in children, it can happen at any age:A 2010 study in the jour…...

CAD转换PDF格式怎么弄?教你几种方法轻松搞定!

CAD是从事与艺术创作相关等行业的打工人们必需的工作软件&#xff0c;可以用来完成建筑设计图、设计图纸等。在日常的工作中&#xff0c;一些伙伴经常需要传输图纸给合作方来完成探讨。但是CAD图纸需要使用专业软件才能打开&#xff0c;这就给文件传送带来了一定的困难。而且传…...

AtCoder 259E LCM

题意&#xff1a; 以唯一分解形式给出nnn个数&#xff1a; aipi,1ei,1pi,2ei,2...pi,tei,ta_{i}p_{i,1}^{e_{i,1}}p_{i,2}^{e_{i,2}}...p_{i,t}^{e_{i,t}} ai​pi,1ei,1​​pi,2ei,2​​...pi,tei,t​​ 现在可以将某个数改为111&#xff0c;求所有改法中&#xff0c;有多少个…...

MQTT协议-取消订阅和取消订阅确认

MQTT协议-取消订阅和取消订阅确认 客户端向服务器取消订阅 取消订阅的前提是客户端已经通过CONNECT报文连接上服务器&#xff0c;并且订阅了一个主题 UNSUBSCRIBE—取消订阅 取消订阅的报文同样是由固定报头可变报头有效载荷组成 固定报头由两个字节组成&#xff0c;第一个…...

90后小伙,用低代码“整顿”旅游业,年入2000万,他是怎么做到的?

热爱旅游的92年成都小伙猴哥&#xff0c;大学毕业后开了一家旅行社&#xff0c;主要从事川藏、云南定制游服务。 从今年春节开始&#xff0c;国内各地旅游业开始复苏&#xff0c;向旅行社打电话咨询的人越来越多。 旅游的人多是好事&#xff0c;也是一种烦恼&#xff0c;因为…...

C51---PWM 脉冲宽度调制

1.PWM:脉冲宽度调制,它是通过一系列脉冲宽度进行调制&#xff0c;等效出所需要的波形&#xff08;包含形状以及幅值&#xff09;。对模拟信号电平进行数字编码。也就是说通过调节占空比的变化来调节信号、能量等的变化&#xff0c;占空比就是指在一个周期内&#xff0c;信号处于…...

毕业设计 基于51单片机WIFI智能家居系统设计

基于51单片机WIFI智能家居系统设计1、毕业设计选题原则说明&#xff08;重点&#xff09;2、项目资料2.1 系统框架2.2 系统功能3、部分电路设计3.1 STC89C52单片机最小系统电路设计3.2 ESP8266 WIFI电路设计3.3 DHT11温湿度传感器电路设计4、部分代码展示4.1 LCD12864显示字符串…...

Nginx服务优化措施与配置防盗链

目录 一.优化Nginx的相关措施 二.隐藏/查看版本号 三.修改用户与组 四.设置缓存时间 五.日志切割脚本 六.设置连接超时控制连接访问时间 七.开启多进程 八.配置网页压缩 九.配置防盗链 1.配置web源主机&#xff08;192.168.79.210 www.zhuo.com&#xff09; 1.1 安装…...

Java 某厂面试题真题合集

哈喽~大家好&#xff0c;这篇来看看Java 某厂面试题真题合集。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【日常学习上的分享】 &#x1f949;与这篇相关的文章&#xff1a; Spr…...

很特别的5G市场,5.75亿部手机,却有11亿5G用户,这是怎么了?

中国在5G商用方面已取得了巨大的成绩&#xff0c;这是毋庸置疑的&#xff0c;不过近期公布的一份数据却相当特别&#xff0c;5G手机用户数为5.75亿&#xff0c;而开通了5G套餐的用户数却已超过11亿&#xff0c;这数据对比有点意思。中国在5G商用方面推进很快&#xff0c;建成的…...

go modules

文章目录1. 简介示例1. 示例——同一项目2. 示例——不同项目3. 示例——添加远程模块依赖库1. 简介 go module是Go1.11版本之后官方推出的版本管理工具&#xff0c;并且从Go1.13版本开始&#xff0c;go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modu…...

Baklib客户故事:快递助手ERP

快递助手ERP以多平台多店铺订单管理为核心&#xff0c;集打单发货、商品、库存、采购、售后于一体&#xff0c;中小商家易上手的轻量级ERP&#xff0c;可以满足满足微商、自建商城、档口货源网、一件代发等不同类型客户的打单需求&#xff0c;通过开放平台API接口&#xff0c;自…...

MongoDB学习(java版)

MongoDB概述 结构化数据库 ​ 结构化数据库是一种使用结构化查询语言&#xff08;SQL&#xff09;进行管理和操作的数据库&#xff0c;它们的数据存储方式是基于表格和列的。结构化数据库要求数据预先定义数据模式和结构&#xff0c;然后才能存储和查询数据。结构化数据库通常…...

RK3568平台开发系列讲解(显示篇)什么是DRM

🚀返回专栏总目录 文章目录 一、DRM介绍二、DRM与framebuffer的区别沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍什么是DRM。 一、DRM介绍 DRM 是 Linux 目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。 比如FB原生不支…...

Python蓝桥杯训练:基本数据结构 [二叉树] 上

Python蓝桥杯训练&#xff1a;基本数据结构 [二叉树] 上 文章目录Python蓝桥杯训练&#xff1a;基本数据结构 [二叉树] 上一、前言二、有关二叉树理论基础1、二叉树的基本定义2、二叉树的常见类型3、二叉树的遍历方式三、有关二叉树的层序遍历的题目1、[二叉树的层序遍历](http…...

vuex基础之初始化功能、state、mutations、getters、模块化module的使用

vuex基础之初始化功能、state、mutations、getters、模块化module的使用一、Vuex的介绍二、初始化功能三、state3.1 定义state3.2 获取state3.2.1 原始形式获取3.2.2 辅助函数获取(mapState)四、mutations4.1 定义mutations4.2 调用mutations4.2.1 原始形式调用($store)4.2.2 辅…...

WebSphere中间件漏洞总结

WebSphere中间件漏洞总结 一、WebSphere简介 WebSphere为SOA(面向服务架构)环境提供软件,以实现动态的、互联的业务流程,为所有业务情形提供高度有效的应用程序基础架构。WebSphere是IBM的应用程序和集成软件平台,包含所有必要的中间件基础架构(包括服务器、服务和工具)…...

Unity之ASE实现影魔灵魂收集特效

前言 我们今天来实现一下Dota中的影魔死亡后&#xff0c;灵魂收集的特效。效果如下&#xff1a; 实现原理 1.先添加一张FlowMap图&#xff0c;这张图的UV是根据默认UV图&#xff0c;用PS按照我们希望的扭曲方向修改的如下图所示&#xff1a; 2.通过FlowMap图&#xff0c;我…...

半入耳式耳机运动会不会掉、佩戴超稳固的运动耳机推荐

现在越来越多的人开始意识到运动的重要性&#xff0c;用运动给身体增加一道“防护墙”是最好的生活方式了&#xff0c;不过&#xff0c;日复一日做着几乎相同的动作&#xff0c;难免索然无味&#xff0c;所以很多人都会选择在运动时戴上耳机听歌解闷&#xff0c;这时候也有不少…...

使用Tensorflow完成一个简单的手写数字识别

Tensorflow中文手册 介绍TensorFlow_w3cschool 模型结构图&#xff1a; 首先明确模型的输入及输出&#xff08;先不考虑batch&#xff09; 输入&#xff1a;一张手写数字图&#xff08;28x28x1像素矩阵&#xff09; 1是通道数 输出&#xff1a;预测的数字&#xff08;1x10的one…...

OpenGL三种向着色器传递数据的方法 attributes,uniform,texture以及中间产物

&#xff08;1&#xff09;属性&#xff0c;使在顶点着色器中使用的变量&#xff0c;用于描述顶点的属性&#xff0c;如位置、颜色、法向量等&#xff0c;attributes通常用于描述每个顶点的属性&#xff0c;因此在顶点缓冲对象中存储&#xff0c;渲染的时候&#xff0c;openGL会…...

详解package.json和package-lock

详解package.json和package-lockpackage.json和package-lock.json作用首先要明确一点&#xff0c;package.json不会自动生成&#xff0c;需要我们使用 npm init 创建。package-lock.json是自动生成的&#xff0c;我们使用 npm install 安装包后就会自动生成。在我们执行 npm in…...

02-CSS

一、emmet语法1、简介Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法。快速生成HTML结构语法快速生成CSS样式语法2、快速生成HTML结构语法生成标签 直接输入标签名 按tab键即可 比如 div 然后tab 键&#xff0c; 就可以生成 <…...

JavaScript 中的类型转换机制以及==和===的区别

目录一、概述二、显示转换Number()parseInt()String()Boolean()三、隐式转换自动转换成字符串自动转换成数值四、 和 区别1、等于操作符2、全等操作符3、区别小结一、概述 我们知道&#xff0c;JS中有六种简单数据类型&#xff1a;undefined、null、boolean、string、number、…...

RocketMQ基础篇(一)

目录一、发送消息类型1、同步消息2、异步消息3、单向消息4、顺序消费5、延迟消费二、消费模式1、集群模式2、广播模式3、消费模式扩展4、如何配置三、其他用法1、事务消息2、过滤消息1&#xff09;Tag过滤2&#xff09;SQL方式过滤源码放到了GitHub仓库上&#xff0c;地址 http…...

Android前沿技术—gradle中的build script详解

build.gradle是gradle中非常重要的一个文件&#xff0c;因为它描述了gradle中可以运行的任务&#xff0c;今天本文将会带大家体验一下如何创建一个build.gradle文件和如何编写其中的内容。 project和task gradle是一个构建工具&#xff0c;所谓构建工具就是通过既定的各种规则…...