• mace


    作者:十岁的小男孩

    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方法。

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

      

  • 相关阅读:
    CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
    C#动态调用WebService
    WPF实现窗体中的悬浮按钮
    Oracle树结构查询按层级排序
    WPF自定义TabControl样式
    WPF自定义Window窗体样式
    C# 实现图片压缩
    C# 图片反色处理 图片夜间模式
    C#中多线程中变量研究
    EasyNetQ操作RabbitMQ(高级消息队列)
  • 原文地址:https://www.cnblogs.com/missidiot/p/9718037.html
Copyright © 2020-2023  润新知