Yolov5-7.0:训练自己的检测数据集之保姆级教程

目录

1、创建python环境

2、yolov5-7.0下载

3、yolo目标检测

3.1 数据集准备

3.1.1 Labelimg工具标注

3.2 检测训练

3.2.1 划分训练和测试集 

3.2.2 创建yaml训练文件 

3.2.3 修改模型配置文件 

3.2.4 训练和测试

 4、yolo目标分类

4.1 数据集准备

 4.2 分类训练

5、yolo目标分割 


1、创建python环境

我的机器配置是,windows10系统下的cpu,毫无gpu。

跑通yolo,需要用到python语言。这里先介绍下安装python环境,如果已经有了直接跳到下一步。

python解释器下载icon-default.png?t=N7T8https://www.python.org/downloads/

点击上面链接,选择windows系统,下载python解释器的安装包。 

我这里选择的是python版本3.9.7,64位操作系统。

点击 windows installer(64-bit)后,下载的是个exe文件。双击该exe文件,图中两个选项勾选上,选择自定义安装路径(根据自己的习惯选择安装目录)。

下一步,最后等待安装,记得添加环境变量,按自己习惯选择安装目录。

安装成功后,win+r 打开终端,输入python,如下图,就表示安装成功了。

 如果不成功,或者想进一步了解python解释器的,可移步到我的另一篇文章。


windows下创建python虚拟环境icon-default.png?t=N7T8https://blog.csdn.net/weixin_47285222/article/details/141351119?spm=1001.2014.3001.5501

2、yolov5-7.0下载

可通过下面链接,从官网下载yolov5-7.0版本的代码。

yolov5-7.0链接icon-default.png?t=N7T8https://github.com/ultralytics/yolov5/tree/v7.0

我这里下载的是zip包,使用git工具下载也可。 

下载解压后,进入yolov5-7.0目录下,直接在该目录下敲入cmd命令,这样可直接以此目录打开终端,省去了win+r打开终端后,在cd进入该目录。

弹出终端后(默认大家已经安装了python解释器),输入下面命令,pip工具一键安装依赖包,这里加上了清华镜像源,速度会比较快。 

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

 yolov5-7.0版本中,有目标检测,分类,分割三部分的内容。接下来我会分别讲解

3、yolo目标检测

在主目录yolov5-7.0下,这些没有进一步划分目录的文件,大都是目标检测的相关文件。(备注:我这里用的是Pycharm集成工具,大家可自行安装)

首次运行detect.py(yolo目标检测的测试文件),会自动下载yolov5s.pt预训练权重文件,比较慢。大家点击下载链接,这样下载速度较快。


yolov5s.pt模型下载icon-default.png?t=N7T8https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt

我这里为了方便管理,主目录下新建了目录pre_weights,将下载的预训练权重文件都放在该目录下。对应修改detect.py文件中的默认参数,设备使用的是cpu。

再次运行detect.py,成功后,会将测试图片结果存放于 runs/detect/exp 目录下。

在上面测试中,用的是yolo自己的模型yolov5s,接下来大家可以用自己的数据集训练自己的检测模型。

3.1 数据集准备

数据集分为两种情况,一种是完全未标注的数据,只有原始图片的那种,一般具有私有属性;另外一种是开源数据集,一般都是标注好的。 

如果是完全未标注的数据集,可使用labelimg这个工具进行标注。

3.1.1 Labelimg工具标注

labelimg是一个开源的标注工具,在python环境内,安装命令如下:

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功后,以命令方式启动。打开cmd终端,这里python是基础环境,所以无需激活进入虚拟环境。输入labelimg,即可启动。启动后的界面,如下图所示。

点击工具栏中的Open Dir ,选择待标注图片的目录,这里我测试过具有文件夹穿透功能,尽量将所有图片放到同一目录下,且该目录是最后一层目录。点击Change Save Dir,选择标注后存放标签的目录。

设置好后,选择YOLO的标签格式,该工具包含三种标签格式:

YOLO格式(txt文档),可直接用于yolo代码中进行训练

VOC格式(xml文档),如果你有数据和对应的VOC格式的标签,可转成yolo格式,再去训练

CreateMl(json文档),这种格式我见得比较少,大家有需要可自行了解

接下来可对所有图片进行标注,w是画框的快捷键,画完框后可为每个框内物体定义类名,全部标注后记得save。

在保存目录下会生成n个标签文档,1个classes文档 ,标签文档以对应图片的名称命名。我这只标注了一张图像,所以只有一个标签文档。

其中,classes文档中记录了所有标签 (本次标注过程中出现的所有标签)。

每一个标签文档 m行5列,m表示该图片中的目标框个数。每一行的固定格式如下,标签号,表示框位置的坐标(x,y,w,h)。yolo中训练时会将标签全部映射为序号进行训练,所以这里的标签号等同于标签。坐标都是基于图片大小进行归一化后的。

3.2 检测训练

将标注好的数据(图片和标签),放到yolov5.0-7.0目录下。我这里是在data目录下创建了一个新目录mydata,该目录下又新建了images(存放图片文件)和labels(存放yolo格式的标签文档)目录,大家可按自己的习惯创建目录,后面代码中写清楚就行。

3.2.1 划分训练和测试集 

接下来,需要生成训练、验证以及测试集的文档,比例以8:1:1。我这还是按照上面目录,大家需要根据自己的目录,自行更改。

import os
import random

#数据集根目录,大家可根据自己的目录路径修改
root_path = 'F:\Amode\yolov5-7.0\data\mydata'

#训练,验证和测试比例,8:1:1
train_precent = 0.8
val_percent = 0.1
test_percent = 0.1

#图片目录和标签目录
img_path = os.path.join(root_path,'images')
txt_path = os.path.join(root_path,'labels')

#图片总数量,图片和标签一一对应,数量一致,命名一致
imgname_list = os.listdir(img_path)
nums = len(imgname_list)

#根据比例确定不同集合的数据数量
train_num = int(nums * train_precent)
val_num = int(nums * val_percent)
test_num = int(nums * test_percent)

#根据数量,随机分配数据
train_index = random.sample(range(nums),train_num)
vt_index = set(range(nums))-set(train_index)
val_index = random.sample(list(vt_index),val_num)
test_index  = list(set(vt_index)-set(val_index))

#分别写入
with open(os.path.join(root_path,'train.txt'),'w') as f:
    for i in train_index:
        name = imgname_list[i]
        path = os.path.join(img_path,name)
        f.write(path)
        f.write('\n')

with open(os.path.join(root_path,'val.txt'),'w') as f:
    for i in val_index:
        name = imgname_list[i]
        path = os.path.join(img_path, name)
        f.write(path)
        f.write('\n')

with open(os.path.join(root_path,'test.txt'),'w') as f:
    for i in test_index:
        name = imgname_list[i]
        path = os.path.join(img_path, name)
        f.write(path)
        f.write('\n')

执行完上面代码,会将生成的文件放置于数据目录 data/mydata下。

在每个txt文档中,描述的是每张图片的绝对路径 。

3.2.2 创建yaml训练文件 

在data目录下,创建一个新的yaml文件(复制该目录下的coco.yaml文件重新命名即可),我这里命名为mydata.yaml。

该yaml文件只需要如下图片中的内容,其余的都可注释掉。这里的相对路径以及类别标签,大家还是得根据自己的情况修改。

如果和我创建的目录一致,图中上面红框中的内容直接照抄就可了,下面的类别标签呢,按照你数据集中label目录下的classes文档依次填写,前面的序号保留。

path: 数据集的根目录,相对于yolov5.0-7.0主目录的相对路径

train/val/test:是相对于path的路径

3.2.3 修改模型配置文件 

yolo的模型配置文件在models目录下,提供了x,s,n,m,l五个版本,是逐渐增大的(模型越大,训练时间也越长),根据要使用的预训练权重文件,更改其中的nc(类别数量)参数。

我们之前下载过yolov5s,也是准备要用的,所以修改的是对应的yolov5s.yaml文件,nc为3。

3.2.4 训练和测试

主目录下的train.py,就是目标检测的训练脚本。

两种方式,一种是直接其中的默认参数;另一种则是在运行train.py文件时,直接用命令的方式进行赋值,其中:

--weights :加载预训练权重文件的路径

--data:训练数据集的yaml文件

--epoch:训练轮数,如果只是测试,设置小点就行

--batch-size:每一轮训练,分几个批次喂数据,和机器配置有关,尽量小点

下图是直接train.py中修改参数的默认值,修改后,可直接执行train.py脚本就行。

下面是使用命令的方式执行train.py脚本,并对参数进行赋值。

python train.py --weights=./'model'/'yolov5s.pt' --cfg=./data/mydata.yaml'

训练之后的文件默认是放在 run/train/exp 目录下,模型放在该目录下的weights目录下。

如果想测序下新模型的效果,执行主目录下的detect.py脚本 ,前面有讲解过。里面一些参数可能需要修改。

weights是要用到的推理模型路径,用我们自己新训练出来的模型,source是要测试的图片路径。

 4、yolo目标分类

主目录下的classify文件夹中的所有文件都是用于分类的。其中,predict.py就是预测,也是测试。

和目标检测一样的套路,大家可以先运行测试脚本,会自动下载预训练模型,还是推荐手动下载。

yolov5s-cls模型icon-default.png?t=N7T8https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s-cls.pt我这里还是将下载的模型放在了自己创建的pre_weights目录下,上面已经说过了。

4.1 数据集准备

数据呢,还是分两种,私有和开源数据集。分类数据集不同于目标检测数据集需要标注,分类的只需要人工将同一类的数据挑选出来放置到同一文件夹内,并为该类定义一个类名。

接下来我就以手写数字识别开源数据集mnist为例。

mnist数据集icon-default.png?t=N7T8https://github.com/ultralytics/yolov5/releases/download/v1.0/mnist.zip大家想下载一些开源的分类数据集,修改classify/train.py 中的data参数,执行该脚本,会自动下载数据集,这种速度比较慢,大家可点击链接直接下载。图中链接后面表示将数据压缩包,下载到该指定文件夹。

我这里就直接按图中提示的目录,放置并解压下载到的数据集mnist。 

打开mnist数据集目录,有train和test。无论是训练还是测试,里面都按文件夹序号归好类了,mnist数据集比较特殊,本身就是手写数字0-9的分类识别,所以文件夹的命名正好是类名。

 

 4.2 分类训练

yolo分类训练比较简单,不需要yaml文件,直接执行train.py脚本即可。这里还是需要修改一些参数,比如预训练权重路径,一开始没有自己的模型,都是用yolo官方的模型作为预训练权重。

epochs和batch-size根据自己的硬件性能设置。

训练后的模型,默认存在 runs/train-cls/weights 目录下。

训练后的模型,大家可用predict进行测试。不同于目标检测,分类训练无需yaml文件,但是测试需要yaml文件。

这里给大家解释下为什么?

训练时,送入的分类数据集的类名多以序号(0,1,2,...)命名,模型学习和推理的其实是当前目标属于第几类的概率,所以模型最终能告诉你的是第几类,而不是真正的类名。

这时就需要有个类名映射文件,将模型推理出来的第几类,转换成真正的类名输出。

yolo这里的分类yaml文件,参考data/coco128.yaml文件。直接复制该文件重新命名,我这里命名为mnist.yaml,并修改其中的内容。

mnist数据集比较特殊,类名和序号一致。

修改好mnist.yaml文件后,开始测试,记得修改predict中的 要用的weights参数(模型路径),测试图,以及data参数。

我这里模型和测试图片懒得改了,大家要改成自己训练出来的模型路径,以及测试的手写数字图像,要不分类模型看不到效果。

5、yolo目标分割 

这部分内容后期会补上,大家有兴趣的可自行上手,其实和检测,分类步骤类似。

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值