小米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 ...
最新文章
- 谷歌浏览器扩展开发笔记
- 极简易版专家聊天程序--JAVA练手
- java获取数组穷举_请教一下两个数组各取一个元素生成新的数组的穷举算法设计?...
- pythonpil模块安装_centos 安装python PIL模块
- 7安装sql cent os server_CentOS7 安装并使用SQL Server
- 使用struts2中默认的拦截器以及自定义拦截器
- mysql primary重复_mysql:键'PRIMARY'和奇怪的ID行为重复条目'0'
- 计算机软件绘制思维导图步奏,常见的思维导图有哪几种画法
- 处于停机等非正常状态_汽轮机运行最重要的启动与停机阶段,你得了解这些实际经验...
- xp系统怎样安装传真服务器,Windows XP系统怎样配置传真机
- 解决小程序图片上传问题
- 一条对“失控的腾讯帝国:企鹅无法把控手机市场”的评论
- PropertyBeanUtils.copyProperties(dest, orig)
- 计算机键盘能直接接手机吗,电脑键盘怎么连接手机
- 前端开发app程序 用什么模拟器测试安卓_【移动端测试】安卓模拟器简介和adb使用...
- Visual Studio Code 代码显示空格等空白符的方法
- 第五十七篇 Django-CRM系统-1登录,注册,修改密码
- java 四舍六入五成双_EXCEL实现四舍六入五成双修约规则的方法
- 肾炎患者识别matlab,肾炎诊断 模型.doc
- 苹果cms后台路径怎么修改
热门文章
- 惊!亚马逊封号潮提前结束;50%海外电商零售市场属于独立站;TikTok重返印度…|洞悉跨境
- 百度百科计算机科学与技术,计算机科学与技术学科联考计算机学科专业基
- 《Unity 射线检测》球形方向投射
- Mac——技巧:如何在iPhone 上获取 iOS 15 的实时文本功能
- 使用Calendar获取当月最后一天
- centos系统中ping时出现Destination Host Prohibited
- 寂寞红尘里,你在等待谁的安慰
- python混淆_python实现混淆矩阵
- WebSocket Stomp 通讯
- 最大似然估计(极大似然估计)