MACE Micro 微控制器神经网络推理引擎基础使用指南

MACE Micro 微控制器神经网络推理引擎基础使用指南

mace MACE is a deep learning inference framework optimized for mobile heterogeneous computing platforms. mace 项目地址: https://gitcode.com/gh_mirrors/ma/mace

概述

MACE Micro 是专为微控制器(MCU)设计的轻量级神经网络推理引擎,目前主要支持 ARM Cortex-M 系列微控制器。本文将详细介绍如何在微控制器环境中使用 MACE Micro 进行神经网络模型的部署和推理。

环境准备

硬件要求

  • 开发主机:推荐使用 Ubuntu 18.04/20.04 系统
  • 目标设备:ARM Cortex-M 系列微控制器

软件依赖安装

在 Ubuntu 系统上执行以下命令安装必要工具链:

# 基础工具
sudo apt-get update
sudo apt-get install -y wget g++ python3 python3-pip

# ARM交叉编译工具链
sudo apt-get install -y gcc-arm-none-eabi

# Python依赖
python3 -m pip install jinja2 pyyaml sh numpy six filelock

# 安装CMake(版本需≥3.13.0)
wget https://cnbj1.fds.api.xiaomi.com/mace/third-party/cmake-3.18.3-Linux-x86_64.sh
chmod +x cmake-3.18.3-Linux-x86_64.sh && ./cmake-3.18.3-Linux-x86_64.sh --skip-license --prefix=/usr

# TensorFlow相关
python3 -m pip install -U pip
python3 -m pip install tensorflow==2.3.0
python3 -m pip install tensorflow_model_optimization

Docker环境(可选)

为简化环境配置,可以使用预配置的Docker镜像:

cd mace/docker/mace-micro-dev
docker build . -f mace-micro-dev.dockerfile --tag mace-micro-dev
cd ../../..
docker run -ti -v $(pwd):/workspace/ -w /workspace mace-micro-dev

模型转换

MACE Micro 支持将 TensorFlow 1.x 冻结模型和 TensorFlow 2.x Keras 模型转换为 C++ 代码。以 MNIST 手写数字识别模型为例:

cd mace
python3 tools/python/convert.py --config=micro/pretrained_models/keras/mnist/mnist.yml --enable_micro

模型配置文件详解

模型配置文件(YAML格式)定义了模型转换的各种参数,以下是完整示例:

library_name: mnist
target_abis: [host]
model_graph_format: file
model_data_format: file
models:
  mnist_int8:
    platform: keras
    model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/micro/keras/mnist/mnist-int8.h5
    model_sha256_checksum: 0ff90446134c41fb5e0524484cd9d7452282d3825f13b839c364a58abd0490ee
    subgraphs:
      - input_tensors:
          - conv2d_input:0
        input_shapes:
          - 1,28,28,1
        input_ranges:
          - 0,1
        output_tensors:
          - quant_dense_1/Softmax:0
        output_shapes:
          - 1,10
        validation_inputs_data:
          - https://cnbj1.fds.api.xiaomi.com/mace/inputs/mnist4.npy
    runtime: cpu
    quantize: 1
    quantize_schema: int8
    micro:
      backend: cmsis  # 使用CMSIS_5 NN模块

数据类型配置

对于不同的量化模型,需要特别配置:

BFLOAT16模型:

data_type: bf16_fp32

INT8模型:

quantize: 1
quantize_schema: int8
quantize_range_file: range_file_path  # 模型未包含量化信息时需要

构建MACE Micro库

根据模型类型选择不同的构建参数:

Float32模型:

./micro/tools/cmake/cmake-build-host.sh

BFLOAT16模型:

./micro/tools/cmake/cmake-build-host.sh -DMACE_MICRO_ENABLE_BFLOAT16=ON

INT8模型:

./micro/tools/cmake/cmake-build-host.sh -DMACE_MICRO_ENABLE_CMSIS=ON

注意:float32和bfloat16不能同时启用

使用生成的库文件

构建完成后,库文件和头文件位于build/micro/host/install目录,可直接使用:

# 构建示例程序
g++ micro/examples/classifier/main.cc \
    -DMICRO_MODEL_NAME=mnist \
    -DMICRO_DATA_NAME=mnist \
    -I build/micro/host/install/include/ \
    -I micro/examples \
    -L build/micro/host/install/lib/ \
    -lmodel_mnist -lmicro \
    -o mnist

# 运行MNIST示例
./mnist

代码示例解析

以下是MNIST示例的核心代码,展示了MACE Micro的基本使用流程:

#include "data/mnist.h"
#include <cstdio>
#include "micro.h"  // MACE Micro头文件

namespace micro {
namespace mnist {
MaceStatus GetMicroEngineSingleton(MaceMicroEngine **engine);
} }  // 命名空间

int main() {
  // 1. 获取MNIST引擎实例
  micro::MaceMicroEngine *micro_engine = NULL;
  micro::MaceStatus status = micro::mnist::GetMicroEngineSingleton(&micro_engine);

  // 2. 设置输入数据
  static float *input_data = data_mnist_4;
  int32_t input_dims[4] = {1, 28, 28, 1};
  micro_engine->RegisterInputData(0, input_data, input_dims);

  // 3. 执行推理
  micro_engine->Run();

  // 4. 获取输出结果
  float *output_buffer = NULL;
  const int32_t *output_dims = NULL;
  uint32_t dim_size = 0;
  micro_engine->GetOutputData(0, 
      reinterpret_cast<void **>(&output_buffer), 
      &output_dims, 
      &dim_size);

  // 打印输出
  for (int32_t i = 0; i < output_dims[1]; ++i) {
    printf("%d: %f\n", i, output_buffer[i]);
  }

  return 0;
}

性能参考

在实际部署中,一个HAR-CNN int8模型在NUCLEO-F767ZI(Cortex-M7)开发板上单次推理耗时约12ms,展示了MACE Micro在资源受限设备上的高效性能。

通过本文介绍的基础流程,开发者可以快速将训练好的神经网络模型部署到各类Cortex-M微控制器上,实现边缘设备的智能化。

mace MACE is a deep learning inference framework optimized for mobile heterogeneous computing platforms. mace 项目地址: https://gitcode.com/gh_mirrors/ma/mace

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明咏耿Helena

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值