yolov5 从配置环境到自己训练数据集合

yolov5 (Macre)

目录


**笔记思路和结构 **

  • 以项目部署的思路来写的

    一、配置anaconda

    二、环境配置

    三、制作数据集合


效果展示

yolov5 原神测试

一、yolov5介绍

1 四种网络模型

Yolov5官方代码中,给出的目标检测网络中一共有4个版本,按大小来分,分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。只需要记住越大的效果越好,但是花费的时间就越多。

2 yolov5 输入结构

在这里插入图片描述

Yolov5的网络结构图,可以看出,还是分为输入端、Backbone、Neck、Prediction四个部分。

**(1)输入端:**Mosaic数据增强、自适应锚框计算、自适应图片缩放
**(2)Backbone:**Focus结构,CSP结构
**(3)Neck:**FPN+PAN结构
**(4)Prediction:**GIOU_Loss

2.1 Mosaic数据增强

为什么要进行Mosaic数据增强?
在平时项目训练时,小目标的AP一般比中目标和大目标低很多。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀

主要有几个优点:

  1. 丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
  2. **减少GPU:**可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。

此外,发现另一研究者的训练方式也值得借鉴,采用的数据增强和Mosaic比较类似,也是使用4张图片不是随机分布),但训练计算loss时,采用“缺啥补啥”的思路:

如果上一个iteration中,小物体产生的loss不足(比如小于某一个阈值),则下一个iteration就用拼接图;否则就用正常图片训练,也很有意思。

2.2 自适应锚框计算

在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚框

在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数

因此初始锚框也是比较重要的一部分。

在Yolov3、Yolov4中,训练不同的数据集时,计算初始锚框的值是通过单独的程序运行的。

但Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。

当然,如果觉得计算的锚框效果不是很好,也可以在代码中将自动计算锚框功能关闭

parser.add arqument('--noautu=oanchor',aaction='store ture',help = 'disable autoanchor check')

控制的代码即train.py中上面一行代码,设置成False,每次训练时,不会自动计算。

2.3 自适应图片缩放

在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。

3 Backbone 主干网

3.1 Focus结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MRflBJDs-1671794265501)(C:/Users/20998/Desktop/zz&xx/note/%E5%87%86%E5%87%86(Macre)]/image/yolov51.png)

Focus结构,在Yolov3&Yolov4中并没有这个结构,其中比较关键是切片操作。

比如右图的切片示意图,443的图像切片后变成2212的特征图。

以Yolov5s的结构为例,原始6086083的图像输入Focus结构,采用切片操作,先变成30430412的特征图,再经过一次32个卷积核的卷积操作,最终变成30430432的特征图。

需要注意的是:Yolov5s的Focus结构最后使用了32个卷积核,而其他三种结构,使用的数量有所增加,先注意下,后面会讲解到四种结构的不同点。

3.2 CSP结构

而Yolov5中设计了两种CSP结构,以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。

4 Neck

Yolov5现在的Neck和Yolov4中一样,都采用FPN+PAN的结构,但在Yolov5刚出来时,只使用了FPN结构,后面才增加了PAN结构,此外网络中其他部分也进行了调整。

Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。

5 输出端

5.1 Bounding box损失函数

5.2 nms非极大值抑制


二、环境搭建

技术流程是

1、使用anaconda配置一个yolov5的专属环境,

2、在环境里基于pytroch利用yolov5框架进行目标检测。

3、数据利用python脚本把视频分割为图片,图片利用labelimg来制作yolov5所需要的txt文件。

1、anaconda

1.1 下载

链接:Anaconda | Individual Edition

https://www.anaconda.com/products/individual

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

选择最新的就行


1.2 安装

我的卸载了,再走一遍,应该不会有什么问题。安装包我会放在群里。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O67sESB7-1671794265502)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663685836984.png)]

点击next

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZS9sVBh-1671794265502)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663685865575.png)]

i agree

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nCXm4hkb-1671794265503)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663685903998.png)]

只有我使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39Jhjanu-1671794265503)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686009560.png)]

选择合适的路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kl4lwri-1671794265504)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686040139.png)]

第一个选项:

选择是否将 Anaconda 添加到 PATH 环境变量中,默认是不添加的。不添加意味着你不能在cmd(命令提示符)以及powershell中使用命令行操作。我不建议你添加,是因为anaconda有自带的 Anaconda Prompt 以及 Anaconda Powershell Prompt,这与cmd和powershell是一样的,没有必要添加到路径。当然如果你有其他想法,你可以选择添加。

第二个选项:

选择是否将 Anaconda 注册为你的默认 Python,默认是选择的。(我这个默认为python为3.8的)如果你要安装和运行 Anaconda 的多个版本或 Python 的多个版本,基本上是不勾选此选项的 。如果你有其它想法,另说。如果你之前安装过python并且使用vs、pycharm等软件时,勾选此选项,anaconda自带的python会成为这些软件的默认选项。

如果没有配置过之前的python那就勾选第二个

安装即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rk63puOW-1671794265504)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686072524.png)]

等待安装成功后,再菜单里找到最近添加,右键打开文件位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2f8sTUaq-1671794265504)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686403568.png)]

发送桌面快捷方式,打开后有几个文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5GIWCANO-1671794265505)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686451414.png)]

Anaconda Navigator:

Anaconda Navigator的官方介绍:Anaconda Navigator是Anaconda发行版中包含的桌面图形用户界面(GUI),可让您启动应用程序并轻松管理conda程序包,环境和通道,而无需使用命令行命令。

Anaconda Powershell Prompt 以及 Anaconda Prompt:

与上面一致,但是是使用命令行模式

Jupyter Notebook:这个使用的人非常多

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

Spyder:

百度百科:Spyder是Python的作者为它开发的一个简单的集成开发环境。和其他的Python开发环境相比,它最大的优点就是模仿MATLAB的“工作空间”的功能,可以很方便地观察和修改数组的值。

验证安装是否成功。

打开Anaconda Promp,输入 conda info

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI73yVH5-1671794265505)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686652808.png)]

成功


1.3 Anaconda Navigator 尝试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pE204Ilx-1671794265505)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663686911084.png)]

打开后是这样。重要的是environments和applications on 。

environments:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XcxMprbn-1671794265506)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663687026244.png)]

是一个你的环境,左边是你的环境名称,右边是你的环境里的包名称。目的是针对你的不同应用场景来管理不同的包,是你的开发环境更便捷不被你的混乱的包搞混乱。和pycharm的venv是一样的。例如你的web工程为一个环境,人工智能为一个环境,数据可视化一个环境。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQ7lGJuM-1671794265506)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663687212789.png)]

create是创建新的环境。


2、利用Anaconda Promp创建新环境

通常一个环境就足够了,但是我还是建议再创建一个新的环境。
在有些情况下,你可以在新环境上做实验,没问题后再在默认环境中操作,新环境中遭遇不可控错误,那就删除重建一个。或者你要搭建 tesorflow 、pytorch深度学习环境,那你肯定要新建环境的。

图形化创建环境:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XauyWLhr-1671794265506)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663688775146.png)]

默认的环境是base(root)

检查是否安装成功:conda --version

检查目前的安装环境:conda info --envs 或者 conda info -e

在这里插入图片描述

2.1 创建新的环境

conda create --name object_detaction tensorflow python=3.9 中途需要输入 y 表示同意继续

–name 或者 -n :指定环境名

tensorflow:环境名python=3.9:指定安装python的版本,python=3.9表示安装3.9中的最新版也可以指定具体的版本 比如:python=3.9.4

旧的解析器创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EfdwI7v-1671794265507)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663777434231.png)]

新的环境创建成功

推荐使用:

新的解析器创建

使用

conda create -n <环境名> tensorflow python=3.9 -y

命令来创建。


2.2 激活新的环境

conda activate 环境名来激活环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-enrUuJjf-1671794265507)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663688964532.png)]

激活成功

这个环境就是来做开放环境目标检测的了。这是使用yolo框架的,其实你也可以之间用pytorch或者tf来命名,来确定使用的基础是pytorch还是tf。

3、yolov5 框架部署

看此文章之前先看四配置pytorch。

3.1 克隆gitgub上的项目

YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。不得不说GitHub的确是全球最大的男性交友网站,里面的人个个都是人才,yolov5发布才一年左右的时间,YOLOv5就已经更新了5个分支了,分别是yolov5.1-yolov5.5分支。

首先打开yolov5的github官网 https://github.com/ultralytics/yolov5/tree/v5.0(这个网站在国外打开是很慢的,而且是有的时候能正常打开,有的时候是进不去的,但是大家第一次打不开的话,一定要多打开几次。)打开的官网界面如下,这个就是大神glenn-jocher开源的yolov5的项目。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0cehhLXb-1671794265507)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663689367973.png)]

使用git来部署,或者下载zip都是可以的。我使用的是git来部署。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MojtlmQi-1671794265508)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663689828439.png)]

部署成功

3.2 文件结构说明

现在来对代码的整体目录做一个介绍:

├── data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称);还有一些官方提供测试的图片。如果是训练自己的数据集的话,那么就需要修改其中的yaml文件。但是自己的数据集不建议放在这个路径下面,而是建议把数据集放到yolov5项目的同级目录下面。

├── models:里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测测度分别都是从快到慢,但是精确度分别是从低到高。这就是所谓的鱼和熊掌不可兼得。如果训练自己的数据集的话,就需要修改这里面相对应的yaml文件来训练自己模型。

├── utils:存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。

├── detect.py:利用训练好的权重参数进行目标检测,可以进行图像、视频和摄像头的检测。

├── train.py:训练自己的数据集的函数。

├── test.py:测试训练的结果的函数。

├──requirements.txt:这是一个文本文件,里面写着使用yolov5项目的环境依赖包的一些版本,可以利用该文本导入相应版本的包。

以上就是yolov5项目代码的整体介绍。我们训练和测试自己的数据集基本就是利用到如上的代码。

3.3 检测配置是否成功

首先切换到yolo5的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9T0nbcF6-1671794265508)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663833679419.png)]

(1)配置requirements.txt里的数据

pip install -r requirements.txt -i <源地址>

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

豆瓣:http://pypi.douban.com/simple/

常见的源地址,避免下载包出问题。

下载完yolov5后,什么都不用改,运行detect.py

这个是帮你检测能不能正常运行的

(2)检测是否成功

python detect.py

运行一下试试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gfPWzglc-1671794265508)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663836635804.png)]

在runs里的detect文件里找到exp如果有下面的图片就是成功:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMoxB5gk-1671794265509)(F:\yolo\yolov5\runs\detect\exp2\zidane.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jVoONOT9-1671794265509)(F:\yolo\yolov5\runs\detect\exp2\bus.jpg)]

4 为yolo环境配置pytorch gpu版本

cpu太慢了,因为不是gpu版本是不可以使用gpu来就行训练的。

打开pytorch的官网, https://pytorch.org/

根据你的版本选择合适的下载:

在这里插入图片描述

使用conda来配置在环境里:

执行run this commond这个命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hKiqZXO9-1671794265510)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663806038961.png)]

出现后要输入Y。

如果下载太慢了,可以换源:

使用清华镜像源网站
切换到国内的镜像源(为什么要切换原因就不用多说了吧(手动狗头))
分别输入以下4行代码:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorc

注意!如果切换镜像后当出现下载不了的情况,就先切换默认源,然后再修改另一个可以使用的conda源(一定要先恢复默认,再换另一个!!!)
切回默认源:

conda config --remove-key channels

如果是cpu版本

进入python查看当前pytorch是否可用gpu,发现是false

>>> import torch
>>> torch.cuda.is_available()
False

如果在环境里输入python回车后是这个,说明不能使用gpu来运行。

查看torch版本,发现是cpu,可能是安装的时候没有留意

>>> torch.version
‘1.10.2+cpu’

conda remove --name Python3.9.4 --all

各种检测命令:

import torch
print(torch.__version__)
print(torch.cuda.is_available())#cuda是否可用
torch.cuda.device_count()#返回GPU的数量
torch.cuda.get_device_name(0)#返回gpu名字,设备索引默认从0开始

5 配置gpu的CUDA

我参考了网上许多教程,结合自己的实际情况写的笔记。

安装CUDA需要下载两个安装包

windows10 版本安装 CUDA ,首先需要下载两个安装包

  • CUDA toolkit(toolkit就是指工具包)
  • cuDNN

注:cuDNN 是用于配置深度学习使用

官方教程
CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html

cuDNN:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows

5.1 查看正确的版本

打开显卡驱动的系统信息界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWN6ys1V-1671794265510)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664014455622.png)]

查看版本得知是512.36

在这里插入图片描述

支持的是11.6

cuda toolkit与driver对应表:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

5.2 下载和安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJ0FQBsr-1671794265511)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664015251554.png)]

选择正确的版本和选择exe local 来安装。

选择自定义安装。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kG018h3p-1671794265511)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664015322056.png)]

不要选Visual Studio Integration,即使选了也不能成功安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-inqqGJ8D-1671794265511)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664015353650.png)]

一直安装下去就行

完成后需要就行查看系统变量中是否添加了路径,如果没有需要自己添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiEecmRq-1671794265511)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664015443904.png)]

测试环境是否安装成功

运行cmd,输入nvcc --version 即可查看版本号;
set cuda,可以查看 CUDA 设置的环境变量。

nvcc --version

set cuda

cuDNN配置

cuDNN地址如下,不过要注意的是,我们需要注册一个账号,才可以进入到下载界面。大家可以放心注册的。

https://developer.nvidia.com/rdp/cudnn-download

cuDNN叫配置更为准确,我们先把下载的 cuDNN 解压缩,会得到下面的文件:

cuDNN 解压缩后的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrQLSDAQ-1671794265512)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664015547851.png)]

下载后发现其实cudnn不是一个exe文件,而是一个压缩包,解压后,有三个文件夹,把三个文件夹拷贝到cuda的安装目录下

拷贝时看到,CUDA 的安装目录中,有和 cuDNN 解压缩后的同名文件夹,这里注意,不需要担心,直接复制即可。cuDNN 解压缩后的同名文件夹中的配置文件会添加到 CUDA安装目录中的同名文件夹中。

现在大家应该可以理解,cuDNN 其实就是 CUDA 的一个补丁而已,专为深度学习运算进行优化的。然后再参加环境变量

往系统环境变量中的 path 添加如下路径(根据自己的路径进行修改)

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp

到此环境搭建成功!!!!


三、制作数据集

3.1获取视频和视频转图片

3.2 使用labelimg来制作yolotxt数据

3.2.1 labelimg 介绍

Labelimg是一款开源的数据标注工具,可以标注三种格式。

​ 1 VOC标签格式,保存为xml文件。

​ 2 yolo标签格式,保存为txt文件。

​ 3 createML标签格式,保存为json格式。

3.2.2 下载

在conda的命令窗口下运行:

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

运行如上命令后,系统就会自动下载labelimg相关的依赖。由于这是一个很轻量的工具,所以下载起来很快,当出现如下红色框框中的告诉我们成功安装的时候,说明labelimg安装成功了。

3.2.3 标注

(1)打开labelimg

在打开labelimg之前要使用文件的配置,如下

资料数据目录结构:

<数据名字>

  • label --> 标签文件夹
  • images --> 图片文件夹
  • predefined_classes.txt --> 初始化labelimg的分类文件

(1)label文件是保存标签的数据

(2)images文件是用来保存图片的数据。

images 数据来源可以自己搜集。

可以使用下面的python脚本把视频改为png

# 视频转图片的脚本

import cv2
import os

#此删除文件夹内容的函数来源于网上
def del_file(filepath):
    """
    删除某一目录下的所有文件或文件夹
    :param filepath: 路径
    :return:
    """
    del_list = os.listdir(filepath)
    for f in del_list:
        file_path = os.path.join(filepath, f)
        if os.path.isfile(file_path):
            os.remove(file_path)

def video_to_images(fps,path):
  cv = cv2.VideoCapture(path)
  if(not cv.isOpened()):
    print("\n打开视频失败!请检查视频路径是否正确\n")
    exit(0)
  if not os.path.exists("images/"):
    os.mkdir("images/") # 创建文件夹
  else:
    del_file('images/') # 清空文件夹
  order = 0   #序号
  h = 0
  while True:
    h=h+1
    rval, frame = cv.read()
    if h == fps:
      h = 0
      order = order + 1
      if rval:
        cv2.imwrite('./images/' + str(order) + '.jpg', frame) #图片保存位置以及命名方式
        cv2.waitKey(1)
      else:
        break
  cv.release()
  print('\nsave success!\n')

# 参数设置
fps = 12   # 隔多少帧取一张图  1表示全部取
path="F:\\obsluzhi\\cs1.mp4" # 视频路径 比如 D:\\images\\tram_result.mp4 或者 D:/images/tram_result.mp4

if __name__ == '__main__':
  video_to_images(fps,path)
  # 会在代码的当前文件夹下 生成images文件夹 用于保存图片
  # 如果有images文件夹,会清空文件夹!

(3)predefined_classes.txt

内容是:

person
hutao
humo
hua
ludeng
shu
caocong
pugongying
maodian
...类别

(2)界面认识

到数据集的目录下执行

labelimg images predefined_classes.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oNZfbkSl-1671794265512)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1663854191888.png)]在这里插入图片描述

上图是界面,open是打开,opendir是打开文件夹,他会把文件夹的所有图片导入,如何按下快捷键D可以快速浏览下一个图片。yolo 是导出的是txt文件,还可以导出voc 的xml文件。create rectbox可以创建窗口。

(3)标签一次演示

3.2.4 yolo产生的txt数据

(1)格式解释

(2)用处

3.2.5 voc数据产生的xml

(1)格式解释

(2)用处

3.2.6 数据之间的转换

(1)xml转txt

(2)json 转txt

3.2.7 数据集文件夹结构

(1)标准的数据文件格式:

这里暂时不用,之后会对标准的数据格式进行一个解析。

(2)看懂项目的文件结构后,也可以随意的保存数据文件

推荐使用

yolov5

<数据集名字>

  • label --> 标签文件夹
  • images --> 图片文件夹
  • predefined_classes.txt --> 初始化labelimg的分类文件
  • imagesets
  • main
  • 训练集和测试集合

3.2.8 训练集和测试集制作

训练集和测试集制作的代码:

# coding:utf-8

import os
import random
import argparse

parser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 1.0  # 训练集和验证集所占比例。 这里没有划分测试集
train_percent = 0.9     # 训练集所占比例,可自己进行调整
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)

num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)

file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')

for i in list_index:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        file_trainval.write(name)
        if i in train:
            file_train.write(name)
        else:
            file_val.write(name)
    else:
        file_test.write(name)

file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

会产生一个ImageSets里面有一个Main,main文件夹里有四个文件,分别用来训练和测试的。

(3)利用pt模型

在yolov5文件夹新建一个weights文件夹,将yolov5s.pt复制一个放进去。

到这里数据集就制作完成了。


四、配置模型

4.1 修改数据配置文件

(1)选择适当的模型

选择一个模型,在yolov5目录下的model文件夹下是模型的配置文件,有n、s、m、l、x版本,逐渐增大(随着架构的增大,训练时间也是逐渐增大)。

这里选用 yolov5s.yaml

打开yolov5/models里面选择yolov5s.yaml

修改参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKSBIGTj-1671794265512)(C:\Users\20998\Desktop\zz&xx\note\准准(Macre)]\image\xgcs.png)

(2)yolov5/data文件夹里配置mydata.yaml

创建一个txt,根据具体情况来创建

train: D:/Yolov5/yolov5/VOCData/dataSet_path/train.txt #训练文件地址
val: D:/Yolov5/yolov5/VOCData/dataSet_path/val.txt #测试文件地址
 
# number of classes 类别个数
nc: 2

# class names 类别名字
names: ["light", "post"]

配置文件成功!


五、开始训练 模型的使用

打开yolov5 目录下的 train.py 程序,我们可以多看看这些参数使用。

常用参数解释如下:

weights:权重文件路径

cfg:存储模型结构的配置文件

data:存储训练、测试数据的文件

epochs:指的就是训练过程中整个数据集将被迭代(训练)了多少次,显卡不行你就调小点。

batch-size:训练完多少张图片才进行权重更新,显卡不行就调小点。

img-size:输入图片宽高,显卡不行就调小点。

device:cuda device, i.e. 0 or 0,1,2,3 or cpu。选择使用GPU还是CPU

workers:线程数。默认是8。

其他:

noautoanchor:不自动检验更新anchors
rect:进行矩形训练

resume:恢复最近保存的模型开始训练

nosave:仅保存最终checkpoint

notest:仅测试最后的epoch

evolve:进化超参数

bucket:gsutil bucket

cache-images:缓存图像以加快训练速度

name: 重命名results.txt to results_name.txt

adam:使用adam优化

multi-scale:多尺度训练,img-size +/- 50%

single-cls:单类别的训练集

进入pytorch环境,进入yolov5文件夹

python train.py --weights weights/yolov5s.pt  --cfg models/cs1.yaml  --data data/mydata.yaml --epoch 200 --batch-size 2 --img 640   --device 0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GRHY9C34-1671794265513)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664013447087.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slj3QnhL-1671794265513)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664013463751.png)]

问题

如果出现 winerror 1455 页面太小的问题。

原因是:如果你装anaconda是在c盘就不会有这个问题,安装到其他的盘,就应该去添加那个盘的虚拟内存。

打开我的电脑,点开属性,点开高级设计,点开高级,在性能下边点开高级,再点开高级,在虚拟内存下打开更改。把自动管理去掉。点击你安装的盘,根据总的大小来分配

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-npv89HMt-1671794265513)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664015033835.png)]

六 、检测效果

6.1 训练可视化

训练时或者训练后可以利用 tensorboard 查看训练可视化

tensorboard --logdir=runs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exFhmKj8-1671794265514)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664013735049.png)]

浏览器输入本地接口地址:

http://localhost:6006/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r596wi5X-1671794265514)(C:\Users\20998\AppData\Roaming\Typora\typora-user-images\1664013795840.png)]

可以看到各种训练的可视化效果。

6.2 检测效果

检测的命令:

python detect.py --source 0  # webcam  自带摄像头
                            file.jpg  # image 图片
                            file.mp4  # video 视频
                            path/  # directory
                            path/*.jpg  # glob
                            'https://youtu.be/NUsoVlDFqZg'  # YouTube
                            'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

640 --device 0


[外链图片转存中...(img-GRHY9C34-1671794265513)]



[外链图片转存中...(img-slj3QnhL-1671794265513)]



**问题**

如果出现 winerror 1455 页面太小的问题。

原因是:如果你装anaconda是在c盘就不会有这个问题,安装到其他的盘,就应该去添加那个盘的虚拟内存。

打开我的电脑,点开属性,点开高级设计,点开高级,在性能下边点开高级,再点开高级,在虚拟内存下打开更改。把自动管理去掉。点击你安装的盘,根据总的大小来分配

[外链图片转存中...(img-npv89HMt-1671794265513)]



## 六 、检测效果

### 6.1 训练可视化

训练时或者训练后可以利用 tensorboard 查看训练可视化

tensorboard --logdir=runs


[外链图片转存中...(img-exFhmKj8-1671794265514)]

浏览器输入本地接口地址:

http://localhost:6006/

[外链图片转存中...(img-r596wi5X-1671794265514)]

可以看到各种训练的可视化效果。

### 6.2 检测效果

检测的命令:

python detect.py --source 0 # webcam 自带摄像头
file.jpg # image 图片
file.mp4 # video 视频
path/ # directory
path/*.jpg # glob
‘https://youtu.be/NUsoVlDFqZg’ # YouTube
‘rtsp://example.com/media.mp4’ # RTSP, RTMP, HTTP stream






 python detect.py --weights runs/train/exp11/weights/best.pt --source D:\yolo\yolov5\VOCcs\pig.mp4





猜你喜欢

转载自blog.csdn.net/qq_37543124/article/details/128423094