当前位置:网站首页>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)
边栏推荐
猜你喜欢
Why do I strongly recommend using smart async?
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window
面试不再被吊打!这才是Redis分布式锁的七种方案的正确打开方式
Components of communication - the drop-down menu
Interpretation of the 2021 Cost of Data Breach Report
How to analyze the weekly activity rate?
#夏日挑战赛# HarmonyOS 实现一个绘画板
MPLS的wpn实验
MySQL窗口函数
DataGrip数据仓库工具
随机推荐
STM32 GPIO LED and buzzer implementation [Day 4]
DataGrip:非常好用的数据库工具,安装与使用教程,亮点介绍
DataGrip数据仓库工具
MySQL查询语法
请问下这个hologres维表是被缓存了么?怎么直接Finished了
How to start an NFT collection
leetcode:187. 重复的DNA序列
Interpretation of the 2021 Cost of Data Breach Report
MySQL窗口函数 OVER()函数介绍
socket快速理解
【无标题】
Cookie和Session的关系
详谈RDMA技术原理和三种实现方式
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01
视频人脸识别和图片人脸识别的关系
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
To participate in sweepstakes, incoming new programmers magazine welfare!
罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
正向代理与反向代理