华为Atlas 200 DK开发者套件踩坑记(持续更新)

前言

当你点进这篇博客时,我相信你最近一定在为atlas200DK这块板子发愁、掉头发。不用问我为什么我知道,因为我最近也是这样,但是最终在不懈努力下还是走通了这块板子。在整个过程中也查阅过csdn上的很多资料,这些资料都为我提供过很多帮助。
以下是调试这块板子的注意事项:
如果你刚拿到这块板子准备调通,请不要再csdn的博客上看调试流程,请一定按照华为的atlas开发者套件的官方文档走。因为200DK开发板更新的很快,流程都和需要安装的开发套件包都在随着时间升级。曾经的博客可能在发表时是可以行得通的,但是随着时间的推移就不一定了。本篇博客也不例外,但是至少在我看来提出了一些很具有参考性的意义。
下面我以Atlas 200 DK开发者套件开发手册(1.0.11.alpha版本)为基础记录我遇到的坑与解决办法。

在1.0.11版本的文档中的环境部署指南目录下,有搭建开发环境和搭建运行环境,这是文档中最重要的两节内容。并且这两者的先后顺序都是无所谓的,我在调试200DK算力板时,时先搭建的开发环境再搭建的运行环境。

一、开发环境搭建

直接根据1.0.11版本手册走搭建开发环境流程,搭建开发环境时我所基于的操作系统是ubuntu-18.04.5-desktop-amd64.iso版本。
在这里插入图片描述

1.准备软件包:

注意事项:一定要注意需要安装的软件包一定要选5.0.3版本(此版本与1.0.11版本手册搭配使用)的。

2.配置Ubuntu X86系统:

注意事项1:直接跟着这一节的文档走即可。但是要注意创建安装用户那个环节可以省去,如果是虚拟机中的ubuntu系统则直接用装ubuntu时创建的普通用户即可,如果是物理机中的ubuntu系统也直接用装ubuntu时创建的普通用户即可。如果在此处再创建一个单独的安装用户会导致后面安装Python3相关依赖时安装不上。
注意事项2:在根据文档指导安装完python3.7.5后,里面自带的pip是19.2.3版本的,在后面安装attrs,psutil等python相关依赖时会安装不上,可根据警告提示把pip提升到21.2.1版本。

3.安装开发套件包:

直接跟着文档走即可

4.安装后处理:

直接跟着文档走即可

5.安装MindStudio:

注意事项1:直接跟着文档走即可,如果前面的软件包版本安装对了这步是没问题的。解压mindStudio压缩文件后进入bin目录下用./MindStudio.sh命令启动MindStudio,一般第一次启动不成功直接跟着ubuntu报的提示安装所需要的环境依赖,如下图:
在这里插入图片描述
注意事项2:在上面所有提示的需安装依赖安装完毕后再次用命令启动MindStudio会有MindStudio编辑器的弹窗提示缺少java环境变量、那么我们就需要安装java环境

  • 安装JDK
    执行sudo apt-get install -y openjdk-8-jdk命令安装JDK
  • 配置JAVA_HOME环境变量
    在任何目录下执行vi ~/.bashrc命令,打开.bashrc文件
    在文件的最后一行后面添加如下内容
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 
export PATH=$JAVA_HOME/bin:$PATH

二、运行环境搭建

直接根据1.0.11版本手册走搭建运行环境流程,搭建运行环境时根据手册指导操作系统是ubuntu-18.04.05-server-arm64.iso版本。一定要用arm的服务器版本ubuntu
在这里插入图片描述

1.制作SD卡:

注意事项:在制SD卡过程中我选用的是读卡器场景,并且是在虚拟机的ubuntu系统上操作的。如果你也是虚拟机需要首先在虚拟机中设置usb兼容性。步骤如下

在这里插入图片描述

将usb兼容性设置为usb3.0
在这里插入图片描述
然后再点击虚拟机中的操作系统右下方的USB接入标识断开读卡器与电脑的连接使虚拟机中的操作系统能检测到读卡器。
在这里插入图片描述
如果不执行上一步操作,则在制作SD卡的第6步,fdish -l 命令是无法检测到读卡器中的SD卡的
在这里插入图片描述

2.连接Atlas 200 DK开发者板与Ubuntu服务器

根据1.0.11文档在这里有3种方案,我选择的是第三种方案——使用网线通过路由器连接Ubuntu服务器
,在这种方案中包含了第一种方案通过USB端口直连Ubuntu服务器。直接按照1.0.11文档流程走就行了。
注意事项:如果使用的是虚拟机中ubuntu系统方式,用USB数据线连接电脑与开发板时一定要注意数据线是能够传输数据的不是只能充电的(大坑,在这里搞了好长时间发现是数据线的问题),不然使用ifconfig命令检查不到开发板的网卡ens160u2,
在这里插入图片描述
也就会导致后续在执行bash configure_usb_ethernet.sh配置了开发板ip地址后,再虚拟机的操作系统中ping不通开发板默认ip地址192.168.1.166

3.安装CANN运行软件包

直接跟着1.0.11文档走即可
注意事项:一定要注意驱动和固件的版本与CANN版本的配套关系,截止博客发表日期配套关系如下。
在这里插入图片描述

4.修改Atlas 200 DK用户密码

直接跟着1.0.11文档走即可

三、在华为开发板atlas200dk上运行yolov5项目

1.使用MindStudio连接开发板

此处参考1.0.9教程视频1.3节21分30秒之后的内容
1.0.9版视频教程

2.把yolov5文件用MindStudio打开

使用命令打开MindStudio,点击File–>Ascend Training–>Next创建一个模型训练项目。然后再把yolov5相关文件拖到项目下面。完成后目录结构如下:
在这里插入图片描述

3.配置远程项目远程运行

1.点击Edit Configuration
在这里插入图片描述

2.点击“+”号创建远程项目
在这里插入图片描述

3.配置相关参数
创建了Ascend Training下的运行项目后,开始配置参数。
Run Mode可选择Remote Run即远程运行模式,将ubuntu系统里yolov5项目通过ssh协议远程发送到华为AI算力板中运行,选择Local Run在ubuntu系统中运行。

在这里插入图片描述
SSH Connection即需要填写通过ssh协议连接的ip,端口,用户名,密码等信息
在这里插入图片描述
Executable即选择需要执行的入口文件
完成以上配置后点击右三角开始运行项目。

4.解决python版本以及依赖包问题

在点击右三角运行后会报错显示需要python3.7的版本,检查华为AI开发板中ubuntu系统的python版本发现为python3.6,为了使华为AI开发板中的python版本和虚拟机中的ubuntu系统python版本以及其他环境保持一致,就按照1.0.11文档中的搭建开发环境—>配置Ubuntu x86系统—>按照依赖里的步骤来安装python3.7.5版本。
在这里插入图片描述
再次运行项目发现报错Could not import the lzma modle; Your installed Python is incomplete。这是因为python3.7.5这个特定版本的python缺少lzma模块,解决办法参考博客linux系统中python导入pandas提示:Could not import the lzma modle的坑
接着运行项目发现报错ImportError: libGL.so.1: cannot open shared object file: No such file or directory。这是因为在华为AI开发板的ubuntu-arm版本系统中缺少相关模块,解决办法参考博客
Ubuntu在import cv2报错libGL.so.1: cannot open
再次运行,成功!

5. 解决检测效率低问题

接上,当我完全配置好了交叉编译环境成功运行后,如下图,发现检测效率很低,检测一张图片大概需要5s
在这里插入图片描述
探其原因发现是因为我们只使用了开发板的cpu,没有使用开发板gpu,接着阅读1.0.11版本的开发文档发现需要做模型转换,需要使用ATC工具转换模型
在这里插入图片描述
根据上图(图片来源于Atlas 200 DK 开发者套件(1.0.9.alpha))我们需要先将.pt文件转换为.onnx文件

5.1 .pt文件转换为.onnx文件

首先我们要先把yolov5s.pt文件转换为yolov5s.onnx文件。我们可以使用yolov5代码根目录下的models文件中的export.pt文件输出.onnx文件
使用如下命令会生成yolov5s.mlmodel,yolov5s.onnx,yolov5s.torchscript.pt三个文件

python models/export.py --weights yolov5s.pt --img 640 --batch 1
5.2 .onnx文件转换为.om文件
  1. 环境变量的配置
    参考Atlas 200 DK 开发者套件(1.0.9.alpha)——模型转换准备工作配置相关环境变量

  2. 模型转换命令
    如果第一步环境变量配置没问题,使用如下命令进行模型转换可以得到yolov5s.om文件

atc --model=onnx/yolov5s.onnx --framework=5 --output=model/yolov5s --soc_version=Ascend310

注意事项:如果是在开发环境为虚拟机的情况下转换模型,则需要注意虚拟机内存不能太小,如果虚拟机内存分配太小会报cache相关错误


2022年4月1日更新分割线


四、在华为开发板atlas200dk上运行yolov4项目

由于实验室项目需要将算法模型由yolov5换成了yolov4用于目标检测。首先我们从第三节知道,在atlas200dk上运行的模型需要om版本,所以我们需要将我们的模型通过atc工具转换成om模型。
参考华为官方链接

1 .pth模型文件转.onnx文件

对于模型的转换我们需要先从官方的yolov4(https://github.com/Tianxiaomo/pytorch-YOLOv4)中获取到.pth模型文件,如下图所示
在这里插入图片描述
然后再需要根据华为官方链接修改demo_pytorch2onnx.py脚本将.pth模型文件转为.onnx模型文件
在这里插入图片描述
然后会生成yolov4_1_3_608_608_static.onnx 文件

2 .onnx模型文件转.om模型文件

在这里插入图片描述
atc工具下载以及环境变量配置参考1.0.11开发手册(前文已给明地址)
注意事项 在使用atc命令将.onnx模型转换为.om模型时需要注意 -out_nodes参数,这个参数的值需要与为模型的输出节点名称,需要与1中的修改demo_pytorch2onnx.py脚本的第三个箭头的outputs_name的值相同
在我自己的系统中我的命令是

atc --model=yolov4_1_3_608_608_static.onnx --framework=5 --output=yolov4 --input_format=NCHW --log=info --soc_version=Ascend310 --input_shape="input:1,3,608,608" -out_nodes="feature_map_1;feature_map_2;feature_map_3"

注意事项 如果在转换的过程中生成了om文件,但是om文件为0字节一般都是虚拟机ubuntu系统磁盘存储空间不够,要注意在转换模型的过程中删除生成的附加文件

3.使用benchmark推理工具进行推理

参考文档ATC YoloV4 (FP16)
CANN 5.0.1 推理benchmark工具用户指南 01
对om模型进行推理,由于我在atlas200dk上制成的系统是arm的所以使用./benchmark.aarch64命令

./benchmark.aarch64 -model_type=vision -batch_size=1 -device_id=0 -om_path=yolov4_bs1.om -input_width=608 -input_height=608 -input_text_path=yolov4.info -useDvpp=false -output_binary=true

推理结果如图所示
在这里插入图片描述

4. 使用msame推理工具进行推理

在我看来benchmark推理工具就是一个黑盒子,然鹅这个msame推理工具是一个c++代码写的白盒推理工具。
参考文档ATC YoloV4 (FP16)
msame推理工具文档]
在atlas200dk上使用msame推理之前所需要的om模型文件,与二进制图片文件,生成方式均参考ATC YoloV4 (FP16)这个教程,然后使用msame推理工具进行推理,根据第二个文档首先要运行编译脚本才能生成msame工具,然后按照指定路径进行推理工具使用
推理结果如下,吞吐率大概89帧/s比benchmark工具快很多
在这里插入图片描述


2022年8月19日更新分割线


五 使用码云Ascend仓库的c++代码进行yolov5模型推理

相比于第四节写的使用推理工具进行推理的方式使用春c++代码调用开发板中开发套件包内置接口这种推理方式更具有可修改性。我们主要参考华为Ascend的gitee库中的代码进行推理。这里面关于yolo的代码主要有两种类型第一种是模型输出为nms前的结果也就是由三个特征图reshape出的大概20000多个预测框以及预测框的分类,c++代码获取到这种模型的输出后进行iou和nms处理再获得最终的预测框,然后进行绘图。第二种是模型输出nms后的结果,c++获取到后直接进行绘图。对于这两种方式,显然第二种方式的推理速度是更快的,因为华为开发套件包将nms处理作为一个类似于cnn的算子来进行模型推理,第一种方式就需要使用for循环对20000多个最开始的预测框进行遍历显然速度会慢很多

1.nms放在c++代码中实现

2.nms放在yolov5模型中实现

  • 13
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值