MACE 使用笔记

2024-06-03 14:38
文章标签 使用 笔记 mace

本文主要是介绍MACE 使用笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境安装

tensorflow 安装,一直不太想用mace的部分原因是不支持tensorflow2.模型, 但为了GPU(OpenCL)还是要用啊。

Shell

set -e

学习笔记: shell 中的 set -e , set +e 用法_滴水成川-CSDN博客_linux set-eset -eset命令的-e参数,linux自带的说明如下:"Exit immediately if a simple command exits with a non-zero status."也就是说,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。有的人喜欢使用这个参数,是出于保证代码安全性的考虑。但有的时候,这种美好的初衷,也会导致严重的问题。https://blog.csdn.net/xiaofei125145/article/details/39345331

 tput

shell 终端terminfo命令 tput - Pyerlife - 博客园tput命令 可以更改终端功能,如移动或更改光标,更改文本属性,清除终端屏幕的特定区域等。 光标属性 在shell脚本或命令行中,可以利用tput命令改变光标属性。 利用上面参数编写一个终端时钟 shhttps://www.cnblogs.com/technologylife/p/8275044.html$0, $@

https://segmentfault.com/a/1190000021435389https://segmentfault.com/a/1190000021435389

asan

【内存】内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind_bandaoyu的note-CSDN博客https://blog.csdn.net/bandaoyu/article/details/106920878

bazel

绿色记忆:Bazel学习笔记https://blog.gmem.cc/bazel-study-note

bazel使用教程_A_L_A_N-CSDN博客_bazel clean查看bazel版本bazel version清除build结果bazel clean --expungebuildbazel build :<exe name> # 在BUILD所在的package目录下执行,编译指定的targetbazel build :all # 编译该package下的所有targetbazel build ... # 编译该p...https://blog.csdn.net/A_L_A_N/article/details/88018718?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-4.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-4.no_search_link

bazel 工具函数_TH_NUM的博客-CSDN博客Bazel 官方文档不管是写WORKSPACE,BUILD、.bzl(主要是一些函数)或者其他文件,都要遵循一些Bazel的规则,有些规则是bazel内置的函数使用说明,有的规则是一些语法分析用到的。例如:cc_library( name = "mkl_dnn", srcs = glob([ "src/common/*.cpp", "src/common/*.hpp", "src/cpu/*.cpp", "src/cpu/https://blog.csdn.net/TH_NUM/article/details/107008922

Docker:

在Android手机上使用MACE实现图像分类 - 云+社区 - 腾讯云在之前笔者有介绍过《在Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。在本章中,笔者将会介绍使用...https://cloud.tencent.com/developer/article/1623827

配置编译环境,真的很麻烦,还是直接使用docker

apt-get install docker.io //安装docker
docker pull registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev 
//下载mace docker
git clone https://github.com/XiaoMi/mace.git //下载mace代码, 

关联docker到本地代码,一般使用docker的编译环境,而代码是本地的,如果编译环境编译、改变了本地的代码,就和本地编译没有什么区别了,最起码对开发任务透明了。

本地下载mace后,git 会自动创建 mace 目录,cd mace: 然后执行

mace git:(master) sudo docker run -it -v $PWD:/mace registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev

进入docker后会看到bin, home等目录这些是docker里的不是本地的,本地的目录是mace, 也是docker的目录,这样就可以使用docker 环境操作mace共享目录了

root@700c5afbd9fd:/# ls
bin  boot  dev  etc  home  lib  lib64  mace

mace/examples/android/build.sh文件分析

shell命令dirs、pushd、popd - 简书https://www.jianshu.com/p/29aebe08ef23

mace/tools/python/convert.py

python tools/python/convert.py --config ../mace-models/mobilenet-v2/mobilenet-v2.yml

参数相对简单

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--config',
        type=str,
        default="",
        required=True,
        help="the path of model yaml configuration file.")
    parser.add_argument(
        '--output',
        type=str,
        default="build",
        help="output dir")
    parser.add_argument(
        "--enable_micro",
        action="store_true",
        help="enable convert micro.")
    flgs, _ = parser.parse_known_args()
    return flgs

if __name__ == '__main__':
    flags = parse_args() //解析输入参数到flags
    conf = config_parser.parse(flags.config) // from utils import config_parser解析yaml文件
    convert(conf, flags.output, flags.enable_micro)

功能就是解析config yaml 文件,生成/输出

def convert(conf, output, enable_micro=False):

        ----

        output_model_file = model_output + "/" + model_name + ".pb"
        output_params_file = model_output + "/" + model_name + ".data"
        (output_model_file + "_txt") 也是描述model file

解析保存到文件

python tools/converter.py convert --config=examples/android/mobilenet.yml --target_abis=$TARGET_ABI --debug_mode --mace_lib_type=dynamic(不起作用)

mace/tools/converter.py

pushd ../..

python tools/converter.py convert --config=examples/android/mobilenet.yml --target_abis=$TARGET_ABI

//调用了pythont/convert.py

convert.convert(configs, MODEL_CODEGEN_DIR, flags.enable_micro)

./tools/common.py:477:CODEGEN_BASE_DIR = 'mace/codegen'
./tools/common.py:478:MODEL_CODEGEN_DIR = CODEGEN_BASE_DIR + '/models'
./tools/common.py:479:ENGINE_CODEGEN_DIR = CODEGEN_BASE_DIR + '/engine'
./tools/common.py:480:LIB_CODEGEN_DIR = CODEGEN_BASE_DIR + '/lib'
./tools/common.py:481:OPENCL_CODEGEN_DIR = CODEGEN_BASE_DIR + '/opencl'

 python tools/converter.py convert/run

python文件后面的 convert是输入参数吗?是怎么样解析的?

convert

    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()
    convert = subparsers.add_parser(
        'convert',
        parents=[all_type_parent_parser, convert_run_parent_parser],
        help='convert to mace model (file or code)')
    convert.add_argument(
        "--enable_micro",
        action="store_true",
        help="enable convert micro.")
    convert.set_defaults(func=convert_func)
 

    all_type_parent_parser.add_argument(
        "--model_graph_format",
        type=str,
        default="",
        help="[file, code], MACE Model graph format.")
    all_type_parent_parser.add_argument(
        "--model_data_format",
        type=str,
        default="",
        help="['file', 'code'], MACE Model data format.")

def convert_func(flags):


    configs = config_parser.parse(flags.config)

    print(configs)

//model_graph_format: code 来着yml file
//model_data_format: code

embed_graph_def = model_graph_format == ModelFormat.code

    if embed_graph_def:
        os.makedirs(model_header_dir)
        sh_commands.gen_mace_engine_factory_source( //生成了c++ and .h files?
            configs[YAMLKeyword.models].keys(),
            embed_model_data)
        sh.cp("-f", glob.glob("mace/codegen/engine/*.h"),
              model_header_dir)
 

convert.convert(configs, MODEL_CODEGEN_DIR, flags.enable_micro)

    for model_name, model_config in configs[YAMLKeyword.models].items():
        if flags.enable_micro:
            data_type = model_config.get(YAMLKeyword.data_type, "")
            if data_type != FPDataType.bf16_fp32.value:
                data_type = FPDataType.fp32_fp32.value

        model_codegen_dir = "%s/%s" % (MODEL_CODEGEN_DIR, model_name)
        # encrypt file 
        encrypt.encrypt(model_name,
                        "%s/model/%s.pb" % (model_codegen_dir, model_name),
                        "%s/model/%s.data" % (model_codegen_dir, model_name),
                        model_codegen_dir,
                        bool(model_config.get(YAMLKeyword.obfuscate, 1)),
                        model_graph_format == "code",
                        model_data_format == "code")

    # code then build
    if model_graph_format == ModelFormat.code:
        build_model_lib(configs, flags.address_sanitizer, flags.debug_mode)

    print_library_summary(configs)
 

生成的文件for model

mace/mace/codegen/engine

mace/mace/codegen/models/xxx/ code, model, org_model

cc_library(
    name = "generated_models",
    srcs = glob(["models/**/*.cc"]),
    hdrs = glob(["models/**/*.h"]),
    copts = [ 
        "-Werror",
        "-Wextra",
        "-Wno-missing-field-initializers",
    ],  
    deps = [ 
        "//mace/core",
    ],  
)

cc_library(

这篇关于MACE 使用笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027270

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识