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

tar -xzvf ai_toolchain.tar.gz

pip install ai_toolchain/h* -i https://mirrors.aliyun.com/pypi/simple

pip 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode】1690. 石子游戏 VII

文章目录 题目思路代码结果 题目 题目链接 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。 有 n 块石子排成一排。每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 和 相…

H5 加密(MD5 Base64 sha1)

1. 说明 很多的时候是避免不了注册登录这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发送到后端,完成一个简单的注册的流程,那…

SVDiff: Compact Parameter Space for Diffusion Fine-Tuning——【论文笔记】

本文发表于ICCV 2023 论文地址:ICCV 2023 Open Access Repository (thecvf.com) 官方代码:mkshing/svdiff-pytorch: Implementation of "SVDiff: Compact Parameter Space for Diffusion Fine-Tuning" (github.com) 一、Introduction 最近几…

Multiuser Communication Aided by Movable Antenna

文章目录 II. SYSTEM MODEL AND PROBLEM FORMULATIONA. 通道模型B. Problem Formulation III. PROPOSED SOLUTION II. SYSTEM MODEL AND PROBLEM FORMULATION 如图1所示,BS配置了尺寸为 N N 1 N 2 NN_{1} \times N_{2} NN1​N2​ 的均匀平面阵列(uni…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…

logback日志配置

springboot默认使用logback 无需额外添加pom依赖 1.指定日志文件路径 当前项目路径 testlog文件夹下 linux会在项目jar包同级目录 <property name"log.path" value"./testlog" /> 如果是下面这样配置的话 window会保存在当前项目所在盘的home文件夹…

yo!这里是单例模式相关介绍

目录 前言 特殊类设计 只能在堆上创建对象的类 1.方法一&#xff08;构造函数下手&#xff09; 2.方法二&#xff08;析构函数下手&#xff09; 只能在栈上创建对象的类 单例模式 饿汉模式实现 懒汉模式实现 后记 前言 在面向找工作学习c的过程中&#xff0c;除了基本…

查看自己电脑是arm还是x64(x86);linux操作系统识别

1、查看自己电脑是arm还是x64&#xff08;x86&#xff09; linux 参考&#xff1a; https://liuweiqing.blog.csdn.net/article/details/131783851 uname -a如果输出是 x86_64&#xff0c;那么你的系统是 64 位的 x86 架构&#xff08;通常我们称之为 x64&#xff09;。如果…

【annie/lux 快速下载哔哩哔哩视频】全网最简单,只需要5步!!!

1.首先 现在annie更名为lux 官网地址&#xff1a;https://github.com/iawia002/lux/releases 2.进入官网之后如图所示 3.下载lux软件 4.下载lux 这里需要说明一下 如果不下载这个的话也可以下载视频 但是视频和音频是分开的&#xff0c;你的视频没有声音 5.下载视频

Hive 主要内容一览

Hive架构 用户接口&#xff1a;Client CLI&#xff08;command-line interface&#xff09;、JDBC/ODBC(jdbc访问hive) 元数据&#xff1a;Metastore 元数据包括&#xff1a;表名、表所属的数据库&#xff08;默认是default&#xff09;、表的拥有者、列/分区字段、表的类型&am…

面试150 位1的个数 位运算

Problem: 191. 位1的个数 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 Code public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n){int res 0;while (n ! 0){res 1;n & n - 1;// 把最后…

Python(SQLite)executescript用法

SQLite 数据库模块的游标对象还包含了一个 executescript() 方法&#xff0c;这不是一个标准的 API 方法&#xff0c;这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用&#xff0c;它可以执行一段 SQL 脚本。 例如&#xff0c;如下程序使用 executescr…

Spring Cloud + Vue前后端分离-第16章 项目功能升级

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第16章 项目功能升级 BUG修复与功能优化 16-1 已提交的代码讲解 1.将gateway中的路由配置改为IP&#xff0c;用lb://时&#xff0c;有时候会有延时&#xff0c;需要等一会…

【Qt5小项目】接金币小游戏

代码量在250行左右&#xff0c; 需要源码的可以私信我。

ElementUI Data:Table 表格

ElementUI安装与使用指南 Table 表格 点击下载learnelementuispringboot项目源码 效果图 el-table.vue&#xff08;Table表格&#xff09;页面效果图 项目里el-table.vue代码 <script> export default {name: el_table,data() {return {tableData: [{dat…

[office] 在Excel2010中设定某些单元格数据不参与排序的方法介绍 #其他#知识分享#笔记

在Excel2010中设定某些单元格数据不参与排序的方法介绍 在Excel中排序&#xff0c;相信大家都会了&#xff0c;直接将一组数据按照从小到大或者从大到小进行排序&#xff0c;但是&#xff0c;现在要求我们规定其中几组数据不进行排序&#xff0c;只排序其余的部分。又该如何操作…

【数据分享】1929-2023年全球站点的逐月降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐月平均气温数据、逐月最高气温数据…

Linux 网络编程 + 笔记

协议&#xff1a;一组规则 分层模型结构&#xff1a; OSI七层模型&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型&#xff1a;链路层/网络接口层、网络层、传输层、应用层 应用层&#xff1a;http、ftp、nfs、ssh、telnet、传输层&am…

GPT3.5\GPT4系列计算完整prompt token数的官方方法

前言: ChatGPT如何计算token数&#xff1f;https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502https://wtl4it.blog.csdn.net/article/details/135116493?spm1001.2014.3001.5502 GPT3.5\GPT4系列计算完整prompt token数的官方方法&#xff1…

Unity3d C# 在WebGL平台加载并解析xml文件实现总结

前言 xml是可扩展标记语言&#xff0c;由一系列的元素、属性、值节点等构成的一个树形结构&#xff0c;除了可读性差一点&#xff0c;别的用于存储一些结构化的数据还是比较方便的。这个功能在Unity3d端的实现是比较方便快捷的&#xff1a; void GetXML1() {string filePath …