小米AI平台MACE的构建和部署

article/2025/9/15 16:41:09

1.准备部署文件

需要准备的部署文件包括头文件(.h), mace库文件(.),转化后的模型(.a),这里以resnet18v1-opt.onnx模型为例

1.1. 优化onnx模型

# Optimize your model
$python MACE_ROOT/tools/onnx_optimizer.py resnet18v1.onnx resnet18v1-opt.onnx

1.2. 准备部署文件(.yml)

可以参考官方的例子:https://mace.readthedocs.io/en/latest/user_guide/basic_usage.html
TensorFlow,Caffe,ONNX这三个模型的部署文件有点差别,根据自己的平台修改。下面是我的文件内容

library_name: resnet18v1                                                        
  target_abis: [arm64-v8a]                                                        
  model_graph_format: code                                                        
  model_data_format: code                                                         
  models:                                                                         
    resnet18v1:                                                                   
      platform: onnx                                                              
      model_file_path: /MACE/mace-models/onnx-models/resnet18v1-opt.onnx          
      model_sha256_checksum: 96e3b832f63db6a9647b63c9a6f7561a75a74463b15e13a3e2a7d48b774242ef
      subgraphs:                                                                  
        - input_tensors: data                                                     
          output_tensors: resnetv15_dense0_fwd                                    
          input_shapes: 1,224,224,3                                               
          output_shapes: 1,1,1,1000                                               
          backend: pytorch                                                        
      runtime: cpu+gpu                                                            
      limit_opencl_kernel_time: 0                                                 
      nnlib_graph_mode: 0                                                         
      obfuscate: 1

注意这几个参数:

model_graph_format
model_data_format
input_tensors 
output_tensors 
input_shapes 
output_shapes

这几个参数可以使用Netron可视化工具读出 

 

1.3. 使用MACE转换工具来转换模型

$python tools/converter.py convert --config=/MACE/mace-models/onnx-models/onnx-resnet18v1.yml

生成的文件结构如下所示:

builds
  ├── include
  │   └── mace
  │       └── public
  │           ├── mace_engine_factory.h
  │           └── resnet18v1.h
  └── model
      └── arm64-v8a
            └── resnet18v1.a

 1.4. 拷贝转换后的文件到Android工项目

  • 在examples下的android模板工程中的macelibrary/src/main/cpp 文件夹下

-- 新建include/mace/public 文件夹     
-- 新建lib 文件夹     
-- 新建model 文件夹

  • 复制mace.h和刚才生成的 mace_engine_factory.hresnet18v1.h 三个文件 

builds/include/mace/public/mace.h                                              拷贝到 macelibrary/src/main/cpp/include/mace/public builds/resnet18v1/include/mace/public/mace_engine_factory.h  拷贝到 macelibrary/src/main/cpp/include/mace/public builds/resnet18v1/include/mace/public/resnet18v1.h                  拷贝到 macelibrary/src/main/cpp/include/mace/public

  • 复制模型文件

builds/resnet18v1/model/arm64-v8a/resnet18v1.a                     拷贝到 macelibrary/src/main/cpp/model/arm64-v8a

  • 复制mace库文件

builds/lib/arm64-v8a/ 下所有文件夹 拷贝到 macelibrary/src/main/cpp/lib/arm64-v8a/ 目录下

 

2.导入Android项目

打开AndroidStudio导入项目

2.1. 修改 CMakeLists.txt 文件

macelibrary/CMakeLists.txt 文件中找到

set(mobilenet_lib ${CMAKE_SOURCE_DIR}/src/main/cpp/model/arm64-v8a/mobilenet.a)
改为:
set(mobilenet_lib ${CMAKE_SOURCE_DIR}/src/main/cpp/model/arm64-v8a/resnet18v1.a)

2.2. 修改 .cc 文件

macelibrary/src/main/cpp/image_classify.cc 文件找到代码

struct MaceContext {std::shared_ptr<mace::GPUContext> gpu_context;std::shared_ptr<mace::MaceEngine> engine;std::string model_name;mace::DeviceType device_type = mace::DeviceType::CPU;std::map<std::string, ModelInfo> model_infos = {{"mobilenet_v1", {"input", "MobilenetV1/Predictions/Reshape_1",{1, 224, 224, 3}, {1, 1001}}},{"mobilenet_v2", {"input", "MobilenetV2/Predictions/Reshape_1",{1, 224, 224, 3}, {1, 1001}}},{"mobilenet_v1_quant", {"input", "MobilenetV1/Predictions/Softmax:0",{1, 224, 224, 3}, {1, 1001}}},{"mobilenet_v2_quant", {"input", "output",{1, 224, 224, 3}, {1, 1001}}}};
}

并添加代码:

{"resnet18v1", {"data", "resnetv15_dense0_fwd", {1, 224, 224, 3}, {1, 1001}}} 

这个文件要和自己的部署文件对得上

2.3. 修改初始文件

  • 在com.xiaomi.mace.demo.result下的InitData.java文件,添加自己的模型名称
public static final String[] MODELS = new String[]{"onnx_mobilenet-v2_1_0", "mobilenet_v2", "mobilenet_v1_quant", "mobilenet_v2_quant"};

修改

public InitData() { model = MODELS[0];
}

里面的model = MODELS[0]; 这个对应(a)中的索引顺序,并将其作为默认模型

 

3. 编译Android项目

以上修改完成,直接编译android项目就可以生成 .apk文件。 


http://chatgpt.dhexx.cn/article/IkoFVZSF.shtml

相关文章

小米开源框架MACE - 源码阅读笔记一

首先先一目了然看一下其目录结构&#xff08;这些个源码可以在github上下载到&#xff0c;只要在GitHub搜索mace即可&#xff09;&#xff1a; 介绍 MACE&#xff08;Mobile AI Compute Engine&#xff09;是一个针对移动异构计算平台优化的深度学习推理框架。MACE提供工具和文…

MACE的环境搭建和工程构建

1. MACE 主页 MACE 的github地址&#xff1a;https://github.com/XiaoMi/mace 小米官方的相关文档&#xff1a;https://mace.readthedocs.io/en/latest/ 对开发环境的要求&#xff0c;可以按照以下指令安装相关的包&#xff1a; 2. 安装docker 参照教程&#xff1a;https:/…

meterpreter之timestomp命令修改文件MACE时间

文章目录 前言一、timestomp的使用前提二、MACE时间1、文件系统简述2、linux操作系统3、windows操作系统 三、timestomp使用详解1.查看帮助文档2.使用-v选项查看文件信息3.使用-f选项拷贝文件MACE时间4.使用-m/-a/-c/-e修改文件MACE时间5.使用-b/-r使MACE时间显示清空 总结 前言…

小米开源AI框架mace编译构建

目录 简介 环境要求 1 安装 Bazel 2 安装Android NDK 3 在Ubuntu16.04下安装Docker&#xff08;17.09&#xff09; 构建并运行示例模型 1 拉取MACE项目 2 拉取MACE Model Zoo项目 3 构建通用MACE库 4 将预先训练的mobilenet-v2模型转换为MACE格式模型 编译运行DEMO…

使用MACE加速---使用篇

最近开始研究如何对手机应用中的识别算法进行加速&#xff0c;搜索后发现了小米的MACE。 Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算设备优化的深度学习前向预测框架。 覆盖了常见的移动端计算设备&#xff08;CPU&#xff0c;GPU和DSP&#xff09;。支持的硬…

小米AI推理框架MACE介绍

MACE 是小米公司自研的移动端深度学习框架 Mobile AI Compute Engine&#xff0c;2017年12月15日于公司内部正式发布。2018年6月28日&#xff0c;在“2018&#xff08;第十三届&#xff09;开源中国开源世界高峰论坛”上&#xff0c;小米公司人工智能与云平台副总裁崔宝秋博士宣…

MACE 使用笔记

环境安装 tensorflow 安装&#xff0c;一直不太想用mace的部分原因是不支持tensorflow2.模型&#xff0c; 但为了GPU(OpenCL)还是要用啊。 Shell set -e 学习笔记&#xff1a; shell 中的 set -e &#xff0c; set e 用法_滴水成川-CSDN博客_linux set-eset -eset命令的-e参…

小米开源框架MACE 简介

转载自 https://www.jianshu.com/p/2ab68779d05b 前言 MACE 是小米公司自研的移动端深度学习框架 Mobile AI Compute Engine&#xff0c;2017年12月15日于公司内部正式发布。2018年6月28日&#xff0c;在“2018&#xff08;第十三届&#xff09;开源中国开源世界高峰论坛”上…

MACE(1)-----环境搭建

学习MACE也有一个月了&#xff0c;将其划分三步来学习。本文是MACE学习的第一步即MACE环境的搭建。之后还有两步mace的编译和mace工程化。 MACE(2)-----模型编译&#xff1a;https://www.cnblogs.com/missidiot/p/9509831.html MACE(3)-----工程化&#xff1a;https://www.cnbl…

JDK , Tomcat , Eclipse 版本对应关系

1. JDK , Tomcat 版本对应关系 参考网址 : https://tomcat.apache.org/whichversion.html 2. JDK , Eclipse 版本对应关系 参考网址 : https://wiki.eclipse.org/Eclipse/Installation 作者 Github : tojohnonly , 博客 : EnskDeCode

如何查看eclipse的版本

阅读数&#xff1a;20254 转载文章&#xff0c;原文地址&#xff1a;https://blog.csdn.net/duqian94/article/details/52386076 由于作者已经写的很清楚了&#xff0c;就没有做修改直接转载过来了。 本篇文章主要讲解的是三种查看eclipse版本的方法&#xff08;超详细&#xf…

Eclipse各版本有什么区别?

一直以来对eclipse这个IDE的各发行版本都弄不清楚&#xff0c;今天做一个梳理和记录。 Eclipse基本内核包括&#xff1a;图形API&#xff08;SWT/Jface&#xff09;&#xff0c;Java开发环境插件&#xff08;JDT&#xff09;&#xff0c;插件开发环境&#xff08;PDE&#xff0…

超方便插件lombok的使用(eclipse版本)

1 准备 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Qoy2VRoERqZcgsOVYl3mZQ 提取码&#xff1a;2chx 2.安装 点击 或者找到对应的lombok文件所在目录执行java -jar lombok(1).jar 会自动扫描eclipse所以目录&#xff0c;也可以自己选择点击"S…

查看Eclipse版本号及各个版本区别

1. 找到eclipse安装目录 2. 进入readme文件夹&#xff0c;打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字版本号&#xff0c;如&#xff1a; Eclipse Project Release Notes Release 4.2.0 Last revised June 8th, 2012 附&#xff1a;Eclipse各个版本简介…

安装两个Eclipse 版本不一致,高版本无法打开

Could not create the Java Virtual Machine&#xff0c;A fatal exception has occurred。 首先删除了 工作空间的配置 然后删除掉C:\Windows\System32 里面的三个java文件 java.exe javas.exe javaw.exe 配置好环境变量就好了

eclipse选择java版本_使用 Eclipse 开发版本选择和下载说明

现在越来越多的人开发使用 IDEA,使用 Eclipse 开发的已经渐渐变少了,这篇就简单介绍下 Eclipse 的版本选择和下载,供目前还在坚守使用 Eclipse 开发的同胞们~ Eclipse 简介 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,…

解决pydev与eclipse版本问题

eclipsepydevanaconda版本问题方法&#xff1a; 在eclipse安装pydev插件时&#xff0c;会遇见安装后在“Preference”不显示“pydev”现象&#xff0c;原因&#xff1a;下载的pydev版本与eclipse版本不匹配&#xff0c;导致无法使用&#xff0c;经过反复调试&#xff0c;发现官…

Eclipse版本升级(2020-12)

文章目录 Eclipse版本升级&#xff08;2020-12&#xff09;内置工具栏安装本地安装包安装 Eclipse版本升级&#xff08;2020-12&#xff09; Eclipse内安装软件通常会通过内置软件安装方式或者是自己下载安装包方式安装。同样&#xff0c;Eclipse版本升级也可以用这两种方式。…

Eclipse版本对应的jdk需求及查看eclipse的java版本怎么看Eclipse需要安装哪个版本jdk

1)找到eclipse安装目录。 2)进入readme文件夹&#xff0c;打开readme_eclipse.html。 Eclipse软件 jdk及种操作方法 自行百度网盘提取 链接&#xff1a;https://pan.baidu.com/s/1JEYq4Lo8aEms7ClPIchLsA?pwddt4z 提取码&#xff1a;dt4z 我先给一个我翻译过的图&#x…

Eclipse版本号及各个版本区别

附&#xff1a;Eclipse各个版本简介&#xff08;http://zh.wikipedia.org/wiki/Eclipse&#xff09; 从2006年起&#xff0c;Eclipse基金会每年都会安排同步发布&#xff08;simultaneous release&#xff09;。同步发布主要在6月进行&#xff0c;并且会在接下来的9月及2月释放…