本文主要是介绍mace编译小结(linux),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
mace官网:https://mace.readthedocs.io/en/latest/
mace官方github:https://github.com/XiaoMi/mace
1、环境创建
conda create -n mace python=2 && source activate mace
2、编译mace library
0)环境配置
pip install jinja2==2.10
安装bazel
下载:https://github.com/bazelbuild/bazel/releases, 0.13.0版本的
chmod +x bazel-0.13.0-installer-linux-x86_64.sh
bash bazel-0.13.0-installer-linux-x86_64.sh --user
1)下载mace
git clone https://github.com/XiaoMi/mace.git
cd mace
2)修改build-standalone-lib.sh
和converter.py
,去掉opencl加速部分
- 打开
tools/build-standalone-lib.sh
文件,注释掉47-59和75-87行,这里只编译arm结构的,然后将所有的opencl=true
改成opencl=false
(也就是先不启用gpu加速) - 打开
converter.py
文件,注释掉181-182行
# if RuntimeType.gpu in runtime_list or RuntimeType.cpu_gpu in runtime_list:
# return True
3)编译mace
bash tools/build-standalone-lib.sh
编译的结果在/builds
里,/lib
和/include
两个新文件夹里面都是所需要的mace文件,/lib
里包括各种平台下的静态库和动态库,例如/armeabi-v7a
,/arm64-v8a
等。
3、环境配置
1)下载sdk
网站:http://tools.android-studio.org/index.php/sdk/
直接在上述网址中下载android-sdk_r24.4.1-linux.tgz,解压到系统里
2)下载jdk
网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
在网址中下载jdk-8u191-linux-x64.tar.gz,解压到系统里
3)下载ndk
网站:https://developer.android.google.cn/ndk/downloads/older_releases#ndk-12b-downloads
在网址中下载android-ndk-r16b-linux-x86_64.zip,解压到系统(版本大于r12即可)
4)环境变量设置
在.bashrc
里面添加:
export ANDROID_NDK_VERSION=r16b
export ANDROID_NDK=ndk/android-ndk-r16b
export ANDROID_NDK_HOME=${ANDROID_NDK}
export PATH="ndk/android-ndk-r16b:$PATH"
export JAVA_HOME=~/software/jdk1.8.0_191
export JRE_HOME=~/software/jdk1.8.0_191/jre
export CLASSPATH=".:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH"
export PATH="$JAVA_HOME/bin:$JRE_HOME/bin:$PATH"
export ANDROID_HOME=~/software/sdk/android-sdk-linux
执行
source ~/.bashrc
更新环境变量。
4、生成.apk
1)环境配置
cd mace/mace/examples/android/
pip install pyyaml
pip install enum34
pip install six
pip install numpy
pip install tensorflow==1.6.0
2)gradle版本修改
gradle/wrapper/gradle-wrapper.properties
里的
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
改成
distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
否则报错:
Error occurred while communicating with CMake server.
或者
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
3)build.gradle
修改
将mace/mace/examples/android/build.gradle里的第10行:
classpath 'com.android.tools.build:gradle:3.0.1'
改成
classpath 'com.android.tools.build:gradle:3.1.1'
否则报错:
Error:Failed to notify project evaluation listener.
或者
Error:(28, 0) Could not find method implementation() for arguments [directory 'libs'] on
object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
4)生成.apk
./build.sh dynamic
这里的dynamic指的是选择converter模型时调用动态的mace库,而不是生成mobilenet的.so文件,只能生成.a。.apk
文件在/mace/mace/examples/android/app/build/outputs/apk/app
文件夹下,新版本的mace里有debug和release版本:app-app-debug.apk
和app-app-release.apk
。然后直接把.apk
文件通过数据线传到android手机上,安装就可以使用了。/mace/builds/
文件夹下也会生成一个新的文件夹/mobilenet
,这是调用converter.py
将mobilenet.yml
转换成mace格式的结果,里面包含/include
文件夹和/model
文件夹(含有.a文件)。
4、编译mobilenet-v2
1)下载mace models
git clone https://github.com/XiaoMi/mace-models.git
2)修改.yml
文件(可做可不做,可以为了保护模型不被盗用,通过转化静态库时将模型转化为C++代码)
修改mace_test/mace-models/mobilenet-v2/
路径下的mobilenet-v2.yml
和mobilenet-v2-host.yml
,将两个文件里面的
model_graph_format: file
model_data_format: file
都改成
model_graph_format: code
model_data_format: code
3)模型转换
python tools/converter.py convert --config=mace-models/mobilenet-v2/mobilenet-v2.yml
mace/builds/
文件夹下会生成/mobilenet-v2
文件夹,里面包含对mobilenet-v2的模型转换结果。
5、其他错误
①
TypeError: __init__() got an unexpected keyword argument 'serialized_options'
或者
no module named markupsafe
solution: 修改环境变量并且执行完source .bashrc后,重新打开终端
②
com.android.builder.testing.api.DeviceException: No connected devices!
solution:不用管了,.apk
已经生成,报错是adb找不到设备的问题
③
CMake was unable to find a build program corresponding to \"Ninja\"
solution:
conda install ninja
这篇关于mace编译小结(linux)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!