YOLOv8进阶 | 如何用yolov8训练自己的数据集(以安全帽佩戴检测举例)

前言:Hello大家好,我是小哥谈。YOLOv8是一种目标检测算法,它是YOLO(You Only Look Once)系列算法的最新版本。本节课就带领大家如何基于YOLOv8来训练自己的目标检测模型,本次作者就以安全帽佩戴检测为案例进行说明,让大家可以轻松了解整个模型训练过程!~🌈  

     目录

🚀1.算法介绍

🚀2.数据标注

🚀3.模型训练

 🚀1.算法介绍

YOLOv8是一种目标检测算法,它是YOLO(You Only Look Once)系列算法的最新版本。YOLOv8采用了一种单阶段的检测方法,可以实时地在图像或视频中检测出多个目标物体的位置类别。YOLOv8的核心思想是将目标检测任务转化为一个回归问题,通过一个卷积神经网络将输入图像映射到一个固定大小的特征图上,并在特征图上进行目标的位置和类别的预测。相比于传统的两阶段方法,YOLOv8具有更快的检测速度和更高的准确率。

YOLOv8的网络结构采用了Darknet作为基础网络,通过多个卷积层池化层提取图像特征,并通过全连接层进行目标的位置和类别的预测。此外,YOLOv8还引入了一些技巧来提升检测性能,如使用多尺度特征图进行目标检测、使用Anchor Boxes来处理不同尺度的目标等。

YOLOv8的主要特点包括:

  1. 高速度:YOLOv8能够实时地进行目标检测,达到了非常快的检测速度。
  2. 高准确率:YOLOv8在保持较快速度的同时,也具备较高的检测准确率。
  3. 多尺度检测:YOLOv8可以在不同尺度的特征图上进行目标检测,从而能够检测到不同大小的目标物体。
  4. 多类别检测:YOLOv8可以同时检测多个不同类别的目标物体。

总结来说,YOLOv8是一种高效准确的目标检测算法,可以广泛应用于实时物体检测、视频监控、自动驾驶等领域。

YOLOv8官方仓库地址:

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

作者在官网下载后,将含有预训练权重文件的YOLOv8完整源码进行了上传,大家可自行下载。  


🚀2.数据标注

利用labelimg或者make sense软件来标注数据,关于如何使用labelimg或者make sense软件来为自己的数据集打上标签,请参考作者专栏文章:

说明:♨️♨️♨️

数据标注工具的使用教程:

YOLOv5入门实践(1)— 手把手教你使用labelimg标注数据集(附安装包+使用教程) 

YOLOv5入门实践(2)— 手把手教你使用make sense标注数据集(附工具地址+使用教程)


🚀3.模型训练

第1步:准备数据集

将数据集放在datasets文件夹中。datasets属于放置数据集的地方,位于PycharmProjects中,C:\Users\Lenovo\PycharmProjects中(这是我的电脑位置,跟你的不一定一样,反正位于PycharmProjects中,如果没有,可自行创建),属于项目的同级文件夹。具体如下图所示:

打开datasets文件夹,可以看到本次安全帽训练所使用的数据集。

安全帽佩戴检测数据集是我手动标注好的,可以在我的博客“资源”中下载。

打开数据集文件,我们会看到数据集文件包括imageslabels两个文件夹,其中,images放的是数据集图片,包括trainval两个文件夹,labels放的是经过labelimg标注所生成的标签,也包括trainval两个文件夹。

关于此处数据集的逻辑关系,用一张图总结就是:⬇️⬇️⬇️

第2步:创建yaml文件

打开pycharm,选择YOLOv8项目源码文件,在ultralytics\cfg\datasets下新建一个helmet.yaml,如下图所示:

打开helmet.yaml,按照如下图所示的进行配置:

说明:♨️♨️♨️

1.train和val为绝对路径地址,可根据自己数据集的路径地址自行设置。

2.nc指的是分类,即模型训练结果分类,此处为在用labelimg或者make sense为数据集标注时候确定。

3.由于本次进行的是安全帽佩戴检测模型训练,所以分两类,分别是:helmet(佩戴安全帽)和nohelmet(不佩戴安全帽)

打开coco128.yaml文件,可以看到里面写的是相对路径,和我们的写法不同,但是都可以使用,据我所知还有很多种数据集读取方式:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)# 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/coco128 # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
test: # test images (optional)# Classes
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus6: train7: truck8: boat9: traffic light10: fire hydrant11: stop sign12: parking meter13: bench14: bird15: cat16: dog17: horse18: sheep19: cow20: elephant21: bear22: zebra23: giraffe24: backpack25: umbrella26: handbag27: tie28: suitcase29: frisbee30: skis31: snowboard32: sports ball33: kite34: baseball bat35: baseball glove36: skateboard37: surfboard38: tennis racket39: bottle40: wine glass41: cup42: fork43: knife44: spoon45: bowl46: banana47: apple48: sandwich49: orange50: broccoli51: carrot52: hot dog53: pizza54: donut55: cake56: chair57: couch58: potted plant59: bed60: dining table61: toilet62: tv63: laptop64: mouse65: remote66: keyboard67: cell phone68: microwave69: oven70: toaster71: sink72: refrigerator73: book74: clock75: vase76: scissors77: teddy bear78: hair drier79: toothbrush# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip

第3步:下载预训练权重

打开YOLOv8官方仓库地址,可以根据需要下载相应的预训练权重。

预训练权重下载地址:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

下载完毕后,即可将其复制粘贴到YOLOv8源码的主目录下。具体如下图所示:

 第4步:新建Python文件

通过查看YOLOv8官方文档可知,YOLOv8提供CLIpython两种训练方式。区别在于:

  • 方式1:CLI就是直接在终端运行指令
  • 方式2:python需要你新建一个python文件,然后运行代码

YOLOv8官方文档地址:Home - Ultralytics YOLOv8 Docs 

本次训练作者采用方式2。

在YOLOv8源码目录下新建Python文件,命名为mytrain.py具体如下图所示:

本次案例,我的mytrain.py文件内容如下所示,大家可自行调整路径地址。

from ultralytics import YOLO
import wandbwandb.init(project="YOLOv8")# Load a model
model = YOLO(r"C:\Users\Lenovo\PycharmProjects\ultralytics-main-v1\ultralytics\cfg\models\v8\yolov8.yaml")  # build a new model from scratch
model = YOLO(r"C:\Users\Lenovo\PycharmProjects\ultralytics-main-v1\yolov8s.pt")  # load a pretrained model (recommended for training)# Use the model
model.train(data=r"C:\Users\Lenovo\PycharmProjects\ultralytics-main-v1\ultralytics\cfg\datasets\helmet.yaml", epochs=100)  # train the model
metrics = model.val()  # evaluate model performance on the validation set
#results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image
#path = model.export(format="onnx")  # export the model to ONNX format

说明:由于本次案例不需要导出模型,我将相关代码注释了,大家后续可根据实际情况进行调整。

第5步:调节参数

YOLOv8关于模型的各种参数都在ultralytics/cfg/default.yaml中,这是与先前版本最大的不同,通过调节这些参数我们就可以实现各种我们所需的操作。

第5步:开始训练

当参数调节完毕之后,即可点击“运行”。具体运行结果如下图所示:

训练结束后,训练结果如下所示:


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

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

相关文章

C#(C Sharp)学习笔记_前言及Visual Studio Code配置C#运行环境【一】

前言 这可以说是我第一次正式的踏入C#的学习道路,我真没想过我两年前是怎么跳过C#去学Unity3D游戏开发的(当然了,游戏开发肯定是没有成功的,都是照搬代码)。而现在,我真正地学习一下C#,就和去年…

2024亿级密码泄露事件:涉及7084万个邮箱账号

近日,热门漏洞通知服务HIBP所有者特洛伊・亨特(Troy Hunt)发布博文,表示在暗网上发现了超大规模的泄漏数据集,被称为Naz.API列表。该数据集包含7084万个电子邮件地址以及超过1亿个密码凭证,至少有超过40万 …

idea创建spring项目

一、环境 window10 IDEA 2022.2.3 maven-3.8.6 二、创建spring项目 1、新建Maven项目 File -> New -> Project 然后如下图选中Maven Archetype,在Archetype,选中maven-archetype-webapp,点击Create 2、配置maven 默认是使用IDEA内…

CCReportAdv的一个配置技巧

关于CCReportAdv CCReportAdv是我们推出的基于经典WinCC/TIA WinCC Prof.的一款报表控件。它支持导入Excel模板,可以灵活生成美观的数据报表。 配置示例 CCReportAdv功能非常强大。通过简单的配置就可以生成客户需要的报表。以下面这款报表为例,参见下面…

基于SpringBoot的家电销售展示网页的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

Python||五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况(上)

目录 1.北京市空气质量月度差异 2.成都市空气质量月度差异 3.上海市空气质量月度差异 五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况 1.北京市空气质量月度差异 import numpy as np import pandas as pd import matplotlib.pyplot as plt#读入…

小白Linux学习笔记-Linux文件系统和磁盘管理

Linux文件系统和磁盘管理 文章目录 Linux文件系统和磁盘管理文件系统资源虚拟化文件系统的概念文件系统的类型文件系统的结构文件系统的区别文件系统的简单操作dfdu 磁盘的分割、格式化与挂载分割 fdisk磁盘格式化 mkfs挂载mount 的用法mount 的查看umount /etc/fstab 将永久生…

ReactNative实现宽度变化实现的动画效果

效果如上图所示,通过修改设备宽度实现动画效果 import React, {useRef, useEffect, useState} from react; import {Animated, Text, View, Image} from react-native;const FadeInView = props => {const fadeAnim = useRef(new Animated.Value(0)).current;React.useEff…

基于YOLOv8算法的照片角度分类项目实践

目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …

PyQT——蓝牙收发数据(上位机案例-小车控制器)

实现功能 由于本人水平有限,仅用了最简单的进行实现,主要功能: 蓝牙设备扫描以及刷新蓝牙连接蓝牙数据发送蓝牙数据接收 页面实现效果 代码目录结构 代码案例 代码已经全部添加注释,故不再做单独解释。 Main.py ble_contr…

Open CASCADE学习|拓扑变换

目录 平移变换 旋转变换 组合变换 通用变换 平移变换 TopoDS_Shape out;gp_Trsf theTransformation;gp_Vec theVectorOfTranslation(0., 0.125 / 2, 0.);theTransformation.SetTranslation(theVectorOfTranslation);BRepBuilderAPI_Transform myBRepTransformation(out, th…

C++继承_C++回顾

什么是继承 继承是面向对象中使代码可以复用的最重要的手段,它允许在保持原有类特性的基础上进行扩展,增加功能,这样就会产生新的类,即派生类。继承呈现了面向对象的层次结构,体现了由简单到复杂的认知过程。与函数复…