当前位置:网站首页>yolov5s用自己的数据集进行训练模型
yolov5s用自己的数据集进行训练模型
2022-08-03 16:28:00 【鼾声鼾语】
https://blog.csdn.net/qq_40770527/article/details/124143214
自动化分训练集和验证集以及测试集的代码如下;
import os
import shutil
import random
# 保证随机可复现
random.seed(0)
# def mk_dir(file_path):
# if os.path.exists(file_path):
# # 如果文件夹存在,则先删除原文件夹在重新创建
# shutil.rmtree(file_path)
# os.makedirs(file_path)
def split_data(file_path, new_file_path, train_rate, val_rate, test_rate):
# yolov5训练自己数据集时 准备了images图片文件夹和txt标签文件夹;但是
# 需要分割训练集、验证集、测试集3个文件夹,每个文件夹有images和labels
# 2个文件夹;此方法可以把imags和labels总文件夹,分割成3个文件夹;
# file_path ='images 文件夹'
# xmlpath= 'txt文件夹'
# new_file_path='保存的新地址'
eachclass_image = []
for image in os.listdir(file_path):
eachclass_image.append(image)
total = len(eachclass_image)
random.shuffle(eachclass_image)
train_images = eachclass_image[0:int(train_rate * total)] # 注意左闭右开
val_images = eachclass_image[int(train_rate * total):int((train_rate + val_rate) * total)] # 注意左闭右开
test_images = eachclass_image[int((train_rate + val_rate) * total):]
#训练集
for image in train_images:
print(image)
old_path = file_path + '/' + image
new_path1 = new_file_path + '/' + 'train' + '/' + 'images'
if not os.path.exists(new_path1):
os.makedirs(new_path1)
new_path = new_path1 + '/' + image
# print(new_path)
shutil.copy(old_path, new_path)
new_name = os.listdir(new_file_path + '/' + 'train' + '/' + 'images')
# print(new_name[1][:-4])
for im in new_name:
old_xmlpath = xmlpath + '/' + im[:-3] + 'txt'
print('old',old_xmlpath)
new_xmlpath1 = new_file_path + '/' + 'train' + '/' + 'labels'
if not os.path.exists(new_xmlpath1):
os.makedirs(new_xmlpath1)
new_xmlpath = new_xmlpath1 + '/' + im[:-3] + 'txt'
print('xml name',new_xmlpath)
if not os.path.exists(f'{
old_xmlpath}'):
open(f'{
old_xmlpath}', 'w')
shutil.copy(old_xmlpath, new_xmlpath)
#验证集
for image in val_images:
old_path = file_path + '/' + image
new_path1 = new_file_path + '/' + 'val' + '/' + 'images'
if not os.path.exists(new_path1):
os.makedirs(new_path1)
new_path = new_path1 + '/' + image
shutil.copy(old_path, new_path)
new_name = os.listdir(new_file_path + '/' + 'val' + '/' + 'images')
for im in new_name:
old_xmlpath = xmlpath + '/' + im[:-3] + 'txt'
new_xmlpath1 = new_file_path + '/' + 'val' + '/' + 'labels'
if not os.path.exists(new_xmlpath1):
os.makedirs(new_xmlpath1)
new_xmlpath = new_xmlpath1 + '/' + im[:-3] + 'txt'
if not os.path.exists(f'{
old_xmlpath}'):
open(f'{
old_xmlpath}', 'w')
shutil.copy(old_xmlpath, new_xmlpath)
#测试集
for image in test_images:
old_path = file_path + '/' + image
new_path1 = new_file_path + '/' + 'test' + '/' + 'images'
if not os.path.exists(new_path1):
os.makedirs(new_path1)
new_path = new_path1 + '/' + image
shutil.copy(old_path, new_path)
new_name = os.listdir(new_file_path + '/' + 'test' + '/' + 'images')
for im in new_name:
old_xmlpath = xmlpath + '/' + im[:-3] + 'txt'
new_xmlpath1 = new_file_path + '/' + 'test' + '/' + 'labels'
if not os.path.exists(new_xmlpath1):
os.makedirs(new_xmlpath1)
new_xmlpath = new_xmlpath1 + '/' + im[:-3] + 'txt'
if not os.path.exists(f'{
old_xmlpath}'):
open(f'{
old_xmlpath}', 'w')
shutil.copy(old_xmlpath, new_xmlpath)
print('ok')
if __name__ == '__main__':
file_path = "./dropout-nosise-salt/img"
xmlpath = './dropout-nosise-salt/labels'
new_file_path = "./dropout-nosise-salt/train-val"
split_data(file_path, new_file_path, train_rate=0.7, val_rate=0.2, test_rate=0.1)
边栏推荐
- MySQL相关介绍
- 数据中台“集存通用治”功能场景说明
- C专家编程 第3章 分析C语言的声明 3.7 typedef struct foo{... foo;}的含义
- WordPress建站技术笔记
- Yuan xiaolin: Volvo focus on travel security, and put it perfectly
- C语言04、操作符
- leetcode-268.丢失的数字
- MarkDown常用代码片段和工具
- MySQL窗口函数 PARTITION BY()函数介绍
- [Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 02
猜你喜欢

To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"

自动化部署+整合SSM项目

高效的组织信息共享知识库是一种宝贵的资源

华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地

数据中台“集存通用治”功能场景说明

【带你了解SDN和网络虚拟化】

leetcode:187. 重复的DNA序列

Web3 安全风险令人生畏?应该如何应对?
![STM32 GPIO LED and buzzer implementation [Day 4]](/img/13/dbfed5a207e97ba0b78c1f63712e16.png)
STM32 GPIO LED and buzzer implementation [Day 4]

Difference and performance comparison between HAL and LL library of STM32
随机推荐
ArkUI如何适配横竖屏
MPLS的wpn实验
Some optional strategies and usage scenarios for PWA application Service Worker caching
Leetcode76. Minimal Covering Substring
SwinIR实战:详细记录SwinIR的训练过程
Tolstoy: There are only two misfortunes in life
DataGrip数据仓库工具
使用Stream多年,collect还有这些“骚操作”?
C语言04、操作符
node连接mongoose数据库流程
C语言01、数据类型、变量常量、字符串、转义字符、注释
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01
MarkDown常用代码片段和工具
To participate in sweepstakes, incoming new programmers magazine welfare!
如何选择合适的导电滑环型号
C专家编程 第1章 C:穿越时空的迷雾 1.11 轻松一下---由编译器定义的Pragmas效果
【翻译】关于扩容一个百万级别用户系统的六个课程
附录A 程序员工作面试的秘密
WordPress 5.2.3 更新,升级出现请求超时的解决方法
请问下这个hologres维表是被缓存了么?怎么直接Finished了