作者:十岁的小男孩

QQ:929994365

心之安处即是吾乡。

  本文主要的方向是终端移植。其主要又分两个小方向,理论和实践,即模型优化和模型移植。下文为前期写的,较为潦草,现在基本框架思路已经搭起来了,现在没有时间,后期会更新完善。

-----------------------------------------------------------------------------后期更新-------------------------------------------------------------------------------------------

  本文对MACE当前的学习做一个总结,重心放在数据流的逻辑过程。首先通过对模型移植针对的问题解答为什么我们需要学习mace,和我们在学习mace过程中遇到的最主要的矛盾,以及我们如何解决这些矛盾。对mace的学习主要分两个重点:

一、模型优化

  模型优化是模型移植的重心,最主要矛盾在于资源和性能的平衡,有限的资源情况下使得性能最大化。现在的模型都在电脑端进行训练,资源充足性能较好,但是在终端资源较少运算速率较低的前提下性能不能损失太多,这需要平衡。这个矛盾两种解决方法:

  第一种:模型放在服务端,通过在终端获取数据和展示数据,模型放在服务端进行运算,这样得到的性能较好,但是需要网络传输,浪费时间。

  第二种:将模型直接在终端运行,终端资源cpu/gpu,gpu运算较快,但是电脑端的模型如何在终端使用而且能够使用gpu加速计算?答案是小米mace,TensorFlow Lite,百度的paddle-mobile,还有腾讯的ncnn。由于mace能够采用gpu加速计算和社区活跃度较高,所以本文主要学习mace,其他的框架了解不深。

  模型压缩优化这是重心中的重心,要掌握更多的机器学习深度学习的概念知识,以下链接是我当前掌握压缩优化的一些信息,这在后期重点学习。

  TensorFlow优化工具包,模型压缩75%。

  腾讯框架模型压缩自动化加速50%。

二、模型工程化

  模型工程的重心在于掌握工程开发经验,熟练应用Java,Android和c++语言涉及NDK编译。以下三个链接是mace学习过程的分步总结,针对mace官方提供的mobilnet v2例子进行学习。

  MACE(1)-----环境搭建

  MACE(2)-----模型编译

  MACE(3)-----工程化

  以下的内容根据我的理解从数据流的角度串下整个过程。首先我们采用python语言构建模型model.pb,进行模型的压缩和优化后,将model.pb打包在yaml文件中配置,这一步是上面链接的第二步,主要讲解了如何撰写yaml文件。之后在mace环境下进行编译生成静态库和头文件库,其实是转换成了c++文件了,这步完成后就和mace没有什么关系了,接下来的难题是这些生成的库如何在工程中使用,这个工作是上面链接的第三步,重点是NDK编译,在c++端实现在java声明的native方法。

  文中介绍有可能局限个人的实践以及理解水平,存在不正确或不合理的地方,欢迎讨论。

  

mace的更多相关文章

  1. Completely change MACE timestamps?

    Hi, One of my friends Sandy asked me about the possibility of completely change MACE timestamps. As ...

  2. MACE环境搭建

    主要参考https://blog.csdn.net/u012505617/article/details/85763065 1.安装docker 2.安装NDK https://www.linuxid ...

  3. MACE移植要求

    MACE支持Tensorflow的depth_to_space和space_to_depth,以及strided_slice算子. 其中depth_to_space可以用来无平滑地进行上采样. spa ...

  4. MACE(3)-----工程化

    作者:十岁的小男孩 QQ:929994365 能下者,上. 前言 本文是MACE的第三步即MACE环境编译出来的库在Android工程中的使用.在第一篇博文中通过mace官方提供的安卓工程进行调试,本 ...

  5. MACE(2)-----模型编译

    作者:十岁的小男孩 QQ:929994365 无用 本文仅用于学习研究,非商业用途,欢迎大家指出错误一起学习,文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. ...

  6. MACE(1)-----环境搭建

    作者:十岁的小男孩 QQ:929994365 无为 本文仅用于学习研究,非商业用途,欢迎大家指出错误一起学习,文章内容翻译自 MACE 官方手册,记录本人阅读与开发过程,力求不失原意,但推荐阅读原文. ...

  7. msf客户端渗透(六):抓包、搜索文件、破解弱口令、修改MACE时间

    嗅探抓包 查看网卡 指定网卡,因为资源有限,默认抓满50000个包如果不dump下来,就会自动销毁掉,从0开始抓. dump嗅探到的文件到本机,传递到本机的过程是结果ssl加密的 dump了两个文件 ...

  8. ASP.NET Core 中文文档 第三章 原理(10)依赖注入

    原文:Dependency Injection 作者:Steve Smith 翻译:刘浩杨 校对:许登洋(Seay).高嵩 ASP.NET Core 的底层设计支持和使用依赖注入.ASP.NET Co ...

  9. vtkPlane和vtkPlaneSource

    1.vtkPlane vtkPlane provides methods for various plane computations. These include projecting points ...

随机推荐

  1. SQL Server 2008以上误操作数据库恢复方法——日志尾部备份

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...

  2. pymysql 在数据库中插入空值

    1. 先搞清 ''(空字符串)和 NULL的区别 (1)本质区别: 空字符串是个值 NULL 和Python中的NULL一样,是空值的意思 (2)查询语句的区别: SELECT * FROM test ...

  3. vue切换路由页面内容没有重载

    项目中遇到这样一个问题: 在一个地方填了一个申请的表单,需要在另一个页面的列表上显示出来这条申请的数据,但是由于vue的缓存,在切换路由时列表上并没有及时更新数据,解决方法如下: vue路由切换时页面 ...

  4. html接收参数

    代码 <!DOCTYPE html> <html> <head> <title>html接收参数</title> </head> ...

  5. typealias

    类的别名

  6. fastreport报表中出现十字线

    问题描述:经常有十字线出现在报表中,出现在报表中不同的频带,在预览和运行时都会显示,不能点击和删除它. 解决方法:这是一个线控制,因太小而不能被渲染,所以fastreport使用十字线来表示其位置.通 ...

  7. 【BZOJ】3282: Tree(lct)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3282 复习了下lct,发现两个问题.. 1:一开始我以为splay那里直接全部rot(x)就好了,然 ...

  8. .NET 单点登录开源项目

    1. https://www.apereo.org/cas/client-integration 2.源码下载 https://wiki.jasig.org/display/CASC/.Net+Cas ...

  9. Postfix 邮件服务 - postfix服务

    postfix 邮件服务 也是基于sendmail (需要关闭或卸载sendmail)postfix 是一个电子邮件服务器,它为了改良sendmail邮件服务器而产生的,并且它的配置文件比sendma ...

  10. Storm 集群

    Apache Storm Storm是一个分布式的,可靠的,容错的数据流处理系统.Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存 ...