小米AI平台MACE的构建和部署
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.h 和 resnet18v1.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的构建和部署相关推荐
- cloud 部署_使用Google Cloud AI平台开发,训练和部署TensorFlow模型
cloud 部署 实用指南 (A Practical Guide) The TensorFlow ecosystem has become very popular for developing ap ...
- 小米开源框架MACE 如何构建和使用
转载自https://www.jianshu.com/p/3be518027ac2 文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. https://medi ...
- 小米开源AI框架mace编译构建
目录 简介 环境要求 1 安装 Bazel 2 安装Android NDK 3 在Ubuntu16.04下安装Docker(17.09) 构建并运行示例模型 1 拉取MACE项目 2 拉取MACE M ...
- 小米开源框架MACE 源码阅读笔记 1
转载自 https://www.jianshu.com/p/7061fd67d419 前扯 在前不久的某高峰论坛上,小米开源了其移动端的深度学习框架Mobile AI Compute Engine(M ...
- 小米开源框架MACE 源码阅读笔记
转载自 https://www.jianshu.com/p/7061fd67d419 前扯 在前不久的某高峰论坛上,小米开源了其移动端的深度学习框架Mobile AI Compute Engine(M ...
- 小米AI 连接智能生活
近年来,人工智能(AI)技术在多个领域落地并不断取得发展与突破.在互联网的推动下,AI语音助理.智能家居.眼镜相机等产品相继推出,打造了更加便捷的生活体验. 秉承着"技术为本"的理 ...
- 专访小米欧阳辰:深度揭秘小米广告平台的构建、底层模块和坑
专访小米欧阳辰:深度揭秘小米广告平台的构建.底层模块和坑 专访小米架构欧阳辰架构师广告平台数据库 width="22" height="16" src=&quo ...
- 腾讯云AI平台张文杰:构建一站式机器学习服务平台
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...
- dash使用_使用Dash和SHAP构建和部署可解释的AI仪表盘
dash使用 In recent years, we have seen an explosion in the usage of Machine Learning (ML) algorithms f ...
最新文章
- 哆啦a梦简单图画python编程_[python]画哆啦A梦,Python,绘制
- Iaas、Caas、Paas、Faas!选择正确的平台!
- mysql 分页测试,
- 科学计算机eq7,科学计算器HiEdu 580 Scientific Calculator
- 消息中间件--RabbitMQ ---高级特性之消费端ACK与重回队列
- PVS中TFTP的隐藏配置
- php 写博客教程,最近写了一个博客程序: QuickBlog PHP 开源的一文多发系统
- 最棒的SpringCloud微服务后台管理系统
- html英文期刊参考文献,英文参考文献标准格式
- 线性表的链式存储结构(C语言实现)
- srm 592 div 2
- 3dmax和python做3d动画_3D动画和影视建模,用什么软件或者多个什么软件结合做比较好?...
- MATLAB算数运算符(算术乘,点乘,算术左除,算术右除,点左除,点右除,算术乘方,点乘方)
- j2ee上机任务汇总(中)
- DoS的SYN泛洪攻击,原理及解决方案,学到就是赚到!
- 从数学到密码学(十八)
- PhysX物理引擎(编程入门)
- [RK3288][Android6.0] 调试笔记 --- 伪电池驱动添加
- html个人签到送一句话,一句话签到语录
- mysql基本语法DDL语句的总结 (笔记)