Atlas 200DK+CANN 5.1.RC2+MindStudio5.0.RC2+MindX SDK 3.0玩转攻略12
十二、使用MindStudio 5.0.RC2 Windows版跑通MMNet样例工程
1、准备MMNet的工程文件
张小白最近看到 其他开发者的帖子,比如这篇:https://bbs.huaweicloud.cn/forum/thread-0267963813181180009-1-1.html
MMNet是关于人像分割的神经网络。
我们可以打开 https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/1383ce0c-240c-4a96-a932-e6492a0db2c2
看到详情:
点击上面的Gitee,进入代码仓:
https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/MMNET
由于这是一个mindxsdk的工程。我们需要先下载代码仓:
在Windows的cmd中切换到L:盘,执行:
git clone https://gitee.com/ascend/mindxsdk-referenceapps.git
同时,为了得到离线om模型,我们同时在200DK上也同时做同样的操作:
git clone https://gitee.com/ascend/mindxsdk-referenceapps.git
在200DK上切换到 工程的模型目录:cd ~/mindxsdk-referenceapps/contrib/MMNET/model
wget https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps /contrib/MMNET/mmnet.pb --no-check-certificate
模型转换:
atc --model=mmnet.pb --framework=3 --output=mmnet --soc_version=Ascend310 --insert_op_conf=mmnet.aippconf --input_shape="input_x:1,256,256,3"
转换成功后,将其下载到windows同样目录下:
L:\mindxsdk-referenceapps\contrib\MMNET\model
打开MindStudio windows版应用,并打开 L:\mindxsdk-referenceapps\contrib\MMNET 工程。
Ascend->Convert to Ascend Project
选择 Ascend MindX SDK App,点击OK。
将应用案例中的图片另存到 L:mindxsdk-referenceappscontribMMNET 目录下:
好像又有点问题。这个图片依然是png格式。
使用画图打开后另存为jpg格式:
2、在200DK上安装MindX SDK 3.0.RC2 aarch64版
打开 https://www.hiascend.com/zh/software/mindx-sdk/mxVision/community
对于200DK而言,需要安装mindx sdk的arm版本:
安装的方法也很简单:
chmod +x *.run
./Ascend-mindxsdk-mxvision_3.0.RC2_linux-aarch64.run --install
同样的,修改.bashrc文件,增加 . /home/HwHiAiUser/mxVision/set_env.sh
并且source ~/.bashrc使其生效:
3、配置Mind SDK
打开Ascend->MindX SDK Manager,点击Import SDK,分别输入 CANN的路径和MindX SDK的路径:
CANN Location选择:/home/HwHiAiUser/Ascend/ascend-toolkit/5.1.RC2
SDK Location选择:/home/HwHiAiUser/mxVision-3.0.RC2
要精确到具体的版本号,点击OK:
系统会将SDK的配置同步到本地:C:\Users\xishu\Ascend\mindx_sdk\
可以使用资源管理器看到这些文件。但是这些都不需要动。
同步完毕后,会显示如下信息:
MindStudio已经识别出了 arm版的 mxVision 3.0.RC2版本。
点击OK继续。
4、配置Python
打开 File->Project Structure
一开始 SDK为空,下拉后显示如下:
点击 Add Python SDK,并选择 SSH Interpreter:
系统会自动弹出右边的内容。
点击OK返回前一个窗口。
再点击 Modules
点击右边的+
选择Python
点击OK,关闭 Project Structure窗口。
5、配置Deployment
查看tools->Deployment->Configuration
Mappings:
这里似乎不需要任何配置,上个工程配置好的内容可以直接复用。
6、第一次运行失败的尝试
由于这是个Python工程,无需编译配置,直接进行运行配置:
点击Run-》Edit Run Configuration
将Executable改为 L:\mindxsdk-referenceapps\contrib\MMNET\main.py
运行下试试:Run
报Python版本中没有 _StreamManagerApi的包。难道200DK上的MindX SDK装的不对?
改下Run的配置:
打开run.sh 并写入MindX SDK的安装地址:
重新运行:
报错好像是一样的。
感觉MindX SDK还是一直没搞好。
7、升级Python 3.7.5到Python 3.9.7
经过跟MindStudio专家的沟通,CANN提供能力下,模型转换功能只支持python3.9.0-3.9.7。3.7.0-11 3.8.0-11,sdk2.0.4以后都只支持python3.9。
所以专家建议将Python切换到3.9再试试。
不过这个动作会非常大,几乎相当于要将Python,pip依赖包,CANN toolkit和MindX SDK等等全部重装了。
但是既然现在出了问题,就得解决。张小白折腾了一阵子,还是决定开始升级!
查看了Python的版本,专家建议使用Python3.9.7,虽然张小白很想用Python 3.9.13,但是想想还是听话吧!
浏览器下载 https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz
将其传到200DK
tar -zxvf Python-3.9.7.tgz 解压:
cd Python-3.9.7
./configure --prefix=/usr/local/python3.9.7 --enable-loadable-sqlite-extensions --enable-shared --with-openssl=/home/HwHiAiUser/openssl-1.1.1q
...
make -j8
耐心等待编译结束。
sudo make install
修改~/.bashrc,将Python 3.7.5的地方改为Python 3.9.7
source ~/.bashrc 使得环境变量生效(不过最好重新登陆,不然会夹杂着Python 3.7.5的路径)
检查安装结果:
python3 --version
pip3 --version
看来还是需要 把安装之后生成的libpython3.9.so.1.0拷贝到/usr/lib64和/usr/lib下:
sudo cp libpython3.9.so.1.0 /usr/lib/
sudo cp libpython3.9.so.1.0 /usr/lib64/
pip3 --version
升级pip版本:
pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com --user
做个软链接:
sudo su -
ln -s /usr/local/python3.9.7/bin/python3.9 python
exit
python -V
把root用的下的.bashrc中的 Python 3.7.5 也改为Python 3.9.7
source ~/.bashrc后并进行验证
回到HwHiAiUser用户,安装pip依赖包:
pip3 install attrs numpy decorator sympy cffi pyyaml psutil protobuf scipy requests absl-py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
。。。
pathlib包也需要安装:
pip3 install pathlib2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 list
再补充安装两个包:
pip3 install grpcio -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install pylint -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
8、重装CANN Toolkit 5.1.RC2
先卸载CANN toolkit 5.1.RC2,然后再安装CANN toolkit 5.1.RC2
cd
./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --uninstall
./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --install --chip=Ascend310-minirc
9、重装MindX SDK 3.0.RC2
./Ascend-mindxsdk-mxvision_3.0.RC2_linux-aarch64.run --uninstall
./Ascend-mindxsdk-mxvision_3.0.RC2_linux-aarch64.run --install
为了保险起见,把设备都重启下,以保证最新的环境变量生效。
现在可以重新到MindStudio做个MindX SDK的删除和重新import。方法前面已经有了,此处略过。
10、MindStudio重新配置Python
由于Python从3.7.5升级到3.9.7,所以需要按照”4、配置Python“的方法重新配置Python:
打开 File->Project Structure,具体方法参见前面章节,配置效果如下:
重新配置 Project Structure-》SDKs->SSH Interpreter:
顺手删掉原来的Python 3.7.5的配置、
相关的Project和Modules参数也对应修改成Python 3.9.7的
11、反复运行直到成功!
再运行试试:
怎么还是报这个错?
再仔细看看:
切换到200DK终端上:
确实没有这个StreamManagerApi库,奇怪,不应该啊,按理说装完MindX SDK之后就应该有这个库了啊。
但是acl库是有的,当然有,不然前面YoLoV3的样例工程就无法跑成功啊。
再仔细看看.bashrc
原来发现了一个隐含的大BUG。
前面的set_env.sh都是通过.来执行的,最后一个MindX SDK的set_env.sh却是通过bash来执行的。貌似bash会新开一个shell执行,执行完毕后并不能将结果保留到当前shell。
所以貌似执行过 .bashrc后,MX_SDK_HOME还是空值。
不多分析了,赶紧改吧!
再重新登陆看看:
好像这些MindX SDK环境变量都有了。
再看看import行不行:
好像可以啊!张小白越来越有信心了!
再到MindStudio运行试试:
信心总是被打击得很快,不过张小白依然是不死小强。。
查看下protobuf的版本:4.21.5
pip install protobuf
上面说需要 3.20.x。。。
张小白也不知道该安装哪个版本,于是就乱写一个试试:
pip install protobuf==3.20.5
没有3.20.5版本。但是告诉我,有3.20.1版本,就是他了!
pip install protobuf==3.20.1
再来运行:
没装opencv,那就装吧:
pip3 install opencv-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
再来运行:
没装PIL,那就装吧!
pip3 install pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
再来运行:
好像是文件名不对,仔细看代码main.py:
图片要求的名称为test.jpg
那就将图片名称改为现在的名称吧!
再重新运行:
程序成功执行完毕。
原始图片为:
生成好的图片为:test-out.jpg
终于执行完毕了,真不容易啊!!!
12、pipeline解读
因为MMNet是个Python的MindX SDK程序,它是有Pipeline的。我们点开pipeline目录下的MMNET.pipeline,先看看它的文本:
文本有点绕,路径张小白都画出来了:appsrc0->mxpi_imagedecoder0 解码->mxpi_imageresize0 (resize)->mxpi_tensorinfer0 推理->appsink0
点击Pipeline Stream Editor看到具体的步骤及详情:
appsrc0:
图片解码:输入图片格式要求为 jpg,BGR格式:
resize:
送进模型进行推理:
结束:
模型输出的结果,是通过main.py后面的脚本完成结果的读取和opencv的结果图写入的。
变量之间的关系张小白也大致标出了。大概就是这样的流向~~
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)