张小白教你使用MindStudio 5.0.RC2的Windows版本进行MMNet人像分割
在MindStudio团队提供的镜像基础上,张小白基于AI1S云服务器完成了MindStudio的卡通风格迁移任务,
具体内容发布在 https://bbs.huaweicloud.com/blogs/371113,但张小白绝不止步于此,张小白还想在200DK上也试验一下MindStudio 5.0.RC2的威力。
与MindStudio在AI1S上的架构不同,200DK的CPU其实比较弱,而且上面运行的是ubuntu 18.04 server aarch64版,所以基本上不可能在上面运行基于Java11的MindStudio。所以,我们这次使用MindStudio 5.0.RC2的windows版本,结合200DK上的Python,使用远程Python运行的方式完成MMNet人像分割应用的运行。
我们把上述任务拆分成以下几个部分:
(1)创建 ubuntu 18.04 x86虚拟机,并安装部分系统依赖
(2)在 ubuntu 18.04 x86虚拟机 上制作CANN 5.1.RC2社区版的200DK启动盘
(3)启动200DK,安装部分系统依赖
(4)安装Python 3.9.7,安装部分pip依赖
(5)安装CANN Toolkit 5.1.RC2
(6)安装MindX SDK 3.0.RC2
(7)安装MindStudio 5.0.RC2 for windows
(8)准备MMNet项目工程文件,并使用MindStudio Windows版进行相关配置
(9)使用MindStudio Windows版运行调试,跑通MMNet
下面详细描述:
1、创建Ubuntu 18.04 x86操作系统的虚拟机,并安装部分系统依赖
(1)创建ubuntu 18.04 x86虚拟机
创建x86虚拟机的过程可以参见 https://bbs.huaweicloud.com/blogs/345859 《创建Ubuntu 18.04x86 操作系统的虚拟机》的步骤完成,此处不再赘述。
(2)安装net-tools
刚搭建好的虚拟机ifconfig无法使用,需要安装net-tools包:
(3)禁止Ubuntu系统自动更新
如不进行本项设置,没准操作系统会升级到ubuntu 20.04版本:
(4)修改apt源为国内源
修改文件:/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
sudo apt-get update
(5)安装openssh-server
系统缺省没有安装sshd,安装openssh-server以便可以通过MobaXterm访问:
(6)操作系统部分软件安装
sudo apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev
检查相关版本:
gcc --version
g++ --version
make --version
cmake --version
dpkg -l zlib1g| grep zlib1g| grep ii
dpkg -l zlib1g-dev| grep zlib1g-dev| grep ii
dpkg -l libsqlite3-dev| grep libsqlite3-dev| grep ii
dpkg -l openssl| grep openssl| grep ii
dpkg -l libssl-dev| grep libssl-dev| grep ii
dpkg -l libffi-dev| grep libffi-dev| grep ii
dpkg -l unzip| grep unzip| grep ii
dpkg -l pciutils| grep pciutils| grep ii
dpkg -l net-tools| grep net-tools| grep ii
dpkg -l libblas-dev| grep libblas-dev| grep ii
dpkg -l gfortran| grep gfortran| grep ii
dpkg -l libblas3| grep libblas3| grep ii
dpkg -l libopenblas-dev| grep libopenblas-dev| grep ii
(7)源码编译Python3.7.5
python3 --version
需要源码安装Python 3.7.5
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
tar -zxvf Python-3.7.5.tgz 解压
cd Python-3.7.5
./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared
make
sudo make install
修改.bashrc,增加以下内容:
#用于设置python3.7.5库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个python3版本,则指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH复制复制
source ~/.bashrc 使得环境变量生效
检查python3和 pip3的版本:
python3 --version
pip3 --version
升级pip:pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple --user
(8)安装pip依赖包
pip3 install attrs --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install numpy --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install decorator --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install sympy --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install cffi --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install pyyaml --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install pathlib2 --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install psutil --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install protobuf --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install scipy --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install requests --user -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install absl-py --user -i https://pypi.tuna.tsinghua.edu.cn/simple
2、在 ubuntu 18.04 x86虚拟机 上制作CANN 5.1.RC2社区版的200DK启动盘
根据 https://support.huaweicloud.com/environment-deployment-Atlas200DK1012/atlased_04_0010.html
操作制卡所需的相关步骤如下:
(1)安装系统依赖包
切换到root环境:
sudo su -
将 /home/ascend/.bashrc里面python的相关环境变量拷贝到 ~/.bashrc中:
安装系统依赖包:
apt-get install qemu-user-static binfmt-support python3-yaml squashfs-tools gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
(2)准备制卡所需的软件包
mkdir $HOME/mksd
cd $HOME/mksd
打开 https://www.hiascend.com/hardware/firmware-drivers?tag=community
查看 CANN 5.1.RC2.alpha007对应的固件版本:
并完成下载:
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/turing/resource/atlas200dk/1.0.13/A200dk-npu-driver-21.0.4-ubuntu18.04-aarch64-minirc.tar.gz
下载制卡所需的arm版操作系统
wget http://old-releases.ubuntu.com/releases/18.04.3/ubuntu-18.04.5-server-arm64.iso
下载制卡脚本:
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_sd_card.py
wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_ubuntu_sd.sh
(3)制卡
打开TF卡插入USB转换头,并接入笔记本电脑。
使用windows11的计算机管理删除原有分区:
将 虚拟机的USB兼容性设置改为USB 3.1(如不修改将无法识别该TF卡)
让虚拟机识别TF卡:
此时,TF卡对应的设备为 /dev/sdb
执行以下命令:
python3 make_sd_card.py local /dev/sdb
执行过程中发现需要安装一些软件包,按提示处理后,重新执行:
成功完成制卡。
3、启动200DK,安装部分系统依赖
(1)启动200DK
打开200DK外壳,将原来的卡拔出,插入新制的卡,开机:
耐心等待固件升级成功,四个灯全亮。
(2)配置USB网卡地址并通过USB登陆200DK
使用Type-C线连接笔记本电脑和200DK的Type-C口。这个时候,USB口对于笔记本电脑的ubuntu x86虚拟机而言需要有一个地址(192.168.1.188),对于200DK需要有一个地址(192.168.1.2),后者在制卡的时候就设置到200DK的arm ubuntu系统中了,所以需要设置 ubuntu x86虚拟机的网卡地址,以便两者通过USB能连通:
下载USB网卡配置脚本:
wget https://gitee.com/ascend/tools/raw/master/configure_usb_ethernet/for_20.1/configure_usb_ethernet.sh
执行该脚本,将开发环境的USB网络配置为 192.168.1.188
bash configure_usb_ethernet.sh -s 192.168.1.188
测试连接200DK:
ping 192.168.1.2
通了!
登陆200DK:
ssh HwHiAiUser@192.168.1.2
(3)在运行环境安装nnrt
此处需要注意相关操作执行的位置。开发环境指的是在虚拟机上操作(使用ascend用户),运行环境指的是在200DK上操作(使用HwHiAiUser用户)。好在看截图中的shell提示符应该能看出来在哪里操作的。
由于目前200DK还不能直接接外网,采取的方式是:先在开发环境下载nnrt包,然后scp到200DK上。
即在开发环境执行:
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN 5.1.RC2/Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run
登陆到200DK,scp该文件,然后安装:
scp ascend@192.168.1.188:/home/ascend/Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run .
./Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run --check
./Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run --install --chip=Ascend310-minirc
修改.bashrc
增加以下内容
. /home/HwHiAiUser/Ascend/nnrt/set_env.sh
source ~/.bashrc使得环境变量生效
(4)配置200DK的有线网卡地址
ifconfig查看地址:
由于张小白的有线网卡接的路由器的地址为192.168.199.1,故需要将eth0改为 192.168.199.X的网段地址,暂设为192.168.199.204
sudo vi /etc/netplan/01-netcfg.yaml
好像这个HwHiAiUser用户没有sudo权限
su - 切换到root (密码 Mind@123)
vi /etc/netplan/01-netcfg.yaml
netplan apply使其生效
ifconfig
ping 192.168.199.1
ping www.sina.com.cn
好了,200DK也可以上外网了,也就是说,运行环境也可以直接使用apt安装软件,或者使用wget下载软件包了。这无疑比通过虚拟机scp中转要好得多。
(5)修改apt源为国内华为云地址
由于200DK使用了arm的apt源,故特意使用华为云的apt源来进行系统软件的安装和更新。
具体操作如下:
切换到root用户
su -
wget -O /etc/apt/sources.list http://repo.huaweicloud.com/repository/conf/Ubuntu-Ports-bionic.list
apt-get update
(6)安装必要的arm版系统软件
apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev
...
检查相关版本:
gcc --version
g++ --version
make --version
cmake --version
dpkg -l zlib1g| grep zlib1g| grep ii
dpkg -l zlib1g-dev| grep zlib1g-dev| grep ii
dpkg -l libsqlite3-dev| grep libsqlite3-dev| grep ii
dpkg -l openssl| grep openssl| grep ii
dpkg -l libssl-dev| grep libssl-dev| grep ii
dpkg -l libffi-dev| grep libffi-dev| grep ii
dpkg -l unzip| grep unzip| grep ii
dpkg -l pciutils| grep pciutils| grep ii
dpkg -l net-tools| grep net-tools| grep ii
dpkg -l libblas-dev| grep libblas-dev| grep ii
dpkg -l gfortran| grep gfortran| grep ii
dpkg -l libblas3| grep libblas3| grep ii
dpkg -l libopenblas-dev| grep libopenblas-dev| grep ii
(7)赋给HwHiAiUser用户sudo权限
缺省制卡时,200DK的用户HwHiAiUser是没有sudo权限的,这可能是华为出于安全考虑。
但是这样子对于张小白而言,太不方便了。
所以张小白打算给它sudo权限。具体操作如下:
切换到root用户
su -
(Mind@123)
编辑 /etc下的s-u-d-o-e-r-s文件:
确实有可能提升了风险,但是方便在此时对张小白而言更重要一些。
(8)源码编译安装OpenSSL 1.1.1q
下载openssl源码:
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz --no-check-certificate
tar -xzvf openssl-1.1.1q.tar.gz 解压:
cd openssl-1.1.1q
./config
注:如config时报以下错误:
您可以执行apt-get install perl再重新config
make
sudo make install
(9)安装OpenCV
sudo apt-get install libopencv-dev
执行以下命令:
。。。
4、安装Python 3.9.7,安装部分pip依赖
(1)源码安装Python3.9.7
查看了Python的版本,专家建议使用Python3.9.7:
浏览器下载 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
将下面这段代码放入 HwHiAiUser的 ~/.bashrc和 root的 ~/.bashrc
umask 0022
#用于设置python3.9.7库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.9.7/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/python3.9.7/bin:$PATH
并且source ~/.bashrc使其生效:
检查python3和 pip3的版本:
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 -
cd /usr/bin
ln -s /usr/local/python3.9.7/bin/python3.9 python
exit
python -V
(2)安装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
如果安装过程中出现以下提示:
可按提示将 PATH=$PATH:/home/HwHiAiUser/.local/bin 加入~/.bashrc
并source ~/.bashrc使其生效:
5、安装CANN Toolkit 5.1.RC2
(1)安装版本说明
为了配套MindStudio 5.0.RC2运行,张小白仔细查看了版本要求:MindStudio 5.0.RC2需要CANN商业版 5.1.RC2
而张小白想下载CANN 商业版5.1.RC2:
却发现华为官网报权限不足:
虽然张小白也注册过了产品,但是确实不给下商业版:
于是张小白就此提了一个问题:https://bbs.huaweicloud.com/forum/thread-0212959045344970005-1-1.html
专家回答说:装社区版也是可以的。于是张小白决定此次安装CANN 5.1.RC2社区版。
(2)下载CANN Toolkit 5.1.RC2安装包
在200DK上执行:
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN 5.1.RC2/Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run
(3)安装CANN Toolkit 5.1.RC2
chmod +x *.run
检查:
./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --check
安装:
./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --install --chip=Ascend310-minirc
在~/.bashrc中增加 . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh
并且source ~/.bashrc使其生效:
6、安装MindX SDK 3.0.RC2
(1)下载MindX SDK 3.0.RC2 aarch64版
打开 https://www.hiascend.com/zh/software/mindx-sdk/mxVision/community
对于200DK而言,需要安装mindx sdk的arm版本:
(2)安装MindX SDK 3.0.RC2 aarch64版
安装的方法也很简单:
chmod +x *.run
./Ascend-mindxsdk-mxvision_3.0.RC2_linux-aarch64.run --install
同样的,修改.bashrc文件,增加 . /home/HwHiAiUser/mxVision/set_env.sh
并且source ~/.bashrc使其生效:
7、安装MindStudio 5.0.RC2 for windows
(1)下载MindStudio 5.0.RC2 for windows
打开 https://www.hiascend.com/software/mindstudio
点击立即下载:
选择 zip绿色版吧!
耐心等待下载完毕:
下载完毕,解压到L盘:
这个zip文件没有自带目录,如不带目录解压,会全部解压到根目录去。
赶紧建一个MindStudio5.0的目录,将文件都挪进去吧!
(2)运行MindStudio 5.0.RC2 for windows
双击打开 bin目录下的MindStudio.bat文件:
点击OK
会打开MindStudio的窗口,另外会有一个cmd窗口打印日志。
8、准备MMNet项目工程文件,并使用MindStudio Windows版进行相关配置
(1)准备MMNet项目文件
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
sudo apt-get install git
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
将应用案例中的图片另存到 L:\mindxsdk-referenceapps\contrib\MMNET 目录下:
好像又有点问题。这个图片依然是png格式。
使用画图打开后另存为jpg格式,放到这个目录下:
(2)CANN配置
使用MindStudio打开 L:\mindxsdk-referenceapps\contrib\MMNET 工程。
点击Trust
系统会提示CANN没有安装。
点击OK,出以下窗口:
点击Change:
在弹出的Remote CANN Setting窗口中,点击右边的 +
进行ssh的设置:
点击Test Connection:
点击OK。
已成功连接。
点击OK
选择remote CANN location:
选择 /home/HwHiAiUser/Ascend/ascend-toolkit/5.1.RC2
点击OK
点击Finish。
系统会跟后端对接:
耐心等待对接结束:
系统识别出CANN是5.1.RC2版本:
点击OK。
点击Ascend-CANN Manager
(3)将MMNet工程转换为MindX SDK工程
点击Ascend->Convert to Ascend Project
选择 Ascend MindX SDK App,点击OK。
(4)配置MindX 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继续。
(5)配置Python
打开 File->Project Structure
SDKs:
Project:
Modules:
(6)配置Deployment
打开Tools->Deployment->Configuration
Mappings:
9、使用MindStudio Windows版运行调试,跑通MMNet
(1)运行配置
由于这是个Python工程,无需编译配置,直接进行运行配置:
点击Run-》Edit Run Configuration
将Executable改为 L:\mindxsdk-referenceapps\contrib\MMNET\main.py
(2)运行调试
Run:
出错了!
查看下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
终于执行完毕了!
(3)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的结果图写入的。
变量之间的关系张小白也大致标出了。大概就是这样的流向~~
至此,张小白就把从零开始搭建能在200DK上运行的MMNet环境讲清楚了。如果小伙伴们有问题,可以随时向张小白提问。谢谢~~
(全文完,谢谢阅读)
- 点赞
- 收藏
- 关注作者
评论(0)