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数据集相关推荐

  1. mmdetection训练自己的VOC数据集及常见问题

    训练自己的COCO数据集及常见问题见下文: mmdetection训练自己的COCO数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客 目录 一.环境安装 二.训练测试步骤 三.常见问题 bat ...

  2. mmdetectionV2.x版本 训练自己的VOC数据集

    mmdetectionV2.x版本 训练自己的VOC数据集 1 首先根据规范的VOC数据集导入到项目目录下,如下图所示: mmdetection ----mmdet ----tools ----con ...

  3. mmdetection的安装并训练自己的VOC数据集

    mmdetection的安装并训练自己的VOC数据集 mmdetection的安装与VOC数据集的训练 一. mmdetection的安装 1.使用conda创建虚拟环境 2.安装Cython 3.安 ...

  4. 在服务器上利用mmdetection来训练自己的voc数据集

    在服务器上利用mmdetection来训练自己的voc数据集 服务器上配置mmdetection环境 在服务器上用anaconda配置自己的环境 进入自己的虚拟环境,开始配置mmdetection 跑 ...

  5. yolov5 v3.0训练出现KeyError错误

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 yolov5 v3.0训练出现KeyError错误 文章目录: 1 错误原因分析 2 错误解决方式 1 错误原因分析 出 ...

  6. 【学习记录】win10搭建YOLOX训练自己的VOC数据集

    我是目录: 前言: 1.yolox的训练配置 2.yolox源码 3.必要的环境 配置yolox所需环境 1.安装依赖库 2.安装yolox 3.安装apex 4.下载预训练模型 4.准备自己的数据集 ...

  7. 【目标检测实战学习】从零开始制作并训练自己的VOC数据集,并使用Retinanet进行目标检测

    目录 基础软件安装 项目来源 环境配置 使用LabelImg给图片打标签 数据增强 划分训练集,测试集 模型训练 将验证集结果可视化 首先写一下我们这个项目的思路 1.下载图片,网上随便找 2.使用L ...

  8. YOLOv7训练自己的VOC数据集

    YOLOv7源码:https://github.com/WongKinYiu/yolov7 本文是对YOLOV7训练自己的yolo数据集的扩展,具体训练等步骤不再详细赘述,遇到看不懂的请移步YOLOV ...

  9. yolov5 v3.0训练报错: torch.nn.modules.module.ModuleAttributeError: ‘BatchNorm2d‘ object has no attribute

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 yolov5 v3.0版本训练报错:torch.nn.modules.module.ModuleAttributeErr ...

最新文章

  1. Python零基础入门(1)——Linux下编程图形化界面的安装
  2. python算法书籍-有哪些用 Python 语言讲算法和数据结构的书?
  3. jquery中的DOM操作集锦
  4. mysql 连接器配置_配置连接器 - 金融分布式架构 SOFAStack - 阿里云
  5. html自定义列表第三层嵌套,【微信小程序】关于微信小程序多层嵌套渲染列表以及嵌套列表中数据的获取...
  6. java 如何实现对象克隆_Java对象克隆
  7. 作者:马晓磊(1985-),男,北京航空航天大学交通科学与工程学院交通运输工程系副教授、博士生导师。...
  8. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
  9. iOS 14.5广告跟踪功能使广告商在安卓支出增长21%
  10. android studio如何设置输出值的小数点_C语言基础知识:printf的输出格式,C/C++语言编程讲解...
  11. jquery ztree 设置勾选_zTree 勾选checkbox
  12. jQuery实现点击复制文本效果
  13. MATLAB 中跳出if条件判断
  14. 新冠疫情加速了通信数字化——全球云通信发展分析
  15. 因果推断-PSM的原理及python实现
  16. Tableau9——计算字段
  17. 当 update 修改数据与原数据相同时会被更新吗?
  18. 微软浏览器edge对日期Date对象format(yyyy-mm-dd)/getDiff()方法不识别
  19. 软件复用及构件、C/S与B/S混合模型及实战项目技术简述
  20. FleaPHP 的 Ajax 支持和 WebControls

热门文章

  1. clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdepreca
  2. idea编写HTML代码常用快捷键
  3. about android source code
  4. 华为freebuds 5无线充电充不上电怎么办?
  5. 中国潮汐能行业深度分析与投资前景战略研究报告2022-2028年版
  6. Nature全球潮汐可视化兼影像数据下载网站:Intertidal change
  7. 关闭后台App刷新后台应用刷新是做什么的
  8. JavaScript之E6语法
  9. 如何定义研发 KPI:以团队速度为标准
  10. oracle如何查询时间格式,oracle时间格式讨论