资源 | 小米开源移动端深度学习框架MACE:可转换TensorFlow模型

2018 年 6 月 29 日 机器之心

选自GitHub

机器之心编译

参与:思源、李亚洲

6 月 28 日,小米首席架构师,人工智能与云平台副总裁崔宝秋在 2018(第十三届)开源中国开源世界高峰论坛上宣布,正式开源小米移动端深度学习框架 MACE。该框架采用与 Caffe2 类似的描述文件定义模型,因此它能非常便捷地部署移动端应用。



项目地址:https://github.com/XiaoMi/mace

文档地址:https://mace.readthedocs.io/en/latest/


Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台优化的神经网络计算框架。目前该框架为 TensorFlow 和 Caffe 模型提供转换工具,并且其它框架定义的模型很快也能得到支持。下图展示了该计算框架的整体结构:



据 Github 项目介绍,小米的 MACE 主要从以下的角度做了专门的优化:


  • 性能:代码经过 NEON 指令,OpenCL 以及 Hexagon HVX 专门优化,并且采用 Winograd 算法来进行卷积操作的加速。此外,还对启动速度进行了专门的优化。

  • 功耗:支持芯片的功耗管理,例如 ARM 的 big.LITTLE 调度,以及高通 Adreno GPU 功耗选项。

  • 系统响应:支持自动拆解长时间的 OpenCL 计算任务,来保证 UI 渲染任务能够做到较好的抢占调度,从而保证系统 UI 的相应和用户体验。

  • 内存占用:通过运用内存依赖分析技术,以及内存复用,减少内存的占用。另外,保持尽量少的外部 依赖,保证代码尺寸精简。

  • 模型加密与保护:模型保护是重要设计目标之一。支持将模型转换成 C++代码,以及关键常量字符混淆,增加逆向的难度。

  • 硬件支持范围:支持高通,联发科,以及松果等系列芯片的 CPU,GPU 与 DSP(目前仅支持 Hexagon) 计算加速。同时支持在具有 POSIX 接口的系统的 CPU 上运行。



模型格式


MACE 定义的定制化模型格式与 Caffe2 的类似,MACE 模型能由 TensorFlow 和 Caffe 输出的模型转化。YAML 文件详细描述了模型部署细节,后文将展示该文件的示例。


模型加载


MACE 模型格式包含两部分:定义模型的计算图和模型参数张量。计算图部分利用 Protocol Buffers 做序列化,而所有的模型参数张量级联在一起成为一个连续字节数组,我们称这个数组为张量数据。在模型图中,张量数据的偏移(offsets)和长度都会被记录下来。


可用以下三种方式加载模型:


  1. 模型计算图和张量数据都通过外部动态地加载(默认从文件系统加载,但用户可以自由选择它们的实现,例如使用压缩或加密)。这种方式提供最灵活的模型部署方式,但是模型安全也是最低的。

  2. 模型计算图和张量数据都转化为 C++代码,并通过执行经编译的代码而加载。这种方式能提供最强的模型防护和最简单的部署。

  3. 将模型计算图转换为 C++代码,并以第二种方式构建,而张量数据将在外部以第一种方式加载。


部署文件示例


部署模型到移动端的第一步就是创建 YAML 文件,该 YAML 文件描述了模型部署的情况,每一个文件都将生成一个静态库(如果指定了多个 ABIs,那么每个都会有一个静态库)。部署文件可以包含一个或多个模型,例如智能相机应用可能包含人脸识别、目标识别和语音识别模型,它们可以在一个部署文件中定义。


以下展示了用于安卓示例应用的部署文件:


# The name of library
library_name: mobilenet
target_abis: [arm64-v8a]
embed_model_data: 1
# The build mode for model(s).
# 'code' stand for transfer model(s) into cpp code, 'proto' for model(s) in protobuf file(s).
build_type: code
linkshared: 0
# One yaml config file can contain multi models' config message.
models:
  mobilenet_v1: # model tag, which will be used in model loading and must be specific.
    platform: tensorflow
    # support local path, http:// and https://
    model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/mobilenet-v1/mobilenet-v1-1.0.pb
    model_sha256_checksum: 71b10f540ece33c49a7b51f5d4095fc9bd78ce46ebf0300487b2ee23d71294e6
    subgraphs:
      - input_tensors: input
        input_shapes: 1,224,224,3
        output_tensors: MobilenetV1/Predictions/Reshape_1
        output_shapes: 1,1001
    runtime: cpu+gpu
    limit_opencl_kernel_time: 0
    nnlib_graph_mode: 0
    obfuscate: 0
    winograd: 0
  mobilenet_v2:
    platform: tensorflow
    model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/mobilenet-v2/mobilenet-v2-1.0.pb
    model_sha256_checksum: 369f9a5f38f3c15b4311c1c84c032ce868da9f371b5f78c13d3ea3c537389bb4
    subgraphs:
      - input_tensors: input
        input_shapes: 1,224,224,3
        output_tensors: MobilenetV2/Predictions/Reshape_1
        output_shapes: 1,1001
    runtime: cpu+gpu
    limit_opencl_kernel_time: 0
    nnlib_graph_mode: 0
    obfuscate: 0
    winograd: 0
}


模型与性能评测


MACE Model Zoo 包含若干常用模型,不仅包括 MobileNet、SqueezeNet、ResNet-50 和 Inception-v3 等常见的卷积神经网络,同时还有风格迁移等应用。MACE Model Zoo 会对一组手机进行每日构建,最新的性能评测结果可以从项目的持续集成页面获取。


MACE Model Zoo 地址:https://github.com/XiaoMi/mace-models



本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告 & 商务合作:bd@jiqizhixin.com

登录查看更多
3

相关内容

【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
机器学习相关资源(框架、库、软件)大列表
专知会员服务
39+阅读 · 2019年10月9日
社区分享 | Spark 玩转 TensorFlow 2.0
TensorFlow
15+阅读 · 2020年3月18日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
开源神经网络框架Caffe2全介绍
北京思腾合力科技有限公司
3+阅读 · 2017年12月12日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
Doubly Attentive Transformer Machine Translation
Arxiv
4+阅读 · 2018年7月30日
Arxiv
7+阅读 · 2018年6月1日
Arxiv
3+阅读 · 2018年5月28日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
3+阅读 · 2018年4月11日
VIP会员
相关VIP内容
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
机器学习相关资源(框架、库、软件)大列表
专知会员服务
39+阅读 · 2019年10月9日
相关资讯
社区分享 | Spark 玩转 TensorFlow 2.0
TensorFlow
15+阅读 · 2020年3月18日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
开源神经网络框架Caffe2全介绍
北京思腾合力科技有限公司
3+阅读 · 2017年12月12日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
相关论文
Top
微信扫码咨询专知VIP会员