Pytorch 版YOLOV5训练自己的数据集

1、环境搭建

https://github.com/ultralytics/yolov5

2、安装需要的软件

 pip install -U -r requirements.txt

3、准备数据

在data文件下建立上面三个文件(Annotations、images与ImageSets,labels后续我们脚本生成)其中Annotations存放xml文件,images图像,ImageSets新建Main文件存放train与test文件(脚本生成),labels是标签文件

划分训练集与测试集(为了充分利用数据集我们只划分这两个),生成的在ImageSets / Main文件下


import os
import randomtrainval_percent = 0.2   #可自行进行调节
train_percent = 1
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)#ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
#fval = open('ImageSets/Main/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:#ftrainval.write(name)if i in train:ftest.write(name)#else:#fval.write(name)else:ftrain.write(name)#ftrainval.close()
ftrain.close()
#fval.close()
ftest.close()

建立voc_labels文件生成labels标签文件

import xml.etree.ElementTree as ETimport pickleimport osfrom os import listdir, getcwdfrom os.path import joinsets = ['train', 'test']classes = ['apple','orange'] #自己训练的类别def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(image_id):in_file = open('data/Annotations/%s.xml' % (image_id))out_file = open('data/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()for image_set in sets:if not os.path.exists('data/labels/'):os.makedirs('data/labels/')image_ids = open('data/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('data/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write('data/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

4、配置训练文件

在data目录下新建fruit.yaml,配置训练的数据

# COCO 2017 dataset http://cocodataset.org# Download command: bash yolov5/data/get_coco2017.sh# Train command: python train.py --data ./data/coco.yaml# Dataset should be placed next to yolov5 folder:# /parent_folder# /coco# /yolov5# train and val datasets (image directory or *.txt file with image paths)train: xx/xx/train2017.txt # 上面我们生成的train,根据自己的路径进行更改val: xx/xx/val2017.txt # 上面我们生成的test#test: ../coco/test-dev2017.txt # 20k images for submission to https://competitions.codalab.org/competitions/20794# number of classesnc: 2 #训练的类别# class namesnames: ['apple','orange']# Print classes# with open('data/coco.yaml') as f:# d = yaml.load(f, Loader=yaml.FullLoader) # dict# for i, x in enumerate(d['names']):# print(i, x)

models文件(采用那个yaml我们更改那个),例如采用yolov5s.yaml:


# parametersnc: 2 # number of classes 训练的类别数depth_multiple: 0.33 # model depth multiplewidth_multiple: 0.50 # layer channel multiple# anchorsanchors:- [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 backbonebackbone:# [from, number, module, args][[-1, 1, Focus, [64, 3]], # 1-P1/2[-1, 1, Conv, [128, 3, 2]], # 2-P2/4[-1, 3, Bottleneck, [128]],[-1, 1, Conv, [256, 3, 2]], # 4-P3/8[-1, 9, Bottleneck, [256]],[-1, 1, Conv, [512, 3, 2]], # 6-P4/16[-1, 9, Bottleneck, [512]],[-1, 1, Conv, [1024, 3, 2]], # 8-P5/32[-1, 1, SPP, [1024, [5, 9, 13]]],[-1, 3, Bottleneck, [1024]], # 10]# yolov5 headhead:[[-1, 3, Bottleneck, [1024, False]], # 11[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 12 (P5/32-large)[-2, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 1, Conv, [512, 1, 1]],[-1, 3, Bottleneck, [512, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 17 (P4/16-medium)[-2, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 1, Conv, [256, 1, 1]],[-1, 3, Bottleneck, [256, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]], # 22 (P3/8-small)[[], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]

5、训练

python train.py --data data/fruit.yaml --cfg models/yolov5s.yaml --weights '' --batch-size 16 --epochs 100

这里想加载预训练权重要更改下代码,不然会报错:

train.py中115行(日期2020.6.9)

try:#ckpt['model'] = \#{k: v for k, v in ckpt['model'].state_dict().items() if model.state_dict()[k].numel() == v.numel()}ckpt['model'] = \{k: v for k, v in ckpt['model'].state_dict().items() if k in model.state_dict().keys()\and model.state_dict()[k].numel() == v.numel()

训练命令:

python train.py --data data/fruit.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 100

6、测试:

python detect.py --source file.jpg # imagefile.mp4 # video./dir # directory0 # webcamrtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa # rtsp streamhttp://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8 # http stream

跟大家点小建议,自己去尝试。

YOLO V5建议:如果需要训练较小的自定义数据集,Adam是更合适的选择,尽管Adam的学习率通常比SGD低。但是如果训练大型数据集,对于YOLOV5来说SGD效果比Adam好

官方指南,你值得拥有:https://github.com/ultralytics/yolov5

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

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

相关文章

使用SQL Server作业设置定时任务

1.开启SQL Server Agent服务 使用作业需要SQL Agent服务的支持,并且需要设置为自动启动,否则你的作业不会被执行。 以下步骤开启服务:开始-->>>运行-->>>输入"services.msc"-->>>进入服务,开启SQL Server Agent服…

ListView与GridView优化

前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题。本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流。 声明 欢迎转载,但请保留文章原始出处:) 博客园&…

2021安徽舒城中学高考成绩查询,2021安徽省地区高考成绩排名查询,安徽省高考各高中成绩喜报榜单...

怀宁中学芜湖2017年芜湖市高考文科头名是来自于芜湖师大附中的唐逸云,高考成绩653分。2017年芜湖市高考理科头名是来自于芜湖师大附中的茅志鹏,高考成绩676分。师大附中芜湖一中淮南淮南二中文科考生最高分631(市应届生第一名),理科考生最高分…

CentOS7挂载nfs盘快速指南

A服务器做服务端: 1、安装nfs相关软件,实际上是基于rpc协议的 yum install -y nfs-utils rpcbind2、设置共享目录 mkdir -p /data/vi /etc/exports/data 192.168.139.71(rw,async,no_root_squash)#rw(来访者的权限,rw表示可读写&#xff0…

带毫秒的字符转换成时间(DateTime)格式的通用方法

C#自身有更好的方式,Net任意String格式转换为DateTime类型 原文 好久没更新日志了,添加个方法吧,本身没有什么技术可言,为了能方便大家,我稍微整理一下咯~ 带毫秒的字符转换成时间(DateTime&#xff09…

陕西省2021年高考成绩结果查询,陕西招生考试信息网:2021年陕西高考成绩查询入口、查分系统...

【摘要】为了方便陕西高考考生能及时查询到2021年高考成绩,高考频道特别整理了的陕西招生考试信息网2021年陕西高考成绩查询入口、查分系统,考生可在成绩公布时直接点击下面的链接进行查分,预祝大家金榜题名!自陕西招生考试信息网…

SpringBoot 2.3.x 分层构建 Docker 镜像实践

目录[-] . 一、什么是镜像分层. 二、SpringBoot 2.3.x 新增对分层的支持. 三、创建测试的 SpringBoot 应用. 1、Maven 中引入相关依赖和插件. 2、创建测试的 Controller 类. 3、创建 SpringBoot 启动类. 四、创建两种构建镜像的 Dockerfile 脚本. 1、普通镜像构建脚本文件 doc…

Net任意String格式转换为DateTime类型

方式一:Convert.ToDateTime(string) Convert.ToDateTime(string) 注意:string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方式二:Convert.ToDateTime(string, IFormatProvider) DateTimeFormatInfo dtFormat new System.Globalizatio…

jsonp的简单学习

前言:说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务…

win7台式计算机怎么连热点,怎么用台式电脑开热点,电脑怎么开热点win7

导读:手机是每个人的随身携带之物,手机的功能让越来越多的人痴迷其中,也正是因为这个原因,手机流量的消耗也越来越多,购买流量让我们花费了很多金钱,我们该如何解决这个问题呢?下面我们就一起来看看电脑的…

Jenkins 与 Kubernetes 的 CI 与 CD Git + Maven + Docker+Kubectl

目录[-] . 一、Kubernetes 部署 Jenkins. 1、NFS 存储卷创建 Jenkins 目录. 2、创建 Jenkins 用于存储的 PV、PVC. 3、创建 ServiceAccount & ClusterRoleBinding. 4、创建 Service & Deployment. 5、获取 Jenkins 生成的 Token. 6、启动 Jenkins 进行初始化. 二、Jen…

WebLogic11g-创建域(Domain)及基本配置

2019独角兽企业重金招聘Python工程师标准>>> 最近看到经常有人提问weblogic相关问题,所以闲暇之际写几篇博文(基于weblogic11),仅供大家参考。 具体weblogic的介绍以及安装,这里就不赘述了。 以域的创建开篇…

Asp.Net回车键触发Button的OnClick事件解决方案

在aspx页面有textbox文本框,还有三个button按钮。启用textbox的TextChanged事件和button的click事件。 问题: 现在在textbox文本框输入完数据按“回车”后,会触发TextChanged事件,但同时还会触发该页面第一个button按钮的Click事…

计算机教室规则英语作文,班级规则初中英语作文

【导语】无规则不成方圆,班级亦是如此,也拥有属于它的规章制度。下面是无忧考网为你整理的有关班级规则初中英语作文,希望你喜欢!【篇一】班级规则初中英语作文Students should get to school for a half-hour reading before 7:30. Everyone…

Pandas 统计分析基础 笔记4 任务4.4 使用分组聚合进行组内计算

文章目录 pandas_任务4.4 使用分组聚合进行组内计算4.4.1 使用groupby方法拆分数据 代码 4-51 对菜品订单详情表依据订单编号分组代码 4-52 GroupBy 类求均值,标准差,中位数代码 4-53 agg和aggregate函数的参数及其说明代码 4-54 使用agg分别求字段的不同统计量代码 4-55 使用…

陕西理工大学计算机科学与技术系,陕西理工大学计算机科学与技术专业2016年在陕西理科高考录取最低分数线...

类似问题答案南京理工大学计算机类(计算机科学与技术、软件工程、网络工程、智能科学与工程)专业2...学校 地 区 专业 年份 批次 类型 分数 南京理工大学 陕西 计算机类(计算机科学与技术、软件工程、网络工程、智能科学与工程) 2016 一批 理科 563 南京理工大学 陕西 计算机类…

高拍仪拍照SDK开发(良田影像S300L|S500L)

高拍仪拍照SDK开发下载地址:点击下载 本SDK适用于:良田影像S300L|S500L 高拍仪如图: SDN开发包安装之后找到安装目录,如图: 大家找到各自需要的版本即可,需要注意的是如果需要上传图片到服务器的话&#…

Pandas 文件读取和导出

Pandas 文件读取和导出 更新时间:2020-12-28 00:16:20标签:pandas io 说明 Pandas 中文教程修订中,欢迎加微信 sinbam 提供建议、纠错、催更。查看更新日志 我们拿到的数据一般是 CSV、Excel 等格式,将文件加载到 Pandas 的 D…

gitlab的用户使用手册

最近比较忙,没时间写博客,今天来的早所以写一篇关于gitlab的使用手册分享给大家。目录一、账户/项目申请二、登陆与修改密码三、SSH Key导入四、上传/下载代码1、上传(用户系统为linux)2、下载(用户系统为linux&#x…

学计算机多久能拿证,计算机证书多久能领取 什么时候拿

计算机证书多久能领取,什么时候能拿,小编整理了相关信息,希望会对大家有所帮助!计算机证书什么时候能领取1、一般情况下是考试结束后50个工作日左右出成绩及出证。全国计算机等级考试证书一年两次考试。每年的3月与9月考试。2、证…