yolov5-7.0训练自己的VOC数据集
yolov5-7.0训练自己的VOC数据集
这个笔记可能只适用于7.0版本的,写这个笔记主要是给工作室伙伴参考的,大佬请绕行
有错误之处欢迎指出
一、下载
yolov5的GitHub仓库地址:Release v7.0 - YOLOv5 SOTA Realtime Instance Segmentation · ultralytics/yolov5 (github.com)
需要下载源码和预训练模型
将源码解压,在其文件夹里面新建一个weights文件夹,把下载的预训练模型放入
二、配置yolov5训练环境
在yolov5的文件夹下进入终端环境,或者在终端下进入yolov5的目录
或者
1.使用anaconda创建虚拟环境
创建环境指令:conda create -n yolov5 python=3.8
该指令在创建一个名为yolov5的虚拟环境的同时在该环境里面预装python3.8
创建完成会有如下输出
激活并进入创建的yolov5环境
指令:conda activate yolov5
成功进入环境之后在路径前面会显示环境名称
2.在创建的环境里面安装cuda工具包(cudatoolkit)和cudnn
安装指令:conda install cudatoolkit=11.3 cudnn
该指令在当前环境安装11.3版本的cuda工具包和最新版本的cudnn
也可以使用:conda install cudatoolkit=10.2 cudnn=7.6.5
安装10.2的cuda工具包,和7.6.5的cudnn
安装完成之后会显示
3.在环境里面配置yolov5所需的python库
安装指令:pip install -r requirements.txt
使用清华源镜像安装指令:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
安装完成会有如下显示
4.测试环境
此测试主要为了测试环境里面安装的torch能否启动gpu进行训练
在终端里面进入python环境
测试指令:
import torch
torch.cuda.is_available()
依次输入,若返回结果为True
则说明环境gpu可用,反之则不然
像下面这种则不行
重新安装pytorch
卸载指令:pip uninstall torch
进入pytorch官网
按照自己的环境配置选择,并复制下方指令,在其后面加入清华源链接安装
安装完成之后再次测试,结果如下即可
到此,环境配置完成
三、准备数据集
1.数据集格式
此教程使用voc数据集进行训练,下面以VOC2007为例
VOC2007
|—— Annotations #存放.xml标签文件,与图片一一对应
| |——000001.xml
| |——000002.xml
| |——……
|—— JPEGImages #存放.jpg图片文件
| |——000001.jpg
| |——000002.jpg
| |——……
|—— ImageSets #存放训练索引文件,txt文件里面每行对应一张图片名称
| |——Main
| | |——train.txt
| | |——val.txt
| | |——trainval.txt
| | |——test.txt
| | |——text.txt
图片标记建议使用labelimg(请自行百度搜索使用方法)
2.数据集划分
ImageSets/Main里面的数据集划分可以使用下面代码
创建一个python文件,将下面代码复制过去
# 划分VOC数据集
import os
import randomdatasets_path = r'D:\test_file\VOCdevkit\VOC2007/' # 数据集路径trainval_percent = 0.8
train_percent = 0.7
xml_path = datasets_path + 'Annotations'
txtsavepath = datasets_path + 'ImageSets/Main'
total_xml = os.listdir(xml_path)num = len(total_xml)
list1 = range(num)
tmtp = int(num * trainval_percent)
trp = int(tmtp * train_percent)
trainval = random.sample(list1, tmtp)
train = random.sample(trainval, trp)with open(datasets_path + 'ImageSets/Main/trainval.txt', 'w') as ftrainval, \open(datasets_path + 'ImageSets/Main/test.txt', 'w') as ftest, \open(datasets_path + 'ImageSets/Main/train.txt', 'w') as ftrain, \open(datasets_path + 'ImageSets/Main/val.txt', 'w') as fval:for i in list1:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)
将准备好的数据集存放于yolov5目录下的data里面,如下
3.创建yolov5的训练数据
在yolov5/data下创建一个新文件,用于生成label以及复制文件
import xml.etree.ElementTree as ET
from tqdm import tqdm
from utils.general import Pathdef convert_label(path, lb_path, year, image_id):def convert_box(size, box):dw, dh = 1. / size[0], 1. / size[1]x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]return x * dw, y * dh, w * dw, h * dhin_file = open(path / f'VOC{year}/Annotations/{image_id}.xml')out_file = open(lb_path, '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)names = ['besom', 'heikuai', 'heiqiu', 'leaf', 'plastic', 'stone', 'branch', 'brokenshell', 'cereal', 'chip','guazi', 'heizhi', 'paper', 'seed', 'straw', 'bamboo', 'Besom', 'hagberry', 'hair','SayakaShell'] # 所有数据集类别for obj in root.iter('object'):cls = obj.find('name').textif cls in names and int(obj.find('difficult').text) != 1:xmlbox = obj.find('bndbox')bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')])cls_id = names.index(cls) # class idout_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n')# Download
dir = Path('D:\\study_documents\\test_file\\test\\yolov5-master\\data') # 数据集路径,这里需要写到VOC数据集的上一级路径
# Convert
path = dir / ''
for year, image_set in ('2007', 'train'), ('2007', 'val'), ('2007', 'test'):imgs_path = dir / 'images' / f'{image_set}{year}'lbs_path = dir / 'labels' / f'{image_set}{year}'imgs_path.mkdir(exist_ok=True, parents=True)lbs_path.mkdir(exist_ok=True, parents=True)with open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt') as f:image_ids = f.read().strip().split()for id in tqdm(image_ids, desc=f'{image_set}{year}'):f = path / f'VOC{year}/JPEGImages/{id}.jpg' # old img pathlb_path = (lbs_path / f.name).with_suffix('.txt') # new label pathf.rename(imgs_path / f.name) # move imageconvert_label(path, lb_path, year, id) # convert labels to YOLO format
这个代码可以使用data/VOC.yaml里面的数据集划分代码
4.修改配置文件
1.修改data/voc.yaml
2.修改models/yolov5s.yaml
3.修改train.py
主要是上面标红的几个,按照自己修改的配置即可
四、训练与检测
1.开始训练
按照以上修改之后可以直接运行train.py
2.检测
修改detect.py
修改自己参数运行即可
yolov5-7.0训练自己的VOC数据集相关推荐
- mmdetection训练自己的VOC数据集及常见问题
训练自己的COCO数据集及常见问题见下文: mmdetection训练自己的COCO数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客 目录 一.环境安装 二.训练测试步骤 三.常见问题 bat ...
- mmdetectionV2.x版本 训练自己的VOC数据集
mmdetectionV2.x版本 训练自己的VOC数据集 1 首先根据规范的VOC数据集导入到项目目录下,如下图所示: mmdetection ----mmdet ----tools ----con ...
- mmdetection的安装并训练自己的VOC数据集
mmdetection的安装并训练自己的VOC数据集 mmdetection的安装与VOC数据集的训练 一. mmdetection的安装 1.使用conda创建虚拟环境 2.安装Cython 3.安 ...
- 在服务器上利用mmdetection来训练自己的voc数据集
在服务器上利用mmdetection来训练自己的voc数据集 服务器上配置mmdetection环境 在服务器上用anaconda配置自己的环境 进入自己的虚拟环境,开始配置mmdetection 跑 ...
- yolov5 v3.0训练出现KeyError错误
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 yolov5 v3.0训练出现KeyError错误 文章目录: 1 错误原因分析 2 错误解决方式 1 错误原因分析 出 ...
- 【学习记录】win10搭建YOLOX训练自己的VOC数据集
我是目录: 前言: 1.yolox的训练配置 2.yolox源码 3.必要的环境 配置yolox所需环境 1.安装依赖库 2.安装yolox 3.安装apex 4.下载预训练模型 4.准备自己的数据集 ...
- 【目标检测实战学习】从零开始制作并训练自己的VOC数据集,并使用Retinanet进行目标检测
目录 基础软件安装 项目来源 环境配置 使用LabelImg给图片打标签 数据增强 划分训练集,测试集 模型训练 将验证集结果可视化 首先写一下我们这个项目的思路 1.下载图片,网上随便找 2.使用L ...
- YOLOv7训练自己的VOC数据集
YOLOv7源码:https://github.com/WongKinYiu/yolov7 本文是对YOLOV7训练自己的yolo数据集的扩展,具体训练等步骤不再详细赘述,遇到看不懂的请移步YOLOV ...
- yolov5 v3.0训练报错: torch.nn.modules.module.ModuleAttributeError: ‘BatchNorm2d‘ object has no attribute
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 yolov5 v3.0版本训练报错:torch.nn.modules.module.ModuleAttributeErr ...
最新文章
- Python零基础入门(1)——Linux下编程图形化界面的安装
- python算法书籍-有哪些用 Python 语言讲算法和数据结构的书?
- jquery中的DOM操作集锦
- mysql 连接器配置_配置连接器 - 金融分布式架构 SOFAStack - 阿里云
- html自定义列表第三层嵌套,【微信小程序】关于微信小程序多层嵌套渲染列表以及嵌套列表中数据的获取...
- java 如何实现对象克隆_Java对象克隆
- 作者:马晓磊(1985-),男,北京航空航天大学交通科学与工程学院交通运输工程系副教授、博士生导师。...
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
- iOS 14.5广告跟踪功能使广告商在安卓支出增长21%
- android studio如何设置输出值的小数点_C语言基础知识:printf的输出格式,C/C++语言编程讲解...
- jquery ztree 设置勾选_zTree 勾选checkbox
- jQuery实现点击复制文本效果
- MATLAB 中跳出if条件判断
- 新冠疫情加速了通信数字化——全球云通信发展分析
- 因果推断-PSM的原理及python实现
- Tableau9——计算字段
- 当 update 修改数据与原数据相同时会被更新吗?
- 微软浏览器edge对日期Date对象format(yyyy-mm-dd)/getDiff()方法不识别
- 软件复用及构件、C/S与B/S混合模型及实战项目技术简述
- FleaPHP 的 Ajax 支持和 WebControls
热门文章
- clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdepreca
- idea编写HTML代码常用快捷键
- about android source code
- 华为freebuds 5无线充电充不上电怎么办?
- 中国潮汐能行业深度分析与投资前景战略研究报告2022-2028年版
- Nature全球潮汐可视化兼影像数据下载网站:Intertidal change
- 关闭后台App刷新后台应用刷新是做什么的
- JavaScript之E6语法
- 如何定义研发 KPI:以团队速度为标准
- oracle如何查询时间格式,oracle时间格式讨论