zoukankan      html  css  js  c++  java
  • 小米MACE开源框架搭建

    一、环境配置

      请参照小米官方的文档:https://mace.readthedocs.io/en/latest/installation/env_requirement.html

    •  For Android build, ANDROID_NDK_HOME must be confifigured by using export ANDROID_NDK_HOME=/path/to/ndk
    •  It will link libc++ instead of gnustl if NDK version >= r17b and bazel version >= 0.13.0, please refer to NDK cpp-support.

    二、框架搭建

      

      1、下载小米MACE镜像

        轻量版 mace-dev-lite 镜像下载    

    # Pull lite edition docker image
    docker pull registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite
    # Build lite edition docker image
    docker build -t registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite ./docker/mace-dev-lite
    

            完全版mace-dev镜像下载(包含多版本的NDK和一些其他工具)

    # Pull full edition docker image
    docker pull registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev
    # Build full edition docker image
    docker build -t registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev ./docker/mace-dev
    

      2、创建容器

           以mace-dev-lite为例

    # Create a container named `mace-dev`
    docker run -it --privileged -d --name mace-dev 
               -v /dev/bus/usb:/dev/bus/usb --net=host 
               -v /local/path:/container/path 
               -v /usr/bin/docker:/usr/bin/docker 
               -v /var/run/docker.sock:/var/run/docker.sock 
               registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite
    # Execute an interactive bash shell on the container
    docker exec -it mace-dev /bin/bash
    

      3、克隆源码

    git clone https://github.com/XiaoMi/mace.git
    git fetch --all --tags --prune
    
    # Checkout the latest tag (i.e. release version)
    tag_name=`git describe --abbrev=0 --tags`
    git checkout tags/${tag_name}
    

      4、进行源码编译、生成库文件以及创建工程、测试。

      方法一

        (1)一步直接完成编译和相关库、文档的创建和配置 。不需要任何其他操作。

      cd mace/example/android
      ./build.sh
    

        (2)使用Android studio打开mace/example/下的android项目,在file>Project Structure>SDK Location中的Android NDK Location 中 配置Android studio 的NDK 路径到自己所安装的路径。

         (3)连接Android手机进行测试。

        注:若出现闪退现象,可能手机权限不够,可以对测试机进行 ROOT 后 再行测试。(亲身经历)

      方法二

       (1)克隆mace model zoo ,放在与mace文件同目录下。

      git clone https://github.com/XiaoMi/mace-models.git
    

      (2)编译mace library。

      cd mace
      bash tools/build-standalone-lib.sh
    

      (3)在转化静态库时将模型转化为C++代码,转化有两种方式

         以使用mobilenet-v2为例:

          修改   mace-models/mobilenet-v2    文件夹下的   mobilenet-v2.yml  和   mobilenet-v2-host.yml。

          1)将模型图转换为代码,将模型权重转换为具有以下模型配置的文件。
     
                model_graph_format: code
                model_data_format: file

          2)将模型图和模型权重转换为下面的模型配置代码。

                    model_graph_format: code
                    model_data_format: code
    

              --在此建议全部转化为模型配置代码--

          即 将 mobilenet-v2.yml 和 mobilenet-v2-host.yml  文件中的         

               model_graph_format: code
               model_data_format: file
               #改为#
               model_graph_format: code
               model_data_format: code
    

          保存

      
      (4)将模型转化为mace格式的模型。
     
      python tools/converter.py convert --config=/path/to/mace-models/mobilenet-v2/mobilenet-v2.yml       #/path/to/  为自己的文件路径

      

       (5)转化后会在 builds/ 文件夹下生成  include, lib, mobilenet-v2 等文件夹。

       (6)在android项目中的macelibrary/src/main/cpp 文件夹下

        

        mace/example/android/macelibrary/src/main/cpp 文件夹下

              -- 新建include/mace/public文件

           -- 新建lib文件夹

           -- 新建model文件夹
      (7)将库文件夹mace/builds/下的相关文件复制到工程文件 mace/example/android/ 下的相关文件夹下 。
        1、将 builds/include/mace/public/ 下的mace.h 以及 mace_runtime.h拷贝进去macelibrary/src/main/cpp/include/mace/public中
        2、将 builds/mobilenet-v2/include/mace/public/ 下的mace_engine_factory.h 以及 mobilenet_v2.h拷贝至 macelibrary/src/main/cpp/include/mace/public中
        3、将 builds/mobilenet-v2/model 下的mobilenet-v2.a 拷贝至 macelibrary/src/main/cpp/model中,并修改mobilenet-v2.a 为 mobilenet.a
        4、将 builds/lib下的文件都拷贝至macelibrary/src/main/cpp/lib中
        5、修改 macelibrary/src/main/cpp/include/mace/public 下 所有 .h 文件中引入的文件地址

            为

             #include "src/main/cpp/include/mace/public/mace.h"

         注:若文件中没有路径文件,则在头文件下加上以上地址;若存在,则跟换为以上地址。

      (8)使用Android studio打开mace/example/下的android项目,在file>Project Structure>SDK Location>Android NDK Location 中 配置

         Android studio 的NDK 路径到自己所安装的路径。

       (9)由于这个测试的app默认是使用mobilenet_v1的模型的,所以我们更改一下代码让他使用mobilenet_v2,修改android studio工程下

         app/src/main/java/com.xiaomi.mace.demo.result/InitData.java文件中的。 

             model = MODELS[0];
         改为:
          model = MODELS[1];
    

         

           (10)连接Android手机进行测试。

        注:若出现闪退现象,可能手机权限不够,可以对测试机进行 ROOT 后 再行测试。(亲身经历)

       

        

       

        

  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/kang06/p/9477043.html
Copyright © 2011-2022 走看看