如何利用YOLOv8训练自己的数据集 3种加载模型场景讲解

news2024/11/24 7:42:47

文章目录

  • 前言
  • 1、环境搭建
  • 2、YOLOv8训练
  • 3、官网训练文档
    • 3.1、官网示例
    • 3.2、三种加载模型场景
      • 3.2.1、从YAML文件构建新模型
      • 3.2.2、从预训练权重构建模型
      • 3.2.3、从YAML文件构建新模型,并将预训练权重转移到新模型
  • 4、总结
  • 5、目标检测系列文章

前言

本文主要介绍一下如何利用YOLOv8训练自己的数据集,并详细说明3种加载模型方式和使用场景。

1、环境搭建

(1)创建新环境yolov8

conda create -n yolov8 python=3.8

(2)激活新的环境

conda activate yolov8

(3)安装 pytorch

pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118

(4)先将环境位置定位到requirements所在的位置,然后输入以下命令

pip install -r requirements.txt -i https://mirrors.bfsu.edu.cn/pypi/web/simple/

(5)安装ultralytics

# ultralytics集成了yolo的各种包以及模型等。
pip install ultralytics

(6)手动下载权重,粘贴到 yolov8\ultralytics\yolo\v8\detect 文件下

(7)检验是否可用

来到 ultralytics 目录下用官方给的图片预测一下,命令如下

yolo task=detect mode=predict model=yolov8n.pt source=assets/  device=cpu save=True

在这里插入图片描述

2、YOLOv8训练

(1) 准备好数据集

在这里插入图片描述

(2) 编写数据yaml配置文件

如编写 VisDrone.yaml

# parent
# ├── ultralytics
# └── datasets
#     └── VisDrone  ← downloads here (2.3 GB)
 
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/VisDrone  # dataset root dir
train: VisDrone2019-DET-train/images  # train images (relative to 'path')  6471 images
val: VisDrone2019-DET-val/images  # val images (relative to 'path')  548 images
test: VisDrone2019-DET-test-dev/images  # test images (optional)  1610 images
 
# Classes
names:
  0: pedestrian
  1: people
  2: bicycle
  3: car
  4: van
  5: truck
  6: tricycle
  7: awning-tricycle
  8: bus
  9: motor

(3) 训练

在yolov8目录下创建train.py文件

# 如果你是在ultralytics目录下创建train.py文件的话,
# 则 from ultralytics import YOLO 变成 import YOLO 
# 因为你已经进入了ultralytics目录了
from ultralytics import YOLO

if __name__ == '__main__':
	# Load a model
	model = YOLO("ultralytics/models/v8/yolov8s.yaml")  # build a new model from scratch
	model.load("yolov8s.pt")  # load a pretrained model (recommended for training)

	# Train the model
	model.train(data = "dataSet/VisDrone/VisDrone.yaml", epochs = 200, imgsz = 640,
				device =[0,1], resume = "detect/train/last.pt", lr0 = 0.01, batch = 16, workers=16)

运行命令

nohup python train.py > myout.file 2>&1 &

**注意:**在运行train.py 如果在本地项目找不到ultralytics文件,则会跑去虚拟环境下寻找ultralytics 库

3、官网训练文档

3.1、官网示例

训练100轮图像大小为640的COCO8数据集的YOLOv8n模型。可以使用设备参数指定训练设备。如果没有传递参数,并且GPU可以使用,则将使用GPU即device=0,否则将使用cpu训练。有关训练参数的完整列表,请参阅下面的参数部分。

命令行

# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

代码形式,即创建train.py

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml")  # build a new model from YAML
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolov8n.yaml").load("yolov8n.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

通过在多个GPU上分配训练负载,多GPU训练可以更有效地利用可用硬件资源。此功能可通过Python API和命令行界面使用。要启用多GPU训练,请指定要使用的GPU设备ID。

命令行

# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

代码形式,即创建train.py

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

3.2、三种加载模型场景

3.2.1、从YAML文件构建新模型

model = YOLO("yolov8n.yaml")

这种方式根据给定的yolov8n.yaml配置文件创建一个新的YOLOv8模型实例。

  • 配置文件包含了模型架构的所有细节,比如网络层的类型、参数等。
  • 创建的新模型默认情况下不会带有任何预训练权重,除非后续通过其他方式加载权重。
  • 使用这种方式可以在不依赖预训练权重的情况下定义模型结构,适用于需要从头开始训练的情况或者需要定制模型结构的场景。

3.2.2、从预训练权重构建模型

model = YOLO("yolov8n.pt")

这种方式直接加载一个预先训练好的模型,通常是.pt格式的PyTorch模型文件。

  • 加载的模型不仅包含了模型架构信息,还包括了预训练得到的权重参数。
  • 这是最常用的加载方式之一,特别是当您希望利用预训练模型进行预测或者进一步微调的时候
使用预训练权重文件的主要作用是通过微调预训练权重,达到加快自己模型的训练速度的目的。

3.2.3、从YAML文件构建新模型,并将预训练权重转移到新模型

model = YOLO("yolov8n.yaml").load("yolov8n.pt")

这种方式首先根据yolov8n.yaml文件构建模型结构,然后使用load方法加载预训练权重。

  • 这种方式结合了前两种方式的优点,即可以根据配置文件定义模型结构,并加载预训练权重。
  • 如果模型结构在.yaml文件中有改动,但是仍然希望使用预训练权重初始化模型,则可以采用这种方式。
  • 通常这种方式用于需要修改模型结构但仍想利用预训练权重的场景

4、总结

总结来说,选择哪种方式取决于您的具体需求:

  • 如果需要从头开始训练一个模型,可以选择从YAML文件构建新模型
  • 如果想要直接使用预训练模型进行预测或微调,可以选择从预训练权重构建模型
  • 如果需要修改模型结构并利用预训练权重,可以选择从YAML文件构建新模型,并将预训练权重转移到新模型

5、目标检测系列文章

  1. YOLOv5s网络模型讲解(一看就会)
  2. 生活垃圾数据集(YOLO版)
  3. YOLOv5如何训练自己的数据集
  4. 双向控制舵机(树莓派版)
  5. 树莓派部署YOLOv5目标检测(详细篇)
  6. YOLO_Tracking 实践 (环境搭建 & 案例测试)
  7. 目标检测:数据集划分 & XML数据集转YOLO标签
  8. DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)
  9. YOLOv5参数大全(parse_opt篇)
  10. YOLOv5改进(一)-- 轻量化YOLOv5s模型
  11. YOLOv5改进(二)-- 目标检测优化点(添加小目标头检测)
  12. YOLOv5改进(三)-- 引进Focaler-IoU损失函数
  13. YOLOv5改进(四)–轻量化模型ShuffleNetv2
  14. YOLOv5改进(五)-- 轻量化模型MobileNetv3
  15. YOLOv5改进(六)–引入YOLOv8中C2F模块
  16. YOLOv5改进(七)–改进损失函数EIoU、Alpha-IoU、SIoU、Focal-EIOU
  17. YOLOv5改进(八)–引入Soft-NMS非极大值抑制
  18. YOLOv5改进(九)–引入BiFPN模块
  19. 基于YOLOv10的车辆统计跟踪与车速计算应用
  20. 初探 YOLOv8(训练参数解析)
  21. YOLOv8不同模型对比和onnx部署详解

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

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

相关文章

linux 文件编程

标准IO和文件IO是计算机编程中用于处理输入/输出(Input/Output,简称IO)操作的两种不同方式,它们各自具有不同的特点和使用场景。 一、定义与特点 标准IO: 定义:标准IO通常指的是C语言提供的标准库中的IO…

第八季完美童模全球总冠军·韩嘉潞 破浪扬帆写就传奇

梦想的舞台上,星光璀璨,每一步都闪耀着坚持与努力的光芒。在这个盛夏,我们共同见证了一个关于勇气、才华与梦想的辉煌篇章——星光女孩韩嘉潞,在第八季完美童模的璀璨舞台上,以非凡的魅力与不懈的努力,勇夺…

奥运冠军郑钦文:荣耀与激励!

🎖️巴黎奥运的荣耀时刻,属于郑钦文! 在巴黎奥运会的赛场上,郑钦文以无比的坚韧和卓越的技艺,一路过关斩将,最终登上了冠军的宝座! 我们借助以下图片中的方法,将她在赛后视频发言中…

音频转换软件哪个好?试试这5款

潍坊新青年音乐节燃爆现场,音符跳跃间,想不想把最爱的现场Live一键转成手机铃声?别急,寻找免费电脑音频转换软件的你来对地方了! 告别繁琐,5款专业级利器大放送,今天我来告诉你们:电…

阿里云-java调用短信服务,第三方接口的开启(傻瓜式教程)

第一步:在浏览器中,搜索阿里云 第二步:打开aly的主页 第三步:在最上方的导航栏中,找到云市场,注意不要点击,会自动有触发悬浮框出现,在悬浮框中找到 短信 第四步:点击 短…

Secure Coding in C and C ++ (三)关于语法与指针的感悟

上一篇文章中,我们讲了一些关于编译和链接以及基础的C知识。详情请见文章 SecureCoding in C and C(二) 本篇文章将从循环开始写起 1 循环 1. 1 for 先来个简单的例子: 打印hello world 五次: 很简单的吧 for循环的…

echarts学习:绘制地图

前言 经过之前一段时间的磨砺,我具备了基本的使用echarts绘制图表的能力。但是在最近这几个月里我接连遇到了几个棘手的任务,这大大的提升了我的echarts水平。其中我遇到的第一个高难度任务就是使用echarts绘制如下的地图: 简单的分析一下&a…

批量查询全国快递单号:高效追踪物流信息

在日常生活和工作中,我们经常会遇到需要查询多个快递单号物流信息的情况。如果手动逐一查询,不仅效率低下,而且容易出错。为了解决这个问题,我们可以借助固乔科技推出的【固乔快递查询助手】软件,轻松实现全国快递的批…

yolov5详解(一):网络结构

1. 完整的网络结构 以下是参考b站上作者以及yolov5官方代码画出的yolov5l v6.0版本的模型结构,v6.0版本的模型结构是目前yolov5版本的稳定版本,想必以后也不会有什么改变。l,m,n,s,x只是有些层以及输出通道数变化,整体架构是完全一样的&…

vue 项目中 使用vxe-grid 表格中给表格的表头设置特殊的格式 , 并且给指定的列文字设置颜色

项目场景: 相关背景: vue 项目中 使用vxe-grid 表格中给表格的表头设置特殊的格式,并为指定的列文字设置颜色 实现方案: 具体实现方法及步骤: 一、给表格的表头设置特殊的格式 实现方式一: :header-row-s…

WebDeveloper靶机复现

靶机设置 设置靶机为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机ip为192.168.112.137 目录扫描 开放80端口,进行目录扫描 dirb 192.168.112.137 访问浏览器 目录拼接 拼接/ipdata 发现了一个流量包 在wireshark里面查看,发现wordpress的账户…

python提取b站视频的音频(提供源码

如果我想开一家咖啡厅,那么咖啡厅的音乐可得精挑细选!又假设我非常喜欢o叔,而o叔只在b站弹钢琴,那这时候我就得想方设法把b站的视频转为音频咯! 一、首先打开网页版bilibili,按F12: 二、刷新页面…

Java 空值与null 形参与实参学习

Java系列文章目录 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 空值与null的区别4.1.1 空值(Empty Value)4.1.2 Null 4.2 形参与实参区别 五、总结:5.1 学习总结: 一、前…

智慧高速路三维可视化解决方案

项目背景 随着科技的快速发展,智慧高速公路的建设已成为交通领域的重要趋势。国家和相关部委陆续发布多项政策指导智慧公路建设,逐步制定相关建设标准规范,协助推动公路数字化、智能化升级。 方案简介 数字孪生高速公路解决方案是一种集成…

练习实践-基础设施-文件共享-FTP服务搭建-匿名/本地用户/虚拟用户三种模式

参考来源: 在线书籍-linux就该这么学-第11章 安装vsftpdf服务 [rootcentos7 home]# dnf install vsftpd Extra Packages for Enterprise Linux 7 - x86_64 0. CentOS-7 - Base - mirrors.aliyun.com …

C语言中的整数和浮点数在内存中存储

在C语言中,整形和浮点型数据的存储方式有所不同。 对于整形数据,C语言使用补码表示法存储。补码表示法可以方便地进行二进制加减法运算,同时能够简化硬件设计。对于正整数,其补码与原码相同,即直接存储其二进制表示。对…

Spring 循环依赖解决方案

文章目录 1. 循环依赖的产生2. 循环依赖的解决模型3. 基于setter/Autowired 的循环依赖1_编写测试代码2_初始化 Cat3_初始化 Person4_ 回到 Cat 的创建流程5_小结 4. 基于构造方法的循环依赖5. 基于原型 Bean 的循环依赖6. 引人AOP的额外设计7. 总结 IOC 容器初始化bean对象的逻…

如何对open62541.h/open62541.c的UA_Client进行状态(在线/掉线)监控

文章目录 1.背景2.解决方案3.异步连接4.注意事项4.1.线程问题4.2.UA_Client_run_iterate 1.背景 目前在利用open62541.h/open62541.c编写了一个与PLC进行OPCUA通讯的上位机程序。 上位机这边会定时对PLC的某个opcua变量进行写操作。但是假如PLC离线或者说拔掉网线,…

【多线程-从零开始-柒】单例模式,饿汉和懒汉模式

单例模式:是一种设计模式 设计模式,类似于“棋谱”,就是固定套路,针对一些特定的场景,给出一些比较好的解决方法只要按照设计模式来写代码,就可以保证代码不会太差,保证代码的下限 设计模式 设…