当你点进这篇博客时,我相信你最近一定在为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版本。
注意事项:一定要注意需要安装的软件包一定要选5.0.3版本(此版本与1.0.11版本手册搭配使用)的。
注意事项1:直接跟着这一节的文档走即可。但是要注意创建安装用户那个环节可以省去,如果是虚拟机中的ubuntu系统则直接用装ubuntu时创建的普通用户即可,如果是物理机中的ubuntu系统也直接用装ubuntu时创建的普通用户即可。如果在此处再创建一个单独的安装用户会导致后面安装Python3相关依赖时安装不上。
注意事项2:在根据文档指导安装完python3.7.5后,里面自带的pip是19.2.3版本的,在后面安装attrs,psutil等python相关依赖时会安装不上,可根据警告提示把pip提升到21.2.1版本。
直接跟着文档走即可
直接跟着文档走即可
注意事项1:直接跟着文档走即可,如果前面的软件包版本安装对了这步是没问题的。解压mindStudio压缩文件后进入bin目录下用./MindStudio.sh命令启动MindStudio,一般第一次启动不成功直接跟着ubuntu报的提示安装所需要的环境依赖,如下图:
注意事项2:在上面所有提示的需安装依赖安装完毕后再次用命令启动MindStudio会有MindStudio编辑器的弹窗提示缺少java环境变量、那么我们就需要安装java环境
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
注意事项:在制SD卡过程中我选用的是读卡器场景,并且是在虚拟机的ubuntu系统上操作的。如果你也是虚拟机需要首先在虚拟机中设置usb兼容性。步骤如下
将usb兼容性设置为usb3.0
然后再点击虚拟机中的操作系统右下方的USB接入标识断开读卡器与电脑的连接使虚拟机中的操作系统能检测到读卡器。
如果不执行上一步操作,则在制作SD卡的第6步,fdish -l 命令是无法检测到读卡器中的SD卡的
根据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
直接跟着1.0.11文档走即可
注意事项:一定要注意驱动和固件的版本与CANN版本的配套关系,截止博客发表日期配套关系如下。
直接跟着1.0.11文档走即可
此处参考1.0.9教程视频1.3节21分30秒之后的内容
1.0.9版视频教程
使用命令打开MindStudio,点击File–>Ascend Training–>Next创建一个模型训练项目。然后再把yolov5相关文件拖到项目下面。完成后目录结构如下:
3.配置相关参数
创建了Ascend Training下的运行项目后,开始配置参数。
Run Mode可选择Remote Run即远程运行模式,将ubuntu系统里yolov5项目通过ssh协议远程发送到华为AI算力板中运行,选择Local Run在ubuntu系统中运行。
SSH Connection即需要填写通过ssh协议连接的ip,端口,用户名,密码等信息
Executable即选择需要执行的入口文件
完成以上配置后点击右三角开始运行项目。
在点击右三角运行后会报错显示需要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
再次运行,成功!
接上,当我完全配置好了交叉编译环境成功运行后,如下图,发现检测效率很低,检测一张图片大概需要5s
探其原因发现是因为我们只使用了开发板的cpu,没有使用开发板gpu,接着阅读1.0.11版本的开发文档发现需要做模型转换,需要使用ATC工具转换模型
根据上图(图片来源于Atlas 200 DK 开发者套件(1.0.9.alpha))我们需要先将.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
环境变量的配置
参考Atlas 200 DK 开发者套件(1.0.9.alpha)——模型转换准备工作配置相关环境变量
模型转换命令
如果第一步环境变量配置没问题,使用如下命令进行模型转换可以得到yolov5s.om文件
atc --model=onnx/yolov5s.onnx --framework=5 --output=model/yolov5s --soc_version=Ascend310
注意事项:如果是在开发环境为虚拟机的情况下转换模型,则需要注意虚拟机内存不能太小,如果虚拟机内存分配太小会报cache相关错误
2022年4月1日更新分割线
由于实验室项目需要将算法模型由yolov5换成了yolov4用于目标检测。首先我们从第三节知道,在atlas200dk上运行的模型需要om版本,所以我们需要将我们的模型通过atc工具转换成om模型。
参考华为官方链接
对于模型的转换我们需要先从官方的yolov4(https://github.com/Tianxiaomo/pytorch-YOLOv4)中获取到.pth模型文件,如下图所示
然后再需要根据华为官方链接修改demo_pytorch2onnx.py脚本将.pth模型文件转为.onnx模型文件
然后会生成yolov4_1_3_608_608_static.onnx 文件
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系统磁盘存储空间不够,要注意在转换模型的过程中删除生成的附加文件
参考文档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
在我看来benchmark推理工具就是一个黑盒子,然鹅这个msame推理工具是一个c++代码写的白盒推理工具。
参考文档ATC YoloV4 (FP16)
和msame推理工具文档]
在atlas200dk上使用msame推理之前所需要的om模型文件,与二进制图片文件,生成方式均参考ATC YoloV4 (FP16)这个教程,然后使用msame推理工具进行推理,根据第二个文档首先要运行编译脚本才能生成msame工具,然后按照指定路径进行推理工具使用
推理结果如下,吞吐率大概89帧/s比benchmark工具快很多