作者:十岁的小男孩

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. Jenkins-Pipeline 流水线发布部署项目

    node { sh 'mkdir -p cms' dir('cms') { git branch: 'prerelease', credentialsId: '5fb79ef0-4301-4b7c-a ...

  2. CSS的显示模式

    div与span div与span有什么区别 div单独占一行,span不会单独占一行 div是容器级的标签,而span是一个文本级的标签 容器级的标签有:div , h , ul , ol , dl ...

  3. package.json版本号

    (1)^指定版本:比如"^3.1.4",表示安装3.1.4及以上的版本(3.x.x),但是不安装4.0.0 (2)~指定版本:比如 "~1.1.0", 表示安装 ...

  4. Hadoop生态圈-使用Ganglia监控flume中间件

    Hadoop生态圈-使用Ganglia监控flume中间件 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Ganglia监控简介 加州伯克利大学千禧计划的其中一个开源项目.是一 ...

  5. Linux命令之rm

    rm命令 用处:删除文件 用法:在终端上输入rm加上要删除的文件的名字(如果有的话,包括后缀) 示例: (我要删除newfile这个文件)

  6. a超链接之返回顶部的两种实现方法

    1.通过css实现: 为页面顶部如body或者自己设置的盒子等加上唯一id属性 <body id="id"> .... <a href="#id&quo ...

  7. JS 将字符串数组用 | 或其他符号分割

    var arr = ["吕超","赵云","典韦","关羽","马超","张飞" ...

  8. Nginx proxy开启cache缓存

    proxy_temp_path /tmp/proxy_temp_dir; // 设置缓存位置 proxy_cache_path /tmp/proxy_cache_dir levels = : keys ...

  9. day1 查看当前目录命令:pwd

    用到查看当前目录的完整路径使用:pwd 物理路径和连接路径什么鬼?没明白暂时借鉴别人的记录下 显示当前目录的物理路径 pwd –P 1: [root@DB-Server init.d]# cd /et ...

  10. 微信小程序开发工具的基本应用

    全局配置: 1.1配置所有页面路径:在app.json的{pages:[配置所有页面]},将首页放置在第一位,在app.json必须写上所有页面的路径,要不然会报错,每个页面的wxss样式文件只在当前 ...