一文教你地平线旭日派X3部署yolov5从训练-->转模型-->部署

2024-02-04 11:12

本文主要是介绍一文教你地平线旭日派X3部署yolov5从训练-->转模型-->部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一文教你地平线旭日派X3部署yolov5从训练,转模型,到部署

近日拿到了地平线的旭日派X3,官方说是支持等效5tops的AI算力,迫不及待的想在上面跑一个yolov5的模型,可谓是遇到了不少坑,好在皇天不负有心人,终于在手册和社区各个大佬的帮助下,终于在板子上推理成功,本文会从训练、模型转换、到部署到旭日派详细说明

1.训练

1.1准备yolov5-2.0源代码

根据地平线社区大佬说明,虽然旭日派X3支持yolov5所有版本,但是只有yolov5-2.0的主干网络算子都跑在BPU上,效果最好,帧率最高

yolov5-2.0源代码

注意yolov5的预训练权重在下载时也要下载对应版本

1.2使用conda创建一个虚拟环境安装相关依赖

image-20240203220522238

执行pip install -r requirements.txt可以注释掉有关torch的,使用此文件安装torch可能会导致安装cpu版本

1.3准备训练需要的文件

可以在data目录下创建自己的文件夹

这是最终的目录结构目录结构,images和labels一定要对应,data.yaml和yolov5s.yaml是从其他位置复制过来修改的,下图中的cache缓存文件一定要删除,一定要删除,一定要删除,否则会报错照片找不到

image-20240203221054695

复制data目录下的voc.yaml,改为data.yaml

image-20240203221352540

根据自己的需求修改,这个文件夹知名了数据集的路径和标签的种类和个数

image-20240203221541502

复制model目录下的yaml文件,有四种网络结构可供选择

image-20240203221721490

例如我选择的是yolov5s,修改yolov5s.yaml中的nc为自己的标签个数

image-20240203221907598

训练所需要的文件就准备好了

1.4修改train.py文件正式开始训练

修改红框中这几个default参数

  • 注意预训练模型与yolov5s.yaml要对应上
  • 输入图片大小最好使用672X672与后续官方例程保持一致
  • 训练轮次根据需求自己设置
  • batch-size 根据自己显卡的显存设置我是4060 8G版本设置的16

image-20240203223144064

之后就可以运行train.py文件开始训练,模型保存在根目录下的runs文件夹下的exp文件夹下的weight文件夹,也可以查看训练的收敛情况图片

image-20240203223737905

1.5导出onnx模型
1.5.1为旭日派的BPU加速特殊处理

根据地平线官方文档说明为了更好地适配后处理代码

在使用export.py导出onnx模型时需要对yolo.py做特殊修改

去除了每个输出分支尾部从4维到5维的reshape(即不将channel从255拆分成3x85), 然后将layout从NHWC转换成NCHW再输出。

以下左图为修改前的模型某一输出节点的可视化图,右图则为修改后的对应输出节点可视化图。

image-20240203222724581

image-20240203222855839

注意训练时和导出onnx模型时,此文件的不同

注意训练时和导出onnx模型时,此文件的不同

注意训练时和导出onnx模型时,此文件的不同

1.5.2修改export.py文件

在使用export.py脚本时,请注意:

  1. 由于地平线AI工具链支持的ONNX opset版本为 10 和 11, 请将 torch.onnx.exportopset_version 参数根据您要使用的版本进行修改。
  2. torch.onnx.export 部分的默认输入名称参数由 'images' 改为 'data',与模型转换示例包的YOLOv5s示例脚本保持一致。
  3. parser.add_argument 部分中默认的数据输入尺寸640x640改为模型转换示例包YOLOv5s示例中的672x672。

image-20240203224202451

执行后就得到onnx文件了

2.转模型

转模型需要在linux环境或者docker容器内进行,推荐使用ubuntu虚拟机进行,需要有anaconda+py3.6环境

image-20240203224542175

2.1环境配置

2.1.1获得yolov5-2.0转模型demo
wget -c ftp://xj3ftp@vrftp.horizon.ai/ai_toolchain/ai_toolchain.tar.gz --ftp-password=xj3ftp@123$%wget -c ftp://xj3ftp@vrftp.horizon.ai/model_convert_sample/yolov5s_v2.0.tar.gz --ftp-password=xj3ftp@123$%

若需更多公版模型转换示例,可执行命令: wget -c

ftp://xj3ftp@vrftp.horizon.ai/model_convert_sample/horizon_model_convert_sample.tar.gz --ftp-password=xj3ftp@123$%
2.1.2创建模型转换环境
//horizon_bpu 为环境名,可自行设置conda create -n horizon_bpu python=3.6 -y
2.1.3进入模型转换环境:
// horizon_bpu 为上文创建python环境名,  conda环境命令会根据不同的操作系统有所差异,以下两条命令请选择其中能进入conda模型转换环境的命令来使用source activate horizon_bpu 或 conda activate horizon_bpu
2.1.4解压模型转换环境和示例模型安装包并进行相关依赖的安装
tar -xzvf yolov5s_v2.0.tar.gztar -xzvf ai_toolchain.tar.gzpip install ai_toolchain/h* -i https://mirrors.aliyun.com/pypi/simplepip install pycocotools -i https://mirrors.aliyun.com/pypi/simple
2.2转换模型
2.2.1验证模型

修改01_check.sh

image-20240203225705634

运行

./01_check.sh

终端输出这些就说明你的onnx是正常的可以运行在旭日派X3上的

image-20240203231115077

2.2.2校准模型

因为BPU是INT8计算,所以注定会有精度损失。而且这些误差也是可以传递的,所以到后面精度是越来越低的。如果网络深度过高,也会导致整体精度的下降。

参考了地平线社区一个佬的yolov3文章这里

1. 在01_common创建一个存放图像文件夹

image-20240204002511726

执行 bash 02_preprocess.sh

2.2.3转换配置yolov5s_config_X3.yaml

借用大佬的yolov3的思维导图

在这里插入图片描述

image-20240203233945230

执行03_build.sh

image-20240204002850385

转换成功,位于model_output文件夹

image-20240204002925959

3.部署

3.1修改test_yolov5.py

image-20240204003344464

3.2postprocess.py

image-20240204003543604

reshape的第2,3个参数,就是你模型尺寸分别除以8,16,32;第5个参数要改成刚才的num_classes+5(图中没有标出来)

将图片fire01.jpg输入推理

fire01

结果

image-20240204004028707

result1

这篇关于一文教你地平线旭日派X3部署yolov5从训练-->转模型-->部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677301

相关文章

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee