一文教你地平线旭日派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

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它