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

相关文章

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

若依部署Nginx和Tomcat全过程

《若依部署Nginx和Tomcat全过程》文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署... 目录Nginx部署后端部署Tomcat部署出现问题:点击刷新404总结Nginx部署第一步:打包

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验