作者:十岁的小男孩

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. 使用Nessus漏扫

    Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Nessus可同时在 ...

  2. P2422 良好的感觉

    P2422 良好的感觉 给定一段序列, 其中元素 \(0 \leq a_{i} \leq 100000\) 定义一段子段 \([L, R]\) 的舒适值为 \(\min_{L \leq i \leq ...

  3. java futureTask的使用

    futureTask 它的意义在于去除主函数的等待时间,使得主函数在执行耗时操作时无需死等,只需要在未来task执行完毕,再获取结果. 下面的 futureTask 的一个简单例子. public c ...

  4. JavaSE学习总结(四)——Java面向对象十分钟入门

    面向对象编程(Object Oriented Programming,OOP)是一种计算机模拟人类的自然思维方式的编程架构技术,解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题.Ja ...

  5. <!--more-->搭建的博客设置主页内容高度

    用 markdown写文章时插入<!--more-->,文章会自动从插入的位置截断,也就是说在博客中只显示<!--more-->之前的内容,点击阅读全文之后会显示所有内容.

  6. JAVA记录-String/StringBuilder/StringBuffer区别

  7. ubuntu 18.04下character_set_server设置为utf8

    打开/etc/mysql/mysql.conf.d/mysql.cnf添加以下代码: character-set-server = utf8 然后重启mysql即可

  8. JavaScript之Dom操作【删除当前节点】

    //最新更新:2017-11-25 //现在可以通过更强大而快捷的方式为所有的HTMLElement元素的Dom操作扩展新的方法[注意事项:处理HTMLElemnt元素时,此法对IE-8无效] //原 ...

  9. 同步sync 异步async

    线程中 同步任务是串行队列,也就是按顺序执行. 同步任务:不会开辟新的线程,它是在当前线程执行的. dispatch 调度   GCD里面的函数都是以dispatch开头的. 同步任务  步骤: 1. ...

  10. Maven入门---修改tomcat版本及端口及访问路径(四)

    Maven中通过添加插件修改tomcat版本及端口及访问路径 --------------------------------------------------------------------- ...