Yolov5训练自己的数据集(windows10)

环境配置+训练数据集

一.Anaconda 的安装教程(图文)

  1. Anaconda下载
    下载地址:https://www.anaconda.com/download/
    我选择了64位 windows版本

  2. Anaconda安装
    安装位置:C盘若是固态的话,装在C盘速度会很快,但是以后的各种包都会安装在C盘,空间是个问题;我因为C盘空间位置小,装在了D盘
    环境变量:一定勾选

    最后的界面可以取消两个对勾,Finish即可

  3. Anaconda试用
    安装完成以后,开始菜单出现如下界面,其中的Anaconda Prompt就是我们以后的编辑地址,相当于cmd

二.Yolov5环境配置

在环境配置开始之前,有一个非常好用的加速方式,就是下载各类库的过程中提速,就是使用清华源。
我们在pip的时候 在后边加上-i https://pypi.tuna.tsinghua.edu.cn/simple
例如,我们下载gevent库的时候pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent,速度很快

  1. 创建虚拟环境
conda create -n yolov5 python=3.7
activate yolov5

“yolov5”是环境名,当然可以自己定义。
python版本这里指定为3.7;如果不指定,默认安装3.8的。
以后打开Anaconda Prompt后进入环境的方法为:

activate yolov5

以后所有关于yolov5的操作,均在这一个环境里边,激活环境如下操作
2. 安装cuda和cudnn
此时已经在yolov5环境下了

conda install cudatoolkit==10.2.89
conda install cudnn==7.6.5

如果选择其他版本cuda,cuda版本必须和cudnn对应。此处选择cuda10.2。
3. 下载源码
https://github.com/ultralytics/yolov5
解压到文件盘中如下所示

4. 下载权重文件 .pt文件
https://github.com/ultralytics/yolov5/releases/tag/v5.0
下拉,下载这四个即可,直接下载到yolov5大文件夹下

直接下载到yolov5-master大文件夹下


5.下载各类配置文件
进入到yolov5-master中

在此之前需要安装pycocotools
这里提供百度云链接:https://pan.baidu.com/s/1gxI7a_-68-NyU67wQMIDJw
提取码:tpbj

可以放在yolov5-master大文件夹下

 cd cocoapi/PythonAPIpython setup.py build_ext install

进行安装pycocotools
接下来是其他配置文件的安装,等待即可

pip install -U -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

6.下载pytorch

登录网站https://pytorch.org/
这里使用pip下载,选用稳定版本,cuda10.2

pip3 install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

环境配置结束!!!!

三.数据集训练

编译器我使用的是PyCharm
使用虚拟环境

1.Labelimg 标注
得到image图片与xml文件

pip install labelImg

安装

labelImg

启动
2.文件转换
在一个文件夹中

新建四个文件夹
Annotations 存放标注后的xml文件–需要自己置入
images 存放原图–需要自己置入
ImageSets 存放test train val trainval 的txt文件,将xml文件分类
labels 存放转化成功的txt文件,用于输入yolov5中

(1)编写makeTxt.py文件,生成txt文件于ImageSets中将Annotations中的xml文件分类

import os
import randomtrainval_percent = 0.2
train_percent = 0.8
xmlfilepath = './Annotations'
txtsavepath = './ImageSets'
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/trainval.txt', 'w')
ftest = open('./ImageSets/test.txt', 'w')
ftrain = open('./ImageSets/train.txt', 'w')
fval = open('./ImageSets/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()

运行结果

(2)编写voc_label文件,按照ImageSets中将Annotations中的xml文件分类,按照 ImageSets中的test train val trainval 的txt文件 读取xml 文件,转换为txt文件,并将文件分为train val test,最后也将txt文件至于label文件夹中

#train 训练集 val训练中的测试集,是为了让你在边训练边看到训练的结果,及时判断学习状态 test就是训练模型结束后,用于评价模型结果的测试集

# xml解析包
import xml.etree.ElementTree as ET
import pickle
import os
# os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
from os import listdir, getcwd
from os.path import joinsets = ['train', 'test', 'val']
#train 训练集 val训练中的测试集,是为了让你在边训练边看到训练的结果,及时判断学习状态
#test就是训练模型结束后,用于评价模型结果的测试集。classes = ['red','yellow','blue']# 进行归一化操作
def convert(size, box): # size:(原图w,原图h) , box:(xmin,xmax,ymin,ymax)dw = 1./size[0]     # 1/wdh = 1./size[1]     # 1/hx = (box[0] + box[1])/2.0   # 物体在图中的中心点x坐标y = (box[2] + box[3])/2.0   # 物体在图中的中心点y坐标w = box[1] - box[0]         # 物体实际像素宽度h = box[3] - box[2]         # 物体实际像素高度x = x*dw    # 物体中心点x的坐标比(相当于 x/原图w)w = w*dw    # 物体宽度的宽度比(相当于 w/原图w)y = y*dh    # 物体中心点y的坐标比(相当于 y/原图h)h = h*dh    # 物体宽度的宽度比(相当于 h/原图h)return (x, y, w, h)    # 返回 相对于原图的物体中心点的x坐标比,y坐标比,宽度比,高度比,取值范围[0-1]# year ='2012', 对应图片的id(文件名)
def convert_annotation(image_id):'''将对应文件名的xml文件转化为label文件,xml文件包含了对应的bunding框以及图片长款大小等信息,通过对其解析,然后进行归一化最终读到label文件中去,也就是说一张图片文件对应一个xml文件,然后通过解析和归一化,能够将对应的信息保存到唯一一个label文件中去labal文件中的格式:calss x y w h  同时,一张图片对应的类别有多个,所以对应的bunding的信息也有多个'''# 对应的通过year 找到相应的文件夹,并且打开相应image_id的xml文件,其对应bund文件in_file = open('./Annotations/%s.xml' % (image_id), encoding='utf-8')# print(in_file.name)# 准备在对应的image_id 中写入对应的label,分别为# <object-class> <x> <y> <width> <height>out_file = open('./labels/%s.txt' % (image_id), 'w', encoding='utf-8')# print(out_file.name)# 解析xml文件tree = ET.parse(in_file)# 获得对应的键值对root = tree.getroot()# 获得图片的尺寸大小size = root.find('size')# 获得宽w = int(size.find('width').text)# 获得高h = int(size.find('height').text)# 遍历目标objfor obj in root.iter('object'):# 获得difficult ??difficult = obj.find('difficult').text# 获得类别 =string 类型cls = obj.find('name').text# 如果类别不是对应在我们预定好的class文件中,或difficult==1则跳过if cls not in classes or int(difficult) == 1:continue# 通过类别名称找到idcls_id = classes.index(cls)# 找到bndbox 对象xmlbox = obj.find('bndbox')# 获取对应的bndbox的数组 = ['xmin','xmax','ymin','ymax']b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))print(image_id, cls, b)# 带入进行归一化操作# w = 宽, h = 高, b= bndbox的数组 = ['xmin','xmax','ymin','ymax']bb = convert((w, h), b)# bb 对应的是归一化后的(x,y,w,h)# 生成 calss x y w h 在label文件中out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')# 返回当前工作目录
wd = getcwd()
print(wd)for image_set in sets:'''对所有的文件数据集进行遍历做了两个工作:1.讲所有图片文件都遍历一遍,并且将其所有的全路径都写在对应的txt文件中去,方便定位2.同时对所有的图片文件进行解析和转化,将其对应的bundingbox 以及类别的信息全部解析写到label 文件中去最后再通过直接读取文件,就能找到对应的label 信息'''# 先找labels文件夹如果不存在则创建if not os.path.exists('./labels/'):os.makedirs('./labels/')# 读取在ImageSets/Main 中的train、test..等文件的内容# 包含对应的文件名称image_ids = open('./ImageSets/%s.txt' % (image_set)).read().strip().split()# 打开对应的2012_train.txt 文件对其进行写入准备list_file = open('./%s.txt' % (image_set), 'w')# 将对应的文件_id以及全路径写进去并换行for image_id in image_ids:list_file.write('./images/%s.jpg\n' % (image_id))# 调用  year = 年份  image_id = 对应的文件名_idconvert_annotation(image_id)# 关闭文件list_file.close()

运行结果如下

注意分类 classes = ['red','yellow','blue'] 按照自己的来

3.yolov5中文件导入
在data/script中新建 “你自己的项目名”文件夹 我这里是FASC

里边内容为

分别存放原图和txt标注文件
接下来在scripts文件中创建FASC.yaml文件

# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/
# Train command: python train.py --data voc.yaml
# Default dataset location is next to /yolov5:
#   /parent_folder
#     /VOC
#     /yolov5# download command/URL (optional)
#download: bash data/scripts/get_voc.sh# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: E:\yolov5-master\data\scripts\FASC\images
val: E:\yolov5-master\data\scripts\FASC\images  # number of classes
nc: 3# class names
names: [ 'red','yellow','blue']

其中路径为训练集和验证集的输入,这里设为同一路径,有余力可以进行细分。nc为类别数,names为类别与上文voc_label.py中的顺序对应

编辑yolov5-master下的train.py文件

接着运行,如果遇到报错建议更改batch-size大小
随后得到权重文件在weight中生成pt文件

最后编辑detect.py文件

修改这两处,放的都是绝对路径,一个是best.pt的路径,一个是需要检测的图片路径,也可以是视频的路径,输入0直接为摄像头。

指定位置查看结果!!
结束!!

谢谢观看,出现问题及时交流!!

Yolov5训练自己的数据集(windows10)相关推荐

  1. Windows10+YOLOv5训练自己的数据集

    Windows10+YOLOv5训练自己的数据集 一.环境和配置 1.1 安装anaconda 1.2 在anaconda中安装pytorch虚拟环境 1.3 安装CUDA和cudnn 1.4 安装p ...

  2. YOLOv5训练自己的数据集(超详细)

      目录 一.准备深度学习环境 二. 准备自己的数据集 1.创建数据集 2.转换数据格式 3.配置文件 三.模型训练 1.下载预训练模型 2.训练 四.模型测试 五.模型推理 YOLOv5训练自己的数 ...

  3. yolov5训练自己的数据集

    How to Train YOLOv5 On a Custom Dataset   根据这篇文章下的数据集 YOLOv5训练自己的数据集   根据这篇文章,输入训练命令行 Hyperparameter ...

  4. 手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 本文主要介绍目标检测YOLOV5算法来训练自己的数据集,并且使用TensorRT来对训练好的模型 ...

  5. Yolov5训练自己的数据集+TensorRT加速+Qt部署

    本人由于项目要求,需要利用Yolov5网络训练自己的目标检测与分类模型,并利用TensorRT加速将其部署到Qt界面上.目前已经实现了整个流程,写下这篇博客供需要的各位参考.(本文描述的重点主要是在后 ...

  6. YOLOv5训练自己的数据集实现视频的识别

    写在前面 我本来是使用这个模型进行手写签名的定位,但是因为比赛的主办方原因,数据不允许公开,所以我使用动物世界的一段开头视屏来制作我的数据集.这整个模型跑通的过程中,我参考了很多不错的博客,写这篇博客 ...

  7. yolov5训练自己的数据集,OpenCV DNN推理

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为4238字,预计阅读9分钟 前言 上一篇<OpenCV--自学笔记>搭建好了yolov5的环境,作为目标检测在应用中 ...

  8. YOLOv5训练自己的数据集之详细过程篇

    软硬件配置:Ubuntu + Tesla m40 24GB + cuda10.2 + anaconda 一.环境部署 1.源码下载 https://github.com/ultralytics/yol ...

  9. 深度学习目标检测---使用yolov5训练自己的数据集模型(Windows系统)

    目录 0    前言 1.从githab上克隆yolov5代码 1.1 yolov5网络project克隆 1.2 项目代码结构的整体介绍 1.3 深度学习环境的配置和安装yolov5所需要的库 2. ...

最新文章

  1. 比Spring简单的IoC容器
  2. java.util.ConcurrentModificationException异常原因及解决方法
  3. java吃豆游戏_利用java编写的精灵吃豆的游戏
  4. Linux信号 四 异步等待信号与同步等待信号接口
  5. 企业应用“数据优先”革命的下一个主战场:安全与运营
  6. 奥鹏20年12月作业考核(C语言专科),《C语言(专科)》20年12月作业考核【答案100分】...
  7. css让背景图片显示透明遮罩_CSS项目测试(支持深色模式)
  8. 获取java 私有属性或 方法
  9. UIPikerView的属性和使用方法
  10. J.U.C - AQS
  11. hdu-5645 DZY Loves Balls(水题)
  12. 7、python数据框重复值的查找和删除
  13. Assets Error Listings APP-OFA-XXXX (文档 ID 1460268.1)
  14. DCT和IDCT原始公式计算
  15. 【GIF图片】用PS生成背景透明的GIF图片出现帧叠加的现象
  16. warp-transducer源码安装,warprnnt_pytorch生成
  17. 苹果计算机恢复计算器,苹果自带计算器删除怎么恢復
  18. dva介绍和官网案例
  19. Flutter 布局之企鹅电竞
  20. fragment 中调用getactivity()的时候报 nullpoint错误

热门文章

  1. 数据库驱动(JDBC Driver)jar包下载
  2. centos7 挂载 硬盘 shell 懒人系列-2
  3. linux下的go富集分析,GO富集分析(R包GOseq)
  4. lftp下载文件无法覆盖,提示 file already existst and xfer:clobber is unset 问题解决
  5. ARM体系架构—ARMv7-A处理器模式及寄存器
  6. zygote启动过程
  7. idea 断点线程_在IntelliJ IDEA中多线程并发代码的调试方法详解
  8. node.js卸载与重装
  9. springboot整合redis报错org.springframework.beans.factory.UnsatisfiedDependencyException
  10. tif文件转为shp文件_arcgis中tif转成shp