mace编译小结(linux)

2024-02-16 02:58
文章标签 编译 linux 小结 mace

本文主要是介绍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.shconverter.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.apkapp-app-release.apk。然后直接把.apk文件通过数据线传到android手机上,安装就可以使用了。/mace/builds/文件夹下也会生成一个新的文件夹/mobilenet,这是调用converter.pymobilenet.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.ymlmobilenet-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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713298

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。