基于rk3588s的yolov5深度学习从训练到部署

编程入门 行业动态 更新时间:2024-10-15 16:18:41

基于rk3588s的yolov5<a href=https://www.elefans.com/category/jswz/34/1769690.html style=深度学习从训练到部署"/>

基于rk3588s的yolov5深度学习从训练到部署

yolov5部署及训练

1项目的克隆和必要的环境依赖

1.1项目的克隆

YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。因为GitHub是国外的服务器,所以可能会出现开启速度过慢或者无法打开的情况。建议多次尝试,如果拥有魔法上网,请开启魔法上网。

网址:ultralytics/yolov5 at v7.0 (github)

这个网址yolov5版本为v7.0,可以在界面中选择其他版本。

选择好版本后,点击右上角的code按键,将代码下载下来。至此整个项目就已经准备好了。

1.2 项目代码结构整体介绍

将我们下载好的yolov5的代码解压,然后用一款IDE打开(pycharm),打开之后整个代码目录如下图:

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

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

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

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

├── weights:放置训练好的权重参数。

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

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

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

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

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

1.3 环境的安装和依赖的安装

在之前的一篇的Windows安装pytorch里已详细说明了如何安装深度学习依赖。

首先,打开克隆的yolov5文件夹可以看到有一个为requirements.txt的文件,打开文件可以看到里面有着很多的依赖库和对应的版本要求。(注意:如果使用不同版本的yolov5,需要再次进行安装依赖的步骤,不同的版本对应的依赖版本不同。)

在此,我们仅需在上一篇文章的基础上进入pytorch的虚拟环境中cd 进入克隆到本地的yolov5的文件夹,输入命令即可安装依赖。

pip install -r requirements.txt

建议下载依赖时使用清华源镜像下载,只需将下载命令加上下载源即可。

pip install -r requirements.txt -i

如果使用清华镜像下载过程,出现报错为当前库在清华源中无法找到,则单独pip安装这个库即可,尝试其他下载源镜像或者初始镜像即不加下载源后缀。

所有安装包安装成功后,yolov5深度学习的环境和依赖包就都结束了。

2 数据集和预训练权重的准备

此步骤请阅读此前一篇文章“labelimg图片标注工具”

将标注好的数据集划分好训练集,测试集。此步骤请阅读“深度学习目标检测数据集划分”

将划分好的数据集放在yolov5下的第一级目录下

文件名可根据自身喜好更改,只不过在后续步骤里进行路径名更改即可。

2.2 获得预训练权重

一般为了缩短网络的训练时间,并达到更好的精度,我们一般加载预训练权重进行网络的训练。而yolov5的5.0版本给我们提供了几个预训练权重,我们可以对应我们不同的需求选择不同的版本的预训练权重。通过如下的图可以获得权重的名字和大小信息,可以预料的到,预训练权重越大,训练出来的精度就会相对来说越高,但是其检测的速度就会越慢。预训练权重可以通过这个网址进行下载,本次训练自己的数据集用的预训练权重为yolov5s.pt。

将下载好的预训练权重放置在yolov5下第一级目录

2.3 初步测试:detect.py

下载完yolov5后,说明都不用改,运行detect.py

这是检测模型是否能够正常运行的,若正常: 

在runs/detect/exp中能发现被处理过的标签,说明成功了!若程序报错,大概率是因为有的库版本不正确或者还未安装,这个自己调试一下即可,应该没有太大难度

3 训练自己的模型

3.1 修改数据配置文件

预训练模型和数据集都准备好了,就可以开始训练自己的yolov5目标检测模型了,训练目标检测模型需要修改两个yaml文件中的参数。一个是data目录下的相应的yaml文件,一个是model目录文件下的相应的yaml文件。

修改data目录下的相应的yaml文件。找到目录下的coco128.yaml文件,将该文件复制一份,将复制的文件重命名,最好与项目名相关,这样方便后续操作。在此我修改为xunfei.yaml。

打开这个文件修改其中的参数,将train是训练集路径和val是验证集路径填为自己的路径(最好填写绝对路径),test是测试集路径可以不填;nc代表是需要检测的类别数,比如有三个类别就填3;names为每个类别的名称(此处名称一定为英文)。如此data目录下的yaml文件就修改好了。

coco128.yaml的这一行下载代码需要删除或注释掉。

3.2 修改模型配置文件

由于该项目使用的是yolov5s.pt这个预训练权重,所以要使用models目录下的yolov5s.yaml文件中的相应参数(因为不同的预训练权重对应着不同的网络层数,所以用错预训练权重会报错)。同上修改data目录下的yaml文件一样,我们最好将yolov5s.yaml文件复制一份,然后将其重命名,我将其重命名为yolov5_xunfei.yaml。

打开yolov5s_xunfei.yaml文件只需要修改如图数字即可,识别类别数字,图中为七个类别。

至此,相应的配置参数修改完毕。

3.3 训练自己模型

在之前的操作完成后,无报错。那接下来就可以进行yolov5的训练了,首先找到train.py文化。(在第一级级目录)

然后找到主函数的入口,这里面有模型的主要参数。模型的主要参数解析如下所示。

训练自己的模型需要修改如下几个参数就可以训练了。首先将weights权重的路径填写到对应的参数里面,然后将修好好的models模型的yolov5s.yaml文件路径填写到相应的参数里面,最后将data数据的xunfei.yaml文件路径填写到相对于的参数里面。这几个参数就必须要修改的参数。

还有几个需要根据自己的需求来更改的参数:首先是模型的训练轮次,这里是训练的300轮。

其次是输入图片的数量和工作的核心数,这里每个人的电脑都不一样,所以这里每个人和自己的电脑的性能来。这里可以根据我的电脑的配置做参考,电脑按默认的参数输入图片数量为16,工作核心为8的话就会出现GPU显存溢出的报错。报错信息如下:

这里就要调小这两个参数了,每个人的电脑配置不一样,所以可以根据自己的电脑配置来修改参数。  

以上都设置好了就可以训练了。pycharm的用户可能会出现如下的报错。这是说明虚拟内存不够了。

可以根据如下的操作来修改,在utils路径下找到datasets.py这个文件,将里面的第81行里面的参数nw改完0就可以了。

可能会出现git配置问题。出现报错如下

ImportError: Failed to initialize: Bad git executable. The git executable must be specified in one of the following ways: \- be included in your $PATH \- be set via $GIT_PYTHON_GIT_EXECUTABLE \- explicitly set via git.refresh()

All git commands will error until this is rectified.

This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: \- quiet|q|silence|s|none|n|0: for no warning or exception \- warn|w|warning|1: for a printed warning \- error|e|raise|r|2: for a raised exception

Example: export GIT_PYTHON_REFRESH=quiet

如果出现如此报错,则在train.py文件中的import os代码下一行添加

os.environ["GIT_PYTHON_REFRESH"] = "quiet"

即可解决此问题。

至此,就可以运行train.py函数训练自己的模型了。

4 推理测试

等到数据训练好了以后,就会在主目录下产生一个run文件夹,在run/train/exp/weights目录下会产生两个权重文件,一个是最后一轮的权重文件,一个是最好的权重文件,一会我们就要利用这个最好的权重文件来做推理测试。除此以外还会产生一些验证文件的图片等一些文件。

找到主目录下的detect.py文件,打开该文件。

然后找到主函数的入口,这里面有模型的主要参数。模型的主要参数解析如下所示。

这里需要将刚刚训练好的最好的权重传入到推理函数中去。然后就可以对图像视频进行推理了。

217行:填我们训练好的权重文件路径

218行:我们要检测的文件,可以是图片、视频、摄像头。填0时为打开电脑默认摄像头

219行:数据集参数文件,同上

220行:图片大小,同上

221行:置信度,当检测出来的置信度大于该数值时才能显示出被检测到,就是显示出来的框框

222行:非极大抑制,具体不赘述了,自行查阅,可不改

224行:GPU加速,同上

对图片进行测试推理,将如下参数修改成图片的路径,然后运行detect.py就可以进行测试了。

推理测试结束以后,在run下面会生成一个detect目录,推理结果会保存在exp目录下。如图所示。

和图片的测试是一样的,只不过是将图片的路径改为视频的路径而已。利用摄像头进行测试只需将路径改写为0就好了。如果出现报错如下。

解决方法:首先找到datasets.py这个py文件。  

打开文件,找到第279行代码,给两个url参数加上str就可以了。

如若出现以下报错

 

则需将所有的np.int修改成np.int_即可。

出现此报错

则需要更改loss.py中的函数

for i in range(self.nl):anchors = self.anchors[i]
indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))  # image, anchor, grid 

更改为如下:

 for i in range(self.nl):anchors, shape = self.anchors[i], p[i].shape
indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid

 

至此yolov5的模型训练完毕。

模型训练完后,如需部署到边缘设备上时,只需要将训练好的**.pt文件部署即可。无需将训练数据集转移到边缘设备。

本文章借鉴博客内容:

香橙派5使用NPU加速yolov5的实时视频推理(一)_孙启尧的博客-CSDN博客目标检测---教你利用yolov5训练自己的目标检测模型_yolov5安全帽预训练模型_炮哥带你学的博客-CSDN博客

更多推荐

基于rk3588s的yolov5深度学习从训练到部署

本文发布于:2024-03-13 17:18:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1734459.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:深度   rk3588s

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!