0


人工智能视觉深度学习yolov5的学习笔记

前言:

我大一很菜,容易忘记东西,写个笔记备忘,可能有很多错误的地方希望大佬们能够批评指正,蟹蟹!!

这篇文章主要是用飞书写的佬们帮我瞅瞅呗

‌​​​​‬⁠‍‌​​​‍‌‌‌‬​‍​⁠⁠​​⁠‬​​​‍⁠​​​​‌​‌​‬⁠​​‬‌人工智能视觉深度学习yolov5的学习笔记 - 飞书云文档 (feishu.cn)

后面列举了很多很有用的佬的帖子。

这篇主要是学习yolo 使用 的笔记,其他方面主要就集合一些好帖。

这个东西真是折磨人,各种奇葩的报错,配置各种环境,折磨了我几个月,有些报错一个星期没有解决,不过最后还是勉强成功了。

YOLO是一种目标检测算法,使用图片作为输入,利用BPU进行算法推理,发布包含目标类别和检测框的算法msg。


YOLO的使用(环境的搭建和训练步骤):

1.ubuntu系统搭建:

没弄双系统,弄的虚拟机,感觉干这种开发的还是直接把windows换成Linux系统好。

直接官网下载安装VMware17;破解密钥:ZF3R0-FHED2-M80TY-8QYGC-NPKYF

在配置时最好分给linux200个G的内存

在清华大学开源软件镜像站下载ubuntu20.04foxy版本的镜像。

配置ubuntu虚拟机及环境详情见b站古月居ROS2入门21讲第三集。


2.ros2的安装:

方便快捷的可以看b站鱼香ros的教程

动手学ROS2这一篇是文本教程,同时也可以来学习ros2。其他一些小环境的搭建在这里面也会涉及到。

https://vcn950psftxy.feishu.cn/wiki/HMxAwXp9eiU65nkCNHccoWXynMg(还没开始写)


3.yolov5环境的配置:

使用conda虚拟环境来搭建Python虚拟环境anconda安装https://zhuanlan.zhihu.com/p/123188004

需要注意的是选择下载的anconda版本能够创建python3.8的环境(这个坑我好久)

使用终端下载yolov5源码:

git clone https://github.com/ultralytics/yolov5
cd yolov5
git checkout v2.0

还需要去官网下载v2.0版本的权限文件 yolov5s.py 放入yolov5文件夹第一层

网址我直接放出来免得找了Release v2.0 · ultralytics/yolov5 · GitHub

创建虚拟环境以及配置需要的工具:

conda create -n yolo python=3.8       #  创建虚拟环境
conda info -e                         #  这个指令就能查看到创建的虚拟环境了
activate yolo                         #  进入yolo环境 这个虚拟环境的名字是自己取的 activate xxx
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
#  安装pytorch,yolov5 v2.0版本使用的pytorch版本不能过高
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple   #  注意,安装时要在yolo环境里
pip install apex -i https://pypi.tuna.tsinghua.edu.cn/simple  
#apex是来自英伟达的一个很好用的深度学习加速库。由英伟达开源,完美支持PyTorch框架,用于改变数据格式来减小模型显存占用的工具。

以下所有终端操作最好是在yolo文件夹下打开或者cd到yolo文件夹里,并且进入yolo的虚拟环境

接下来验证是否成功

python3 detect.py --source ./inference/images/ --weights yolov5s.pt --conf 0.4

验证完成后就可以在/inference/output文件夹看到检测到的图像了。

在验证过程中也许会因为前面环境的配置问题终端出现各种各样的报错,我也无法确定每个人会遇到什么样子的报错,当时我遇到的报错就特别多,提供一些解决方案:先自己看报错情况自己尝试能否解决;网上找帖子;复制到GPT查看详细报错原因。


4.数据集的制作

准备好数据集的图片(就是需要识别的物品的图片,如果有好的服务器或者用双系统最好弄1000张左右),使用imageImg来进行标注

pip install labelImg   #安装labelImg

训练时images和labels文件夹中cache缓存文件一定要删除,不然报错。

修改data.yaml文件

train: data/haha/train/images      #  训练集的位置
val: data/haha/valid/images        #  验证集的位置
nc: 2                              #  训练的识别个数
names: ['roadblock','blackline']   #  训练的两个物体名称,yolo识别出物体分类成0和1...然后对应这个names
#  注意的是打标签时标注第一个物体的标签是0,第二个是1,所以记得对应这边data的数据

修改yolov5s.yaml文件

nc: 2               #  修改yolov5s.yaml中的nc的数量为你所要训练的识别物体的数量  

使用labelImg打标签

activate yolo       #  记得终端进入yolo环境
labelImg

打开后选择打开和保存的文件夹

这里勾选这几个,自动保存,展示标签,方便我们打标签

然后就可以愉快的打标签了。

更加具体的打标签操作可以看看这些大佬的文章

目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客

教程:超详细从零开始yolov5模型训练_yolo训练-CSDN博客


W:前面这短短的几行字花了我整整一个月的课余时间。只能说对于第一次接触确实难。


5.开始训练模型

修改train.py正式开始训练

修改cfg和data为配置文件myyolov5s.yaml,mydate.yaml的位置

epochs为设置的训练轮次,要是用厉害的服务器和电脑可以设置个500轮往上

img-size根据图片尺寸设置,这里我用的应该是640x480

weights为前面说的下载的权重文件,要是按照放的位置应该是不用配置,当然也可以配置一下这个.pt权重文件的位置

batch-size这个如果是虚拟机应该最高只能设置成4,双系统用电脑的配置可以设置高一点,4-8-16-32这几个

(yolov5-v2.0的权重模型相比后来的版本,没有优化,占用显存过大,但为了加速推理又不得不使用v2.0训练,因此请减小batch_size数)

device是选择0用GPU还是CPU训练。

接下来就是训练模型了

activate yolo    #  进入yolo环境
train.py

在训练模型时会遇到一些报错,这篇帖子里有一些解决方法https://developer.horizon.cc/forumDetail/163807123501918330。

训练完成的结果和效果会放在\yolov5\run\exp文件夹。

我们需要用到的即为runs\exp\weights\best.pt,接下来进行模型转换,首先先将原始的pt模型转onnx模型,先安装onnx。

pip install onnx==1.6 -i https://pypi.tuna.tsinghua.edu.cn/simple   #  以免出现环境配置问题还是先进入到yolo环境再安装  conda activate yolo
pip install coremltools

由于比赛原因,所使用的为地平线的工具链,支持的版本为onnx6 和7,opset版本为10和11,所以要进行对应版本调整,还需要对维度同步调整。

修改export.py文件

# torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
#                  output_names=['classes', 'boxes'] if y is None else ['output'])
torch.onnx.export(model, img, f, verbose=False, opset_version=11, input_names=['images'],
                  output_names=['classes', 'boxes'] if y is None else ['output'])

修改输出节点维度信息yolo.py文件

# x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
x[i]=x[i].permute(0, 2, 3, 1).contiguous()
# 训练模型时注释掉下面这一行,转onnx模型时注释掉上面一行

修改权重位置为上面得到的best.pt,图像输入尺寸转换成640x480(这个可能会影响模型推理时间)

终端

set PYTHONPATH=%cd%      #  windows用这个
export PYTHONPATH="$PWD" #  linux用这个
export.py

在\run\exp\weights文件夹下会产生best.onnx模型。

接下来是在模型的量化与部署

下载两个工具,内存挺大的20多个G

#  算法工具链OE包获取方式 
wget -c ftp://vrftp.horizon.ai/Open_Explorer_gcc_9.3.0/2.3.3/horizon_xj3_open_explorer_v2.3.3_20220727.tar.gz
#  算法工具链docker获取方式 
wget -c ftp://vrftp.horizon.ai/Open_Explorer_gcc_9.3.0/2.3.3/x3pi_toolchain/ai_toolchain_2.3.3.tar.gz

下载解压完成后

docker load -i docker_openexplorer_xxx.tar.gz  #  docker环境导入到虚拟机中。

转换模型前需要完成一些准备工作

/horizon_xj3_open_explorer_v2.2.3a/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/03_yolov5s/mapper/

中的sh 01_check.sh,sh 02_preprocess.sh,sh 03_build.sh..

01_check.sh:把模型的位置修改成自己的best.onnx的位置。

02_check.sh:准备一些之前训练的图片,修改src_dir的路径为此文件夹的路径,开始进行数据预处理。

sh 03_build.sh:首先配置自己的yolov5s_config.yaml文件

借用大佬的思维导图,具体配置和原理可以看佬的文章:

[BPU部署教程] 一文带你轻松走出模型部署新手村-CSDN博客

然后修改路径


验证模型时有postprocess.py和preprocess.py文件的修改,不知道在转换前修改对转换效果有没有影响,还是只对验证产生影响,我还没有仔细去搞清楚。因为后来我修改了export.py中图片输入的尺寸然后在一个佬的帮助下修改过某个文件中尺寸数据再去转模型,部署到板端的模型推理时间只有几毫秒,之前都是17ms左右。


su  #  需要root用户权限 这个指令没用的话用 sudo su
cd horizon_xj3_open_explorer_v2.2.3a
. run_docker.sh /data
cd ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/03_yolov5s/mapper/
sh 01_check.sh      #  数据预处理
sh 02_preprocess.sh #  量化模型
sh 03_build.sh      #  此时会在model_output中产生一个bin文件

这个.bin文件就可以直接拖到RDKX3板子里面 配置一下 就可以使用了。

如果想提前验证模型是否可以用,需要修改一些东西然后接下来执行

sh 04_inference.sh

需要修改postprocess.py文件

识别物体的种类数量/名称/图像大小

reshape的第2,3个参数就是模型尺寸分别除以8,16,32,第五个参数改成num_classes+5


这里我就有点懵,根据一些帖子这里的参数是用的672x672的尺寸数据,我640x480的图片用帖子的数据弄出来的模型还行,但是前处理和后处理时间不太稳定不知道是不是这个原因,


修改preprocess.py中图片尺寸

修改sh 04_inference.sh中预测图片的位置,自己放一个图片来检验模型效果


至此训练结束,接下来就是在小车机器人上部署模型。


6.部署

根据自己的模型配置json文件和list文件

详细部署配置和使用步骤可以参考这个佬的文章:

https://developer.horizon.ai/forumDetail/198685796998563332

YOLOV5原理学习和理解的帖子:

1

2

一系列超详细

其他一些重要的参考的帖子:

https://developer.horizon.cc/forumDetail/112555549341653639(让后处理变的更加快速厉害)

https://developer.horizon.cc/documents_tros/tros_dev/line_follower#%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D(小车机器人的使用手册)

https://developer.horizon.ai/api/v1/fileData/documents_pi/System_Configuration/System_Configuration.html#cpu(RDKX3用户使用手册)

http://originbot.org/(originbot的使用手册)

https://blog.csdn.net/huhigher/article/details/134908031(零拷贝学习)

https://blog.csdn.net/qq_45701791/article/details/113992622spm=1001.2014.3001.5506

(anconda环境的创建,打标签)

https://blog.csdn.net/Johnor/article/details/136018664?spm=1001.2014.3001.5506

(训练和转模型)

目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客(打标签)

https://www.guyuehome.com/46492#(训练模型整个流程思路)

地平线X3J3算法工具链 — Horizon Open Explorer(地平线算法X3算法工具链使用手册)

深度学习-Yolov5入门到实战点选数据集训练_yolov5验证集作用-CSDN博客(模型训练和打标签参考帖子)


本文转载自: https://blog.csdn.net/2301_80289216/article/details/141132102
版权归原作者 哈哈哈哈哈嘿丶 所有, 如有侵权,请联系我们删除。

“人工智能视觉深度学习yolov5的学习笔记”的评论:

还没有评论