yolov9从头开始训练

news2024/9/27 20:50:02

yolov9从头开始训练

一、准备数据集

数据集相关文件存放布局如下

yolov9-datasets
├── train
│ ├── images
│ │ ├── image.jpg
│ │ ├── ······
│ └── labels
│ ├── image.txt
│ ├── ······
├── valid
│ ├── images
│ │ ├── image.jpg
│ │ ├── ······
│ └── labels
│ ├── image.txt
│ ├── ······
└── test
├── images
│ ├── image.jpg
│ ├── ······
└── labels
├── image.txt
├── ······

我们通常将数据集划分为训练集(train set)、验证集(validation set)和测试集(test set),如上图所示,但不一定三个集合都需要准备,根据你得需求来。

训练集

用于训练模型的数据集。模型通过训练集中的样本进行学习和参数调整,以优化其性能,训练集是必需的。

验证集

用于选择模型的超参数和进行模型选择的数据集。超参数是指在训练过程中无法从数据中学习的参数,例如学习率、正则化项的权重等,通过在验证集上评估不同超参数设置和模型架构的性能,可以选择表现最好的模型并进行模型选择。

因此,如果你是做实际应用,那么这个集合也必须加上,否则会造成过拟合。

测试集

用于最终评估模型性能的数据集。测试集是模型最后才能接触到的数据,用于模拟模型在实际应用中的性能。

在模型选择和超参数调优完成后,使用测试集对模型进行最终评估,以了解模型的泛化能力和性能。这个集合并不是必须的,它只是最终评估模型的泛化性能用,并不像前两个数据集合那样会对训练过程产生影响。

所以,如果不需要将泛化性能以具体数据显现出来,那么这部分可以删除。

二、环境准备

项目地址:WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (github.com)

首先将yolov9的整个项目文件夹下载下来,放在你喜欢的地方,然后使用命令行进入项目的目录内,接着进行下面的步骤:

(1)虚拟环境

使用依次下列命令创建一个虚拟环境并激活,请确保你的系统已安装好anaconda,可以使用conda命令

conda create -n yolov9 python=3.11 -y
conda activate yolov9
(2)GPU环境

首先使用【nvidia-smi】命令查看GPU的CUDA版本,如下图所示

在这里插入图片描述
Pytorch官网:Start Locally | PyTorch

打开pytorch官网,找到pytorch安装命令,其中CUDA版本(一般)来说需要小于等于上图中显示的版本,二般情况我不管,如下图所示:

在这里插入图片描述

安装完成后,检验环境是否可用,依次运行以下命令

python
import torch
torch.cuda.is_available()

如果命令行返回了True则表示可用,否则不可用,不可用则换pytorch版本,现在我默认可用了,如下所示,返回了True:

(yolov9) root@7l13t4gko7nqs-0:/17106# python
Python 3.11.8 (main, Feb 26 2024, 21:39:34) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
(3)项目环境

进入yolov9主目录后,运行以下代码,完成最后一个环境的安装:

pip install -r requirements.txt

三、配置参数文件

(1)数据集配置文件

首先在【yolov9-main/data】目录下,创建一个后缀名为yaml的文件,文件名取决于你,比如我使用的是YOLOv9-GELAN模型,因此我取名为【YOLOv9-GELAN.yaml】。

该文件内容如下,第1,2,3行分别是训练集,验证集和测试集的图片所在文件夹的路径,names下面是类别索引和类别名的映射。需要注意的是此处类别和序号的对应要与你标注数据集时,类别的顺序一致,否则将引发错误。

train: /17106/Pengcaiping/datasets/recombination/train/images
val: /17106/Pengcaiping/datasets/recombination/valid/images
#test:
names:
0: paper
1: plastic
2: metal
3: clothing
4: other

(2)参数配置文件

首先在【yolov9-main/models/detect】目录下(假设你也是做目标检测),打开【gelan.yaml】进行编辑,该文件内容如下:

# YOLOv9

# parameters
nc: 5  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()

# anchors
anchors: 3

# gelan backbone
backbone:
省略一千字

仅修改类别数量,即【nc】后面的数字,改成你的类别数量,比如我有5个类别,所以填了5。

(3)训练文件修改

打开主目录下【train.py】文件,调到下图所示位置,然后进行参数修改:

在这里插入图片描述

①填我们之前配置好的参数文件的路径

②填我们之前配置好的数据集配置文件的路径

③由于yolov9刚发布这里需要修改为【data/hyps/hyp.scratch-high.yaml】才能运行,否则会报错,如果后续修复了,读者可提醒我修改此处。

④训练轮次,根据你的硬件性能,数据集大小等来决定要设置为多少,一般来说不要太多,因为太多可能会过拟合。

⑤batch-size是一次同时处理的样本数量,如果你GPU性能可以上天,显存可以下地那么可以调大一下,目前我设置为64,输入单样本大小为 480 × 640 480\times640 480×640,消耗显存45G;如果显存小就调小点。

四、训练

在配置好的环境中,运行以下代码开始从0训练

python train.py

五、最后的一点话

本数量,如果你GPU性能可以上天,显存可以下地那么可以调大一下,目前我设置为64,输入单样本大小为 480 × 640 480\times640 480×640,消耗显存45G;如果显存小就调小点。

四、训练

在配置好的环境中,运行以下代码开始从0训练

python train.py

五、最后的一点话

时过境迁,当读者你看到此教程时,可能距离作者收笔此文相去已久,若未能解决你的问题,作者深感抱歉。若读者发现某些地方已经不再适合当下,可以私聊或者评论区告知,我会及时进行修改!

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

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

相关文章

项目运维方案

1. 文档介绍 2. 人员与责任 3. 运维过程内容 4. 运维资源 5. 运维服务规划保障 6. 事件处置 7. 质量改进 8. 运维边界及内容 软件开发全套资料获取:软件开发全套资料_数字中台建设指南-CSDN博客

CSP-201803-2-碰撞的小球

CSP-201803-2-碰撞的小球 解题思路 解题思路是通过模拟小球在数轴上的移动来计算t秒后各个小球的位置。 初始化阶段:首先,读入小球的数量 n、线段长度 L 和时间 t。然后,对于每个小球,程序读入它们的初始位置,并创建一…

【学习笔记】数据结构与算法05:树、层序遍历、深度优先搜索、二叉搜索树

知识出处:Hello算法:https://www.hello-algo.com/ 文章目录 2.4 树2.4.1 「二叉树 binary tree」2.4.1.1 二叉树基本操作2.4.1.2 二叉树的常见类型「完美二叉树 perfect binary tree」「完全二叉树 complete binary tree」「完满二叉树 full binary tre…

【每日刷题】数组-LC56、LC238、随想录1

1. LC56 合并区间 题目链接 Arrays.sort先让intervals里的子数组按照子数组的第一个数字值从小到大排列。开一个新数组,newInterval,存放合并好的子数组让intervals的当前子数组i的第一个数字与newInterval的当前子数组index的最后一个数字比较大小&am…

JAVA对象内存模型

Java对象内存模型 > 一个Java对象在内存中包括3个部分:对象头、实例数据和对齐填充 > > 数据 内存 – CPU 寄存器 -127 补码 10000001 - 11111111 32位的处理器 一次能够去处理32个二进制位 4字节的数据 64位操作系统 8字节 2的64次方的寻址空间 指针压…

【C++】核心编程--内存分区、引用

文章目录 1.内存分区模型1.1 程序运行前1.1.1 代码区1.1.2 全局区 1.2 程序运行后1.2.1 栈区1.2.2 堆区 1.3 new操作符 2. 引用2.1 给变量起别名2.2 引用做函数参数2.3 引用做函数返回值2.4 引用的本质2.25 常量引用 1.内存分区模型 C程序在执行时,将内存大方向划分…

第七十一天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第71天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点: 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

Socket网络编程(五)——TCP数据发送与接收并行

目录 主要实现需求TCP 服务端收发并行重构启动main方法重构重构分离收发消息的操作重构接收消息的操作重构发送消息TCPServer调用发送消息的逻辑监听客户端链接逻辑重构Socket、流的退出与关闭 TCP 客户端收发并行重构客户端 main函数重构客户端接收消息重构客户端发送消息重构…

日常科研中经常使用的命令

Linux目录树状结构 1. Windows是磁盘分区,Linux不区分盘符,所有文件都在根目录斜线下面; 2. 根目录显示不同,Linux是一个斜线,而windows是盘符,然后冒号; 3. 分割目录Linux用斜线&#xff0c…

Odoo迈入开源第一低代码开发平台的重要里程碑

Odoo17的正式发布已经过去好几个月了,通过一段时间的运用,最大的感触就是,Odoo会成为企业管理软件低代码开发平台的重要一员,而V17则会成为这个过程中具有里程碑意义的版本。 时隔四个月,让我们回头来看看Odoo17带来的…

国防科大、中大0706大气科学及南信大大物院初试复习宝典——简答题知识点汇总

Attention!有思维导图版 有Xmind导图格式的,更适合复习,下面是xmind导出的markdown格式,丑死了,可以移步去网盘查看 链接:https://pan.baidu.com/s/1ZcqfPWoyMd6eXf3_jvSVzQ?pwd7ij7 提取码:…

Node.js基础---Express中间件

1. 概念 1.什么是中间件 中间件(Middleware),特指业务流程的中间处理环节 2. Express 中间件的调用流程 当一个请求到达 Express 的服务器后,可以连续调用多个中间件,从而对这次请求进行预处理 3. Express 中间件格式 Express 的中间件&…

Docker技术概论(1):Docker与虚拟化技术比较

Docker技术概论(1) Docker与虚拟化技术比较 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

鸿蒙学习day1基础语法 基础变量类型

在这里插入图片描述 什么是变量:变量就是一些数据 如125,‘字符串数据’ 通过一个符号来表示 变量的定义 方法 let 变量名:变量类型 ’ 各种数据’ ,let是关键字,系统给的用来定义变量的 let name: string 张亚洲; let age: …

MATLAB中function_handle函数用法

目录 说明 创建对象 示例 命名函数求积分 匿名函数求积分 function_handle函数所表示的是函数的句柄。 说明 函数句柄是一种表示函数的 MATLAB 数据类型。函数句柄的典型用法是将函数传递给另一个函数。例如,可以将函数句柄用作基于某个值范围计算数学表达式的…

Mybatis 主从表有名字相同,只能查询出一条数据

Mybatis 主从表有名字相同,只能查询出一条数据 重新命名后,可以正常查询

网络爬虫部分应掌握的重要知识点

目录 一、预备知识1、Web基本工作原理2、网络爬虫的Robots协议 二、爬取网页1、请求服务器并获取网页2、查看服务器端响应的状态码3、输出网页内容 三、使用BeautifulSoup定位网页元素1、首先需要导入BeautifulSoup库2、使用find/find_all函数查找所需的标签元素 四、获取元素的…

AI-数学-高中-29-样本的数字特征(标准差、方差)

原作者视频:【统计】【一数辞典】3样本的数字特征_哔哩哔哩_bilibili 标准差(s)、方差(S^2)公式:判断数据的稳定性。

137.乐理基础-协和音程、不协和音程

内容参考于: 三分钟音乐社 上一个内容:136.旋律音程、和声音程、自然音程、变化音程 上一个内容里练习的答案: 所有音程都可以分成协和音程与不协和音程两大类 协和音程又分三个小类: 第一个小类叫极完全协和音程,就…

特殊设计模式

▶实现一个类,不能被拷贝 ▶实现一个类,只能在堆上创建 ❗实现一个类,只能创建在栈上 ❗设计一个不能继承的类 ❗单例模式——一个类只能生成一个对象   ❔饿汉模式——在每次程序启动都会自动生成一个对象   ❓懒汉模式——在第一次需要…