嵌入式AI---yolov5模型转化为华为昇腾om模型


文章阅读顺序:
(1)训练自己的yolov5目标检测模型
(2)yolov5模型转化为华为昇腾om模型(本文)
(3)在华为昇腾推理自己的yolov5目标检测模型

前言

根据:《训练自己的yolov5模型》可以得到yolov5的目标检测模型。为了实现算法在现实场景的应用,需要将算法转化为相应格式并部署在边缘计算设备上。常见的转化格式有华为昇腾的om格式、瑞芯微的rknn格式、英伟达的wts格式。本文以华为昇腾Atlas 200I DK A2为例,执行om格式转换。
转换步骤:
第一步:pt格式->onnx格式
调用yolov5的export.py将.pt转换为.onnx

第二步:onnx格式->昇腾om格式:
方法1、在Ubuntu虚拟机完成模型格式转换(转化速度快,但环境安装不方便)
方法2、在昇腾边缘计算设备完成模型格式转换(转化速度慢,但不需要配置环境)


一、pt格式转换为onnx格式

根据《训练自己的yolov5模型》可以得到best.pt模型文件,现在需要将模型转化为onnx格式。
1.工程里已包含best.pt文件,打开工程的export.py准备转换模型格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PudVeWYW-1721990282343)(https://i-blog.csdnimg.cn/direct/5a4740931bc646868692bed7182bab1c.png)]

2.修改export.py

parse_opt函数的data和weight参数需要改动

parser.add_argument('--data', type=str, default=ROOT / 'data/UA-DETRAC.yaml', help='dataset.yaml path')
parser.add_argument('--weights', type=str, default=ROOT / 'best.pt', help='weights path')

3.运行export.py
运行结果:
在这里插入图片描述
在工程目录中可以看到转化得到的best.onnx文件
在这里插入图片描述
由于接下来onnx转换为om格式过程很复杂,所以要先确保onnx格式推理无误。
测试onnx文件方式:将detect.py的weights参数设置为best.onnx,执行detect.py,推理结果保存在runs/detect/最新的exp目录中,检查onnx模型的推理结果是否正常。
在这里插入图片描述
检查发现onnx模型推理无误,接下来准备将onnx转化为om。

二、onnx格式转换为om格式

方法1.在Ubuntu虚拟机完成模型转换

可参考官方手册,但手册里很多细节没讲,装虚拟机和CANN包有很多坑,以下介绍步骤:
(1)虚拟机安装
不建议拿平时用的虚拟机来转换模型,装环境容易搞爆自己的虚拟机(血泪教训)
建议下载一个映像文件,新建一个虚拟机专门用于模型转换,此处提供本文的映像文件。

链接:https://pan.baidu.com/s/10SppKKNyAvvEVKnz01NpLQ?pwd=hbnb
提取码:hbnb

映像文件的压缩包经过拆分处理,需采用7zip等软件解压,解压结果如下:
在这里插入图片描述
打开VMware播放器,选择创建新虚拟机
在这里插入图片描述

选择解压好的.iso映像文件,下一步
在这里插入图片描述

然后设定用户名和密码(要记住)->设置虚拟机名字、存储位置
在这里插入图片描述
设置虚拟机占据磁盘大小
在这里插入图片描述
自定义硬件(把内存和处理器核数开大点)
在这里插入图片描述在这里插入图片描述

设置完后,点击完成,虚拟机就开机了
(虚拟机初次启动要等很久,耐心等待)

(2)CANN安装
开机后,由于模型转换需要用到python,故需要安装一些python相关的依赖。调用python3 --version可知映像文件已自带python3.8.10。但还有一些东西需要装,例如pip3、numpy等等。
执行以下命令:

sudo apt-get install python3-pip

(注:初次执行sudo可能会报错,设置一下root用户密码即可)
此外,还需装一些包,逐行执行以下命令:

pip3 install attrs
pip3 install numpy
pip3 install decorator
pip3 install sympy
pip3 install cffi
pip3 install pyyaml
pip3 install pathlib2
pip3 install psutil
pip3 install protobuf
pip3 install scipy
pip3 install requests
pip3 install absl-py

如果下载很慢,可以在对应的命令后加上镜像源
例如pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/

python依赖装完后,打开浏览器,输入以下链接并回车下载CANN软件包

https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%207.0.RC1/Ascend-cann-toolkit_7.0.RC1_linux-x86_64.run

在这里插入图片描述
下载好的CANN软件包会存放在~/Downloads路径下,执行命令为软件包添加可执行权限:

cd ~/Downloads/
chmod +x Ascend-cann-toolkit_7.0.RC1_linux-x86_64.run

执行命令安装软件包(官方手册用的命令参数是–install,尝试发现用了会报错):

./Ascend-cann-toolkit_7.0.RC1_linux-x86_64.run --full

执行后耐心等待,遇到询问就按y,等到提示你CANN安装路径在哪,以及提示你需要执行环境变量命令就说明安装成功了。(若安装失败,大概率是依赖没装好,请参考上面写的python依赖是否都装好了,或者参考官方手册CANN依赖

接下来,执行以下两行命令配置环境变量(注意先将xxx替换为CANN的安装路径,一般来说,安装路径都是/home/xx用户/Ascend)

source xxx/ascend-toolkit/set_env.sh
export LD_LIBRARY_PATH=xxx/ascend-toolkit/latest/x86_64-linux/devlib/:$LD_LIBRARY_PATH

至此,CANN安装完成
(3)模型转换
先将windows训练的yolo模型文件传输到虚拟机上
调用ifconfig查看IP(若报错,则调用sudo apt install net-tools先安装网络工具)
在这里插入图片描述
调用以下命令给虚拟机安装ssh服务,便于windows传输模型文件给虚拟机(若已装好,则不用)

su
apt install firewalld openssh-client openssh-server

打开FileZilla建立与虚拟机的连接
在这里插入图片描述

传输best.onnx给虚拟机(可以先在虚拟机新建一个convert_om目录)
在这里插入图片描述

切换目录

cd ~/convert_om/

重点来了:执行以下命令将onnx模型转化为om模型

atc --model=best.onnx --framework=5 --output=model --input_format=NCHW --soc_version=Ascend310B4

在这里插入图片描述
看到这句话就转换成功了,执行ls命令可以看到model.om模型文件
在这里插入图片描述
若转换失败,可能有以下原因:
(1)提示:Command ‘atc’ not found, but can be installed with:
sudo apt install bsdgames

解决办法:这是因为环境变量失效了,重新执行以下命令即可
(注意先将xxx替换为CANN的安装路径)

source xxx/ascend-toolkit/set_env.sh
export LD_LIBRARY_PATH=xxx/ascend-toolkit/latest/x86_64-linux/devlib/:$LD_LIBRARY_PATH

(2)转换一段时间后,提示了一大串python错误

解决办法:这是因为内存爆了,要检查一下虚拟机设置里开辟的内存大小,至少16G(越大越好),检查完毕后重启一下虚拟机,重新转换

(3)提示:ATC run failed, Please check the detail log, Try ‘atc --help’ for more information
E10001:…

解决办法:可能是ATC指令参数错误(检查输入参数,如–model=best.onnx参数命名是否正确)。若检查清楚了输入参数没有错误,则可能是CANN包没装好,重装环境吧。

方法2.在昇腾边缘计算设备完成模型转换

本文昇腾Atlas 200I DK A2的IP地址为192.168.0.2,在Mobaxterm远程登录昇腾Atlas 200I DK A2,在/home/HwHiAiUser下创建convert_om目录。
在这里插入图片描述
打开FileZilla建立与昇腾的连接,将best.onnx传输到昇腾om_convert目录。
在这里插入图片描述

进入om_convert目录,接下来准备转换模型
1.执行以下命令解除内存限制(否则转换模型时容易内存溢出,导致转换失败)

ulimit -v 20480000

2.执行以下命令开始模型转换(昇腾端转换模型很慢,耐心等待)

atc --model=best.onnx --framework=5 --output=model --input_format=NCHW --soc_version=Ascend310B4

在这里插入图片描述转换成功的结果如下所示:在这里插入图片描述

若转换失败,则参考方法一的失败原因进行检查。由于昇腾端的环境默认是装好的,转换失败很可能是因为内存不足,注意重启一下,转换前解除内存限制。参考链接

3.转换完成后,执行以下命令恢复内存限制

ulimit -v unlimited


总结

基于《训练自己的yolov5模型》,得到了yolov5的bset.pt模型文件。本文介绍了如何将.pt模型文件转化为onnx格式,以及将onnx格式转换为om文件的两种方法,下一步将基于转换的om文件进行昇腾端推理。持续更新,敬请期待。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值