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文件。

小米AI平台MACE的构建和部署相关推荐

  1. cloud 部署_使用Google Cloud AI平台开发,训练和部署TensorFlow模型

    cloud 部署 实用指南 (A Practical Guide) The TensorFlow ecosystem has become very popular for developing ap ...

  2. 小米开源框架MACE 如何构建和使用

    转载自https://www.jianshu.com/p/3be518027ac2 文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. https://medi ...

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

    目录 简介 环境要求 1 安装 Bazel 2 安装Android NDK 3 在Ubuntu16.04下安装Docker(17.09) 构建并运行示例模型 1 拉取MACE项目 2 拉取MACE M ...

  4. 小米开源框架MACE 源码阅读笔记 1

    转载自 https://www.jianshu.com/p/7061fd67d419 前扯 在前不久的某高峰论坛上,小米开源了其移动端的深度学习框架Mobile AI Compute Engine(M ...

  5. 小米开源框架MACE 源码阅读笔记

    转载自 https://www.jianshu.com/p/7061fd67d419 前扯 在前不久的某高峰论坛上,小米开源了其移动端的深度学习框架Mobile AI Compute Engine(M ...

  6. 小米AI 连接智能生活

    近年来,人工智能(AI)技术在多个领域落地并不断取得发展与突破.在互联网的推动下,AI语音助理.智能家居.眼镜相机等产品相继推出,打造了更加便捷的生活体验. 秉承着"技术为本"的理 ...

  7. 专访小米欧阳辰:深度揭秘小米广告平台的构建、底层模块和坑

    专访小米欧阳辰:深度揭秘小米广告平台的构建.底层模块和坑 专访小米架构欧阳辰架构师广告平台数据库 width="22" height="16" src=&quo ...

  8. 腾讯云AI平台张文杰:构建一站式机器学习服务平台

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...

  9. dash使用_使用Dash和SHAP构建和部署可解释的AI仪表盘

    dash使用 In recent years, we have seen an explosion in the usage of Machine Learning (ML) algorithms f ...

最新文章

  1. 谷歌浏览器扩展开发笔记
  2. 极简易版专家聊天程序--JAVA练手
  3. java获取数组穷举_请教一下两个数组各取一个元素生成新的数组的穷举算法设计?...
  4. pythonpil模块安装_centos 安装python PIL模块
  5. 7安装sql cent os server_CentOS7 安装并使用SQL Server
  6. 使用struts2中默认的拦截器以及自定义拦截器
  7. mysql primary重复_mysql:键'PRIMARY'和奇怪的ID行为重复条目'0'
  8. 计算机软件绘制思维导图步奏,常见的思维导图有哪几种画法
  9. 处于停机等非正常状态_汽轮机运行最重要的启动与停机阶段,你得了解这些实际经验...
  10. xp系统怎样安装传真服务器,Windows XP系统怎样配置传真机
  11. 解决小程序图片上传问题
  12. 一条对“失控的腾讯帝国:企鹅无法把控手机市场”的评论
  13. PropertyBeanUtils.copyProperties(dest, orig)
  14. 计算机键盘能直接接手机吗,电脑键盘怎么连接手机
  15. 前端开发app程序 用什么模拟器测试安卓_【移动端测试】安卓模拟器简介和adb使用...
  16. Visual Studio Code 代码显示空格等空白符的方法
  17. 第五十七篇 Django-CRM系统-1登录,注册,修改密码
  18. java 四舍六入五成双_EXCEL实现四舍六入五成双修约规则的方法
  19. 肾炎患者识别matlab,肾炎诊断 模型.doc
  20. 苹果cms后台路径怎么修改

热门文章

  1. 惊!亚马逊封号潮提前结束;50%海外电商零售市场属于独立站;TikTok重返印度…|洞悉跨境
  2. 百度百科计算机科学与技术,计算机科学与技术学科联考计算机学科专业基
  3. 《Unity 射线检测》球形方向投射
  4. Mac——技巧:如何在iPhone 上获取 iOS 15 的实时文本功能
  5. 使用Calendar获取当月最后一天
  6. centos系统中ping时出现Destination Host Prohibited
  7. 寂寞红尘里,你在等待谁的安慰
  8. python混淆_python实现混淆矩阵
  9. WebSocket Stomp 通讯
  10. 最大似然估计(极大似然估计)