yolov5训练ExDark数据集(附全过程代码,超详细教程,无坑!)

1.数据集获取

ExDark:免费下载地址
数据内容展示:共12个类别7363张
在这里插入图片描述在这里插入图片描述

2.ExDark转yolo格式

ExDark的label文件内容
在这里插入图片描述
yolo的label文件内容
在这里插入图片描述
转换前准备如下
在这里插入图片描述
其中:
anndir等于ExDark数据集中的Annotations文件夹,用于存放标签数据;
imgdir等于ExDark数据集中的images文件夹,用于存放图像数据;
T用于存放转换后的文件;
recipy.py参考了github
其实大可不必改名称,我用这个名称是因为试了别的博主的帖子,虽然最后他的方法不好使,但是都建好了就懒得改回去了!
代码:需要在参数配置处改地址

import os
from PIL import Image
import argparse
import shutillabels = ['Bicycle', 'Boat', 'Bottle', 'Bus', 'Car', 'Cat', 'Chair', 'Cup', 'Dog', 'Motorbike', 'People', 'Table']def ExDark2Yolo(txts_dir: str, imgs_dir: str, ratio: str, version: int, output_dir: str):ratios = ratio.split(':')ratio_train, ratio_test, ratio_val = int(ratios[0]), int(ratios[1]), int(ratios[2])ratio_sum = ratio_train + ratio_test + ratio_valdataset_perc = {'train': ratio_train / ratio_sum, 'test': ratio_test / ratio_sum, 'val': ratio_val / ratio_sum}for t in dataset_perc:os.makedirs('/'.join([output_dir, 'images', t]))os.makedirs('/'.join([output_dir, 'labels', t]))for label in labels:print('Processing {}...'.format(label))filenames = os.listdir('/'.join([txts_dir, label]))cur_idx = 0files_num = len(filenames)for filename in filenames:cur_idx += 1filename_no_ext = '.'.join(filename.split('.')[:-2])if cur_idx < dataset_perc.get('train') * files_num:set_type = 'train'elif cur_idx < (dataset_perc.get('train') + dataset_perc.get('test')) * files_num:set_type = 'test'else:set_type = 'val'output_label_path = '/'.join([output_dir, 'labels', set_type, filename_no_ext + '.txt'])yolo_output_file = open(output_label_path, 'a')name_split = filename.split('.')img_path = '/'.join([imgs_dir, label, '.'.join(filename.split('.')[:-1])])try:img = Image.open(img_path)except FileNotFoundError:img_path = '/'.join([imgs_dir, label, ''.join(name_split[:-2]) + '.' + name_split[-2].upper()])img = Image.open(img_path)output_img_path = '/'.join([output_dir, 'images', set_type])shutil.copy(img_path, output_img_path)width, height = img.sizetxt = open('/'.join([txts_dir, label, filename]), 'r')txt.readline()  # ignore first lineline = txt.readline()while line != '':datas = line.strip().split()class_idx = labels.index(datas[0])x0, y0, w0, h0 = int(datas[1]), int(datas[2]), int(datas[3]), int(datas[4])if version == 5:x = (x0 + w0/2) / widthy = (y0 + h0/2) / heightelif version == 3:x = x0 / widthy = y0 / heightelse:print("Version of YOLO error.")returnw = w0 / widthh = h0 / heightyolo_output_file.write(' '.join([str(class_idx),format(x, '.6f'),format(y, '.6f'),format(w, '.6f'),format(h, '.6f'),]) + '\n')line = txt.readline()yolo_output_file.close()if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--annotations-dir', type=str, default='anndir', help="ExDark annotations directory.")#ExDark的标注目录parser.add_argument('--images-dir', type=str, default='imgdir', help="ExDark images directory.")#ExDark的图像目录parser.add_argument('--ratio', type=str, default='8:1:1', help="Ratio between train/test/val, default 8:1:1.")#train/test/val之间的比例,默认为8:1:1parser.add_argument('--version', type=int, choices=[3, 5], default='5', help="Version of YOLO(3 or 5), default 5.")#YOLO版本(3或5)parser.add_argument('--output-dir', type=str, default="T", help="Images and converted YOLO annotations output directory.")#图像和转换后的yolo标注的输出目录args = parser.parse_args()ExDark2Yolo(args.annotations_dir, args.images_dir, args.ratio, args.version, args.output_dir)

最后的转换列表
在这里插入图片描述
将images和labels文件放置yolov5文件中为训练做准备
在这里插入图片描述

3.yolo使用ExDark数据集训练

3.1.修改两个.yaml文件

1.在data文件夹下新建一个yaml文件,随便起名,他的作用和coco128.yaml一个道理。说人话就是没有他训练就找不到数据集位置,也就是说他是一个存放输入数据的入口地址的文件。
在这里插入图片描述
ExDark.py内容

path: datasets/ExDark   #路径改成自己的
train: images/train   #路径改成自己的
val: images/val   #路径改成自己的
test: images/test   #路径改成自己的# Classes
names:0: Bicycle1: Boat2: Bottle3: Bus4: Car5: Cat6: Chair7: Cup8: Dog9: Motorbike10: People11: Table

2.在model文件夹下修改yolov5s.yaml文件(大家用哪个yaml就改哪个,这里以s.yaml为例)
这里就把类别数改了就可以,其余的不要动。
在这里插入图片描述

nc: 12  # 类别数

3.2.修改train.py文件

parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/ExDark.yaml', help='dataset.yaml path')

3.3.执行train.py

1.右击执行
在这里插入图片描述

2.打开Terminal执行代码:

python train.py

在这里插入图片描述

注意代码里文件的路径是否正确
注意命令里文件的路径是否正确
注意文件的名称是否与代码和命令中的对应,例data不是date,datesets不是datasets!!!
注意不该改的代码不要动,坏了咱赔不起!!!
注意不要随便乱删空格,尤其的包含路径的空格!!!

到此ExDark.txt格式转yolo.txt格式以及yolov5在Pytorch下实现训练圆满结束!
欢迎小伙伴们在评论区对我进行错误更正,你要是对,我必改并称你为大哥!

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

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

相关文章

【LeetCode75】第五十四题 咒语和药水的成功对数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们两个数组&#xff0c;要我们找出第一个数组中每个元素能和另一个数组的元素匹配的数量。匹配的条件是乘积大于特定的值。 那么…

论文阅读《Robust Monocular Depth Estimation under Challenging Conditions》

论文地址&#xff1a;https://arxiv.org/pdf/2308.09711.pdf 源码地址&#xff1a;https://github.com/md4all/md4all 概述 现有SOTA的单目估计方法在理想的环境下能得到满意的结果&#xff0c;而在一些极端光照与天气的情况下往往会失效。针对模型在极端条件下的表现不佳问题&…

【软件测试】selenium3

自动化测试的概念 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最 后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试就相当于将人工测试手段进行转换&#xff0c;让代码…

flex布局语法以及实操,一文带你吃透flex布局的基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Flex是什么&#xff1f; 二、Flex语法知识 1.轴的使用 1.1flex-direction属性 ​编辑 2.基础知识 2.1justify-content属性 2.1.1justify-content: fl…

【HTML5高级第二篇】WebWorker多线程、EventSource事件推送、History历史操作

文章目录 一、多线程1.1 概述1.2 体会多线程1.3 多线程中数据传递和接收 二、事件推送2.1 概述2.2 onmessage 事件 三、history 一、多线程 1.1 概述 前端JS默认按照单线程去执行&#xff0c;一段时间内只能执行一件事情。举个栗子&#xff1a;比方说古代攻城游戏&#xff0c…

CRM软件系统排名靠前的相关推荐

CRM软件是企业管理客户关系的重要工具&#xff0c;它可以帮助企业提高销售效率、增强客户满意度、提升市场竞争力。在众多的CRM软件中&#xff0c;排名靠前的CRM软件有哪些&#xff1f;推荐您一款领先的CRM软件——Zoho CRM。 Zoho CRM是一款全球知名的CRM软件&#xff0c;累计…

Ubuntu18.04系统下通过moveit控制kinova真实机械臂,并用python脚本到达固定点

测试工作空间&#xff1a;test_ws Kinova机械臂型号&#xff1a;m1n6s300 双臂模型中的左臂 测试功能包为kinova-ros官方包 一、读取kinova机械臂末端执行器位姿及tf小知识 1. tf小知识之获取两个连杆坐标系的位姿关系&#xff0c;非常有用&#xff0c;非常有用&#xff0c;非…

Linux tcpdump抓包命令

1.tcpdump抓包命令 -c 指定抓取包的数量&#xff0c;即最后显示的数量 -i 指定tcpdump监听的端口。未指定&#xff0c;选择系统中最小的以配置端口。-i any:监听所有网络端口 -i lo:监听lookback接口。-nn 对监听地址以数字方式呈现&#xff0c;且对端口也以数字方式呈现。…

Ubuntu 22.04安装过程

iso下载地址 Ubuntu Releases 1.进入引导菜单 选择Try or Install Ubuntu Server安装 2.选择安装语言 默认选择English 3.选择键盘布局 默认即可 4.选择安装服务器版本 最小化安装 5.配置网络 选择ipv4 选择自定义 DHCP也可 6.配置代理 有需要可以配置 这里跳过 7.软件源 …

LeetCode518. 零钱兑换 II 以及 动态规划相关的排列组合问题

文章目录 一、题目二、题解方法一&#xff1a;完全背包问题的变体&#xff08;版本1&#xff09;方法二&#xff1a;完全背包问题变体&#xff08;版本2&#xff09; 三、拓展&#xff1a;先遍历物品后遍历背包vs先遍历背包后遍历物品先遍历物品后遍历背包&#xff08;组合问题…

高性能数据JS网格 Bryntum Grid 5.5.2 Crack

高性能数据网格 Bryntum Grid 是一个高性能的网络表格组件。它是用纯 JavaScript 构建的&#xff0c;并且可以轻松地与所有主要 JS 框架集成。 功能丰富 Bryntum Grid 具有您期望从专业网格组件获得的所有功能&#xff0c;包括&#xff1a; 很好的表现;很好的绩效 没有人喜欢缓…

记录我在cmd里使用pip命令下载Python的包时碰见的两个错误

1、pip时报错&#xff1a;Defaulting to user installation because normal site-packages is not writeable 解决方法&#xff1a;在 pip install 后面加上 --user 即可&#xff0c;这个是权限不足引发的问题。如果还是不行则用镜像源&#xff0c;然后别忘了在镜像源的“inst…