赞
踩
第一章 YOLO制作数据集流程(附脚本代码)
第二章 华为昇腾Atlas 200I DK A2部署详解
第三章 YOLOv5部署到华为昇腾Atlas 200I DK A2详解
分享记录一下我在将YOLO部署到华为昇腾Atlas 200I DK A2板子上过程中遇到一系列问题以及解决方法。
这块板子搭载的是CPU和NPU,NPU就相当于PC的GPU。
CPU推理速度不如NPU推理速度,对实时推理有要求的就用NPU方式。
YOLO本身的detect.py支持的是pt和onnx格式
板子上仅支持CPU使用该方法推理,下面会介绍具体部署方法。
板子上NPU推理需要将onnx转换为om格式,下面会介绍具体部署方法。
root用户装有开发板上的一系列开发包环境,推荐使用该环境即可,无需创建虚拟环境(安装开发板的开发包非常麻烦且没必要)
命令行执行 su root
密码 Mind@123
执行python detect.py
会报错缺少包,缺少什么包就装什么包。每次装一个再运行一次detect.py直到不缺少包能正常运行为止
pip install 包名
root用户装有开发板上的一系列开发包环境,推荐使用该环境即可,无需创建虚拟环境(安装开发板的开发包非常麻烦且没必要)
命令行执行 su root
密码 Mind@123
om模型不支持maxpool算子,需要把yolo中一些模块用到的torch.nn.maxpool2d替换成avepool。
其他模型或者YOLO版本我不清楚,可以自行研究,方法类似。
具体方法:
① yolov5目录下models的common.py,搜索max
② 把所有用到MaxPool2d的都替换成AvgPool2d
转换完成后重新训练模型
训练完以后在netron.app查看一下自己的模型是否还有maxpool算子,网页中搜索max即可,我的按上面步骤替换后就没了。
首先在pc上将pt模型用export.py转换为onnx格式。
然后在pc上用detect.py验证一下onnx模型是否能正常检测
在root用户下调用板子atc命令将onnx转换为om格式
atc --model=origin_name.onnx --framework=5 --output=output_name --input_format=NCHW --input_shape="input:1,3,640,640" --precision_mode_v2=origin --log=error --soc_version=Ascend310B1
其中–input_shape需要在netron.app里面查看自己onnx模型输入,需要一致。比如我的是三通道RGB图片640x640尺寸,名字是images,那就是–input_shape=“images:1,3,640,640”
NPU推理不能用detect.py,那个是调用的torch。
板子自带的YOLO样例的代码用的是板子的开发包ais进行推理,但是我直接使用它调用我转换好的om模型时发现代码能执行,但是推理效果有问题,满屏幕都是框。
解决办法是自己编写代码,用mindx sdk这个包来推理。
幸好的是官方有一个样例代码 here
其中get_labels_from_txt和draw_bbox函数在YOLO样例的main.ipynb有,自己修改一下。
视频流和摄像头流检测的代码也参考板子自带YOLO样例修改推理的那部分代码为mindx接口的代码即可。
运行代码前需要将mindx初始化一下,没有初始化过的命令框调用python 你的代码.py会报错
去根目录下打开命令执行框,执行该命令
. /usr/local/Ascend/mxVision/set_env.sh
1、 打开终端并切换至root用户:
使用命令:vim ~/.bashrc
2、 在文本末尾添加:source /usr/local/Ascend/mxVision/set_env.sh 保存并退出
3、 执行source ~/.bashrc使其生效
感谢红凯的大力支持,网上教程太难找,自己摸索起码要花一个月时间。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。