mace
作者:十岁的小男孩
QQ:929994365
心之安处即是吾乡。
本文主要的方向是终端移植。其主要又分两个小方向,理论和实践,即模型优化和模型移植。下文为前期写的,较为潦草,现在基本框架思路已经搭起来了,现在没有时间,后期会更新完善。
-----------------------------------------------------------------------------后期更新-------------------------------------------------------------------------------------------
本文对MACE当前的学习做一个总结,重心放在数据流的逻辑过程。首先通过对模型移植针对的问题解答为什么我们需要学习mace,和我们在学习mace过程中遇到的最主要的矛盾,以及我们如何解决这些矛盾。对mace的学习主要分两个重点:
一、模型优化
模型优化是模型移植的重心,最主要矛盾在于资源和性能的平衡,有限的资源情况下使得性能最大化。现在的模型都在电脑端进行训练,资源充足性能较好,但是在终端资源较少运算速率较低的前提下性能不能损失太多,这需要平衡。这个矛盾两种解决方法:
第一种:模型放在服务端,通过在终端获取数据和展示数据,模型放在服务端进行运算,这样得到的性能较好,但是需要网络传输,浪费时间。
第二种:将模型直接在终端运行,终端资源cpu/gpu,gpu运算较快,但是电脑端的模型如何在终端使用而且能够使用gpu加速计算?答案是小米mace,TensorFlow Lite,百度的paddle-mobile,还有腾讯的ncnn。由于mace能够采用gpu加速计算和社区活跃度较高,所以本文主要学习mace,其他的框架了解不深。
模型压缩优化这是重心中的重心,要掌握更多的机器学习深度学习的概念知识,以下链接是我当前掌握压缩优化的一些信息,这在后期重点学习。
二、模型工程化
模型工程的重心在于掌握工程开发经验,熟练应用Java,Android和c++语言涉及NDK编译。以下三个链接是mace学习过程的分步总结,针对mace官方提供的mobilnet v2例子进行学习。
以下的内容根据我的理解从数据流的角度串下整个过程。首先我们采用python语言构建模型model.pb,进行模型的压缩和优化后,将model.pb打包在yaml文件中配置,这一步是上面链接的第二步,主要讲解了如何撰写yaml文件。之后在mace环境下进行编译生成静态库和头文件库,其实是转换成了c++文件了,这步完成后就和mace没有什么关系了,接下来的难题是这些生成的库如何在工程中使用,这个工作是上面链接的第三步,重点是NDK编译,在c++端实现在java声明的native方法。
文中介绍有可能局限个人的实践以及理解水平,存在不正确或不合理的地方,欢迎讨论。
mace的更多相关文章
- Completely change MACE timestamps?
Hi, One of my friends Sandy asked me about the possibility of completely change MACE timestamps. As ...
- MACE环境搭建
主要参考https://blog.csdn.net/u012505617/article/details/85763065 1.安装docker 2.安装NDK https://www.linuxid ...
- MACE移植要求
MACE支持Tensorflow的depth_to_space和space_to_depth,以及strided_slice算子. 其中depth_to_space可以用来无平滑地进行上采样. spa ...
- MACE(3)-----工程化
作者:十岁的小男孩 QQ:929994365 能下者,上. 前言 本文是MACE的第三步即MACE环境编译出来的库在Android工程中的使用.在第一篇博文中通过mace官方提供的安卓工程进行调试,本 ...
- MACE(2)-----模型编译
作者:十岁的小男孩 QQ:929994365 无用 本文仅用于学习研究,非商业用途,欢迎大家指出错误一起学习,文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. ...
- MACE(1)-----环境搭建
作者:十岁的小男孩 QQ:929994365 无为 本文仅用于学习研究,非商业用途,欢迎大家指出错误一起学习,文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. ...
- msf客户端渗透(六):抓包、搜索文件、破解弱口令、修改MACE时间
嗅探抓包 查看网卡 指定网卡,因为资源有限,默认抓满50000个包如果不dump下来,就会自动销毁掉,从0开始抓. dump嗅探到的文件到本机,传递到本机的过程是结果ssl加密的 dump了两个文件 ...
- ASP.NET Core 中文文档 第三章 原理(10)依赖注入
原文:Dependency Injection 作者:Steve Smith 翻译:刘浩杨 校对:许登洋(Seay).高嵩 ASP.NET Core 的底层设计支持和使用依赖注入.ASP.NET Co ...
- vtkPlane和vtkPlaneSource
1.vtkPlane vtkPlane provides methods for various plane computations. These include projecting points ...
随机推荐
- the difference __str__ and __repr__
First, let me reiterate the main points in Alex’s post: The default implementation is useless (it’s ...
- Java_myBatis_XML代理_动态SQL
主要是设计到映射文件的编写: SELECT: <sql id="query_user_where"> <!-- test里面可以编写OGNL表达式 --> ...
- 即将上线的Spark服务器面临的一系列填坑笔记
即将上线的Spark服务器面临的一系列填坑笔记 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 把kafka和flume倒腾玩了,以为可以轻松一段时间了,没想到使用CDH部署的spa ...
- nginx 301 302跳转配置总结
首先看简单的代码示例,关于nginx 301 302跳转的. 301跳转设置: server { listen 80; server_name 123.com; rewrite ^/(.*) http ...
- 面向对象【day07】:类的属性(五)
本节内容 概述 公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是 ...
- 启动eclipse弹出提示Version 1.7.0_79 of the JVM is not suitable for this product. Version: 1.8 or greater is required怎样解决
启动eclipse时弹出如下弹出框: 解决办法: 在eclipse安装目录下找到eclipse.ini文件,并在 -vmargs-Dosgi.requiredJavaVersion=1.8 前面加上 ...
- Swift学习笔记9--错误控制
1.Swift 中有4种处理错误的方式.你可以把函数抛出的错误传递给调用此函数的代码.用do-catch语句处理错误.将错误作为可选类型处理.或者断言此错误根本不会发生. 2.wift 中的错误处理并 ...
- 在 .NET Framework 4.0 的程序中使用 .NET Framework 2.0 的程序集
场景 在 目标框架 为 .NET Framework 4 的程序中,引用 目标框架 为 .NET Framework 2.0 的程序集,并使用 .NET Framework 2.0 程序集中的类型或者 ...
- H5利用canvas实现海报功能
最近接到一个需求,微信中用户上传图片生成海报.这个需求比较常规,实现思路也比较简单,通过利用用户的input输入,对所上传的图片进行处理,最后通过第三方库html2canvas合成对应的图片即可.思路 ...
- Neural Networks and Deep Learning(week3)Planar data classification with one hidden layer(基于单隐藏层神经网络的平面数据分类)
Planar data classification with one hidden layer 你会学习到如何: 用单隐层实现一个二分类神经网络 使用一个非线性激励函数,如 tanh 计算交叉熵的损 ...