/Xiaomi-MACE-Notes

Primary LanguageC++Apache License 2.0Apache-2.0

MACE 环境配置及DEMO运行

MACE 是小米开发的移动端深度学习平台,其官方文档提供了安装和开发的步骤.笔者的配置流程如下:

Part I: Docker 使用

推荐使用Docker配置MACE开发环境.有关于Docker的基础知识可以参考如下教程:

  1. Docker入门教程
  2. 深入Docker:容器和镜像

笔者电脑是Ubuntu 16.04系统,安装Docker指令为:

sudo apt install docker.io

因为Docker需要的空间比较大(完整的环境大约有5G),如果根目录没有足够的空间,可以外接移动硬盘,并使用软链接与根目录Docker路径相连.

以下步骤为挂载硬盘及软链接操作步骤,非MACE安装必须.

/var/lib/docker是原地址(默认Docker镜像存放地址),/media/hu/hu-disk/docker是移动硬盘的新地址.

操作方法:

关闭Docker服务:

service docker stop

将默认的Dokcer目录移动到移动硬盘中:

sudo mv /var/lib/docker /media/hu/hu-disk/docker

设置软链接:

sudo ln -s /media/hu/hu-disk/docker /var/lib/docker

重启Docker服务:

service docker start

Part II: MACE 安装

参照官网教程,完整镜像大概有5G,根据网速自行选择镜像制作方法:

方法一:直接下载docker镜像:

sudo docker pull registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite

方法二:下载MACE源码,手动制作镜像:

sudo docker build -t registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite ./docker/mace-dev-lite

运行Docker(记住加sudo 权限):

sudo docker run -it --privileged -v /dev/bus/usb:/dev/bus/usb --net=host \
           -v /local/path:/container/path \
           registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite \
           /bin/bash

获取MACE源码:

git clone https://github.com/XiaoMi/mace.git
cd mace
git fetch --all --tags --prune
tag_name=`git describe --abbrev=0 --tags`
git checkout tags/${tag_name}

Part III: MACE Demo运行

进入demo所在文件夹:

cd mace/examples/android

查看build.sh脚本:

#!/usr/bin/env bash

set -e -u -o pipefail

pushd ../../../
python tools/converter.py build --config=docs/getting_started/models/demo_app_models.yaml

cp -r builds/mobilenet/include/ mace/examples/android/macelibrary/src/main/cpp/
cp -r builds/mobilenet/lib/ mace/examples/android/macelibrary/src/main/cpp/

popd

./gradlew installAppRelease

因为原始Docker镜像没有配置SDK开发环境,直接运行脚本会报SDK路径错误,因此首先单步执行指令,然后在自己的主机上进行最后的app编译.

set -e -u -o pipefail
pushd ../../../
python tools/converter.py build --config=docs/getting_started/models/demo_app_models.yaml

先下载MobileNet_v1模型:

然后下载MobileNet_v2模型:

构建库:

cp -r builds/mobilenet/include/ mace/examples/android/macelibrary/src/main/cpp/
cp -r builds/mobilenet/lib/ mace/examples/android/macelibrary/src/main/cpp/

安装tree命令,以树形结构打印mace/builds/mobilenet文件目录作为验证:

apt-get install tree

从Docker下载mace文件夹到主机的Ubuntu 16.04系统下,利用主机的SDK环境完成最后的app生成.

首先在主机中打开新终端查看Docker镜像的ID:

sudo docker cp f617db573cd4:/mace /media/hu/hu-disk

其中,f617db573cd4是ID,/mace是镜像中待复制的目录,/media/hu/hu-disk是主机目录.

因为复制操作是在sudo权限下进行的,所以在主机目录下修改文件夹权限:

sudo chmod -R 777 mace

进入android项目的目录,新建local.properties文件,填写主机SDK和NDK路径信息:

## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Sat Jul 07 19:31:12 HKT 2018
ndk.dir=/media/hu/hu-disk/package/android/ndk/android-ndk-r15c
sdk.dir=/media/hu/hu-disk/package/android/Sdk

然后打开终端,执行:

./gradlew installAppRelease

此时,USB口连接的是小米8,通过ADB可以识别设备并将编译后的APP传入手机中(手机需要提前解开BL锁,刷成开发版本以获得root权限,电脑需要安装ADB工具并可以通过USB接口调试手机).

最终得到的demo是名为识物的app,可以选择MobileNet_v1, MobileNet_V2两种网络和CPU,GPU两种原件进行物体识别计算.

MobileNet_v1+CPU MobileNet_v1+GPU MobileNet_v2+CPU MobileNet_v2+GPU

可以看到两种网络利用Mobile GPU的物体识别速度均快于Mobile CPU.