YOLOv5如何训练自己的数据集(生活垃圾数据集为例)

news2024/11/24 11:09:47

文章目录

  • 前言
  • 1、数据标注说明
  • 2、定义自己模型文件
  • 3、训练模型
  • 参考文献

前言

本文主要介绍如何利用YOLOv5训练自己的数据集

1、数据标注说明

以生活垃圾数据集为例子

  1. 生活垃圾数据集(YOLO版)
  2. 点击这里直接下载本文生活垃圾数据集

生活垃圾数据集组成:

【有害垃圾】:电池(1 号、2 号、5 号)、过期药品或内包装等;
【可回收垃圾】:易拉罐、小号矿泉水瓶;
【厨余垃圾】:小土豆、切过的白萝卜、胡萝卜,尺寸为电池大小;
【其他垃圾】:瓷片、鹅卵石(小土豆大小)、砖块等。

YOLO数据有三个要点

  1. images,存放图片
  2. labes,对应Images图片的标签
  3. data_txt, 划分images图片的数据集,形成三个txt

文件结构:

----data\
    |----classes.txt  # 标签种类
    |----data-txt\  # 数据集文件集合
    |    |----test.txt
    |    |----train.txt
    |    |----val.txt
    |----images\ # 数据集图片
    |    |----test\
    |    |    |----fimg_23.jpg
    |    |    |----fimg_38.jpg
    |    |    |----.....
    |    |----train\
    |    |    |----fimg_1.jpg
    |    |    |----fimg_2.jpg
    |    |    |----.....
    |    |----val\
    |    |    |----fimg_4.jpg
    |    |    |----fimg_6.jpg
    |    |    |----.....
    |----labels\  # yolo标签
    |    |----test\
    |    |    |----fimg_23.txt
    |    |    |----fimg_38.txt
    |    |    |----.....
    |    |----train\
    |    |    |----fimg_1.txt
    |    |    |----fimg_2.txt
    |    |    |----.....
    |    |----val\
    |    |    |----fimg_4.txt
    |    |    |----fimg_6.txt
    |    |    |----.....
    |----waste-classification.yaml  # 数据集配置文件

2、定义自己模型文件

1、定义yolov5网络模型文件

如 models/yolov5l.yaml

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 4  # number of classes  类别,这里的类别一共四种
depth_multiple: 0.33  # model depth multiple ,模型宽度
width_multiple: 0.50  # layer channel multiple ,通道数
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

2、在data/目标下,定义自己数据集的配置文件

如data/waste-classification.yaml

train: data/data-txt/train.txt
val: data/data-txt/val.txt
test: data/data-txt/test.txt

# Classes
nc: 4 # number of classes
names: ['recyclable waste', 'hazardous waste','kitchen waste','other waste']  # class names

3、训练模型

1、激活python环境

conda activate reid-pytorch  # 这里我是激活reid-pytorch环境

2、在服务器上训练自己的模型

# 注意,这里是linux服务器上训练命令
# nohup 是后台运行,--batch-size 每次送入的图片数, --epochs 训练多少轮  --cfg 模型配置  --data 数据集配置
#  --weights 以哪个权重训练  --device 在那个显卡上训练(这里一共有四张显卡)  > 重定向,将训练的结果输出到myout.file,方便查看
nohup python train.py --batch-size 16 --epochs 200 --cfg models/yolov5s.yaml --data data/waste-classification.yaml --weights weights/yolov5s.pt --device 0,1,2,3 > myout.file 2>&1 &

# 如果是本地电脑上训练,直接在pycharm的train.py添加上述参数,直接训练
--batch-size 16 --epochs 200
--cfg models/yolov5s.yaml
--data data/waste-classification.yaml 
--weights weights/yolov5s.pt
--device 0  # 采用显卡0进行训练

在这里插入图片描述
在这里插入图片描述

查看自己电脑显卡情况

在这里插入图片描述

参考文献

  1. YOLOv5s网络模型讲解(一看就会)
  2. 生活垃圾数据集(YOLO版)
  3. 双向控制舵机(树莓派版)

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

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

相关文章

软件测试/测试开发丨利用人工智能ChatGPT自动生成PPT

点此获取更多相关资料 简介 PPT 已经渗透到我们的日常工作中,无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的 PPT,协助完成一次汇报或一次演讲。PPT相比于传统文本的就是有布局、图片、动画效果等,可以给到观众更好…

VSCode 和 CLion

文章目录 一、VSCode1、文档2、插件3、智能编写4、VSCode 与 C(1)安装(2)调试(a)使用 CMake 进行跨平台编译与调试(b)launch.json(c)传参 (3&…

mac有必要用清理软件吗

随着科技的不断进步,我们的计算机硬盘容量也在不断增长。即使是ARM架构的处理器,也可以通过高效的文件系统和技术来充分利用磁盘空间。然而,对于使用Mac OS系统的用户来说,仅仅使用一个盘来存储所有文件可能会导致一些残留文件的问…

深入了解 Docker 容器操作命令:掌握容器化管理的关键

Docker 已经成为现代应用程序开发和部署的行业标准。它借助容器化技术,提供了一种轻量、可移植和可扩展的方式来构建、发布和运行应用程序。然而,最近我在工作中发现,一些家人们对 Docker 容器的操作命令还不太熟悉。因此,本文旨在…

C++之std::function类模板定义函数对象应用总结(二百三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

PWN基础:从源文件到可执行文件

目录 编译原理 GCC编译过程 Preprocess阶段 File命令 Compile阶段 Assemble阶段 Link阶段 高级语言编写的程序想在操作系统运行,需要被翻译为机器指令,在按照可执行目标文件格式打包并以二进制形式存储在文件中 编译原理 编译器作用:…

php实现分页功能跳转和ajax方式实现

实现效果 准备工作 创建数据表和导入测试数据 CREATE TABLE users ( id int(10) unsigned NOT NULL AUTO_INCREMENT, username varchar(30) DEFAULT NULL COMMENT 账号, email varchar(30) DEFAULT NULL COMMENT 密码, PRIMARY KEY (id) ) ENGINEMyISAM AUTO_INCREM…

Docker 容器编排

是什么 Docker-Compose是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。 Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个…

基于微信小程序的医院门诊体检预约管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

Xcode15下载iOS17一直中断解决办法

1、问题描述 目前的 xcode 15 安装时,跟以前有个差别:以往的 xcode 安装时自带了 ide、sdk 等工具包,安装后即可开始开发,而最新的包则被分开成了不同的包,这里以 ios 开发包为例:Xcode_15.xip 和 iOS_17_…

网络编程-UDP协议(发送数据和接收数据)

需要了解TCP协议的,可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 TCP/IP参考模型 通过此图,可以了解UDP所在哪一层级中 代码案例 发送数据 package com.hidata.devops.paas.udp;import java.io.IOException; …

图形处理软件Photoshop Elements 2020 mac中文版 ps简化版

Photoshop Elements 2020 mac是一款非常实用的图形处理工具。ps elements 2020 mac中文版可以帮助您自动生成照片和视频作品的功能,采用Adobe Sensei AI技术可进行图像组织、编辑和创建等。Photoshop Elements 2020 for Mac激活版可以帮助您轻松整理照片和视频&…

【springboot3.x 记录】关于Jakarta包无法引入的问题

最近想将一些项目升级到springboot3.x和java17的时候,发现项目依赖中有Jakarta的包,但是代码标红提示没有相关的类,特此记录一下排查问题和最终解决问题的思路方法 一、发现问题 因为之前有创建过 springboot3.x java17 的项目,…

php导出cvs,excel打开数字超过16变科学计数法

今天使用php导出cvs,在excel中打开,某一个字段是数字,长度高于16位结果就显示科学计数法 超过15位的话从第16位开始就用0代替了 查询了半天总算解决了就是在后面加上"\t" $data[$key][1] " ".$value[1]."\t";…

法规标准-UN R48标准解读

UN R48是做什么的? UN R48全名为关于安装照明和灯光标志装置的车辆认证的统一规定,主要描述了对各类灯具的布置要求及性能要求;其中涉及自动驾驶功能的仅有6.25章节【后方碰撞预警信号】,因此本文仅对此章节进行解读 功能要求 …

Mysql编译安装和yum安装

一、msql数据库介绍 1、什么是sql sql代表结构化查询语言,sql是用于访问数据库的标椎化语言 sql包含三个部分 DDL数据定义语言包含定义数据库及其对象的语言,例如表,视图,触发器,存储过程等 DML数据操作语言包含允许数…

windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error

问题描述 今天在学习nginx时,想在hosts配置一个nginx的域名映射,但是发现访问nginx服务的ip时可以访问通,在dos命令窗口ping配置的域名映射也可以ping通,但是一旦在浏览器通过http请求访问配置的hosts域名映射时却出现 500 Inter…

学习:原码-反码-补码

文章目录 前提知识原码详解反码补码 二进制负数的运算 前提知识 正数不需要进行原码反码补码一说,正数就是正数,我们原码反码补码是为了针对负数 (按道理来说其实根本不存在什么码,只有二进制机器码,不过是为了方便计…

【Java 基础篇】Java 实现模拟斗地主游戏

欢迎阅读本篇博客,在这篇博客中,我们将详细讲解如何使用Java编写一个简单的模拟斗地主游戏。这个项目将帮助您了解Java编程中的一些基本概念,如面向对象编程、集合框架的使用、随机数生成等。 引言 斗地主是一种非常受欢迎的纸牌游戏&#…

单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用

小T导读:为满足地震预警数据存储、检索和处理的建设与集成需求,以及响应国家国产软件自主可控的号召,中国地震台网中心决定选用国产数据库 TDengine 来存储和处理地震波形数据。本文将针对 TDengine 3.0 在地震领域的应用展开详细讲解。 关于…