MNN深度框架学习教程(一) 编译MNN,并跑通MNN的demo

本文详细介绍了MNN框架的编译流程,包括推理、训练和转换三个关键部分,并提供了在Ubuntu18.04环境下编译MNN的具体步骤。此外,还演示了如何通过MNN进行模型训练和姿态检测demo的运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验环境:

系统:Ubuntu18.04

硬件设备:PC设备和树莓派4B

编译教程:

        MNN框架主要分为三部分:推理,训练和转换。推理:在端侧加载MNN模型进行推理的阶段。训练:训练框架上,根据训练数据训练出模型的阶段。转换:将其他训练框架模型转换为MNN模型的阶段。

因此我们的编译也需要分三部分来进行编译。

首先下载MNN:(我这个是使用码云进行了加速)

git clone https://gitee.com/zhanzzw/MNN.git

环境要求:

  • cmake(建议使用3.10或以上版本)、
  • protobuf(使用3.0或以上版本)
  • gcc(使用4.9或以上版本)

编译推理部分:

cd /path/to/MNN
./schema/generate.sh
mkdir build && cd build && cmake .. && make -j8

编译训练部分:

cd MNN/build
cmake .. -DMNN_BUILD_TRAIN=ON
make -j8

编译完成之后运行:

./runTrainDemo.out

如果显示出下面结果说明训练部分编译成功:

Usage: ./runTrainDemo.out CASENAME [ARGS]
Valid Case:
DataLoaderDemo
DataLoaderTest
DistillTrainQuant
ImageDatasetDemo
LinearRegress
MatMulGradTest
MnistInt8Train
MnistTrain
MnistTrainSnapshot
MobilenetV2PostTrain
MobilenetV2Train
MobilenetV2TrainQuant
MobilenetV2Transfer
NNGrad
NNGradV2
NNGradV3
OctaveMnist
PostTrain
PostTrainMobilenet
QuanByMSE
QuanMnist
TestMSE

转换部分编译:

cd MNN/
./schema/generate.sh
cd build
cmake .. -DMNN_BUILD_CONVERTER=true && make -j4

到此为止MNN的训练,推理和转换三部分已经编译成功了。

运行MNN的demo:

姿态检测demo:

代码:demo/exec/multiPose.cpp

 准备工作:

cd MNN/build
cmake -DMNN_BUILD_DEMO=ON ..
make -j8
  1. 下载原始的Tensorflow模型。链接: https://pan.baidu.com/s/1QbEgh1kUjl2Kpi2ouwWfUA 提取码: rusy
  2. 使用模型转换工具将pb模型转换为 MNN 模型。
    cd MNN/build
    ./MNNConvert -f TF --modelFile model-mobilenet_v1_075.pb --MNNModel donkey.mnn --bizCode biz
    

     

  3. 将转换之后的donkey.mnn模型复制到MNN/demo/exec文件夹下,执行行姿态检测。
    cd MNN/demo/exec
    ./multiPose.out donkey.mnn input.jpg pose.png

    其他demo也是类似这样执行。

 

03-21
### MNN框架概述 MNN(Mobile Neural Network)是款阿里巴巴推出的轻量级深度学习端侧推理引擎[^2]。其设计目标是解决深度神经网络模型在移动端和其他资源受限设备上的高效运行问题。它不仅能够完成模型的优化和转换,还提供了强大的推理能力以及训练支持。 #### 核心特性 - **轻量性**:MNN文件大小常仅为几兆字节,便于部署于移动设备和嵌入式硬件上[^3]。 - **用性**:支持TensorFlow、Caffe、ONNX等多种主流模型格式,兼容CNN、RNN、GAN等常见网络结构。 - **高效性**:过高度优化的手写汇编代码实现核心运算,显著提升了执行效率。 - **易用性**:提供丰富的API接口,包括图像处理模块和支持回调机制的功能,允许开发者灵活定制逻辑流程。 --- ### 主要组件及其功能 以下是MNN的主要组成部分及各自的作用: 1. **MNN-Converter** - 这是个用于将不同框架下的模型转化为MNN格式的工具[^1]。 它分为两部分: - Frontends:适配多种前端框架(如TensorFlow Lite、Caffe、PyTorch via ONNX),使得这些框架导出的模型可以直接被MNN加载使用。 - Graph Optimize:过对计算图进行算子融合、替换操作以及布局调整来进步提高性能表现。 2. **MNN-Compress** - 提供了套针对MNN模型的压缩方案,在保持定精度损失的前提下减小存储空间占用率的同时加快预测速度。 3. **MNN-Express** - 支持带有复杂控制流(Control Flow)的动态图模型运行,允许用户借助内置算子构建自定义层或节点。 4. **MNN-CV** - 类似OpenCV的计算机视觉库,不过它的底层依赖完全基于MNN重写而成,从而实现了更紧密集成的效果。 5. **MNN-Train** - 集成了完整的训练流水线,让使用者能够在任意平台上无缝切换至生产环境中实际使用的相同架构上去调试参数配置等问题。 --- ### 如何快速入门? 为了帮助初学者更快地上手该技术栈,官方给出了详细的教程说明如何搭建开发环境以及首个实例程序——人体姿态估计Demo。具体步骤如下所示: 1. 下载源码包后解压放置合适位置; 2. 确保已安装好Protobuf v3.x及以上版本作为序列化协议的支持基础; 3. 执行命令进入工作目录`cd mnn && cd schema && ./generate.sh`生成描述文件; 4. 创建临时构建区`mkdir build && cd build`接着调用CMake工具指定选项开关开启样例工程编译模式`cmake -DMNN_BUILD_DEMO=ON ..`; 5. 启动多核发制造过程加速产出最终产物`make -j8`. 上述完成后即可获得可供测试用途的应用二进制文件! --- ### 示例代码展示 下面给出段简单的Python脚本演示怎样加载预训练好的MNN权重文件对输入图片做前向传播得到分类结果: ```python from MNN import Interpreter, Session def inference_mnn_model(mnn_path, input_data): interpreter = Interpreter(mnn_path) # 初始化解释器对象读取模型元信息 session = interpreter.createSession() # 构造会话句柄分配GPU/CPU资源 input_tensor = interpreter.getSessionInput(session) # 获取默认输入张量指针 tmp_input = input_tensor.host() for i in range(len(input_data)): tmp_input[i] = float(input_data[i]) / 255.0 # 归化像素值范围 interpreter.runSession(session) # 开始正式推断环节 output_tensor = interpreter.getSessionOutput(session) # 抓取出最后输出特征映射表单 result = list(output_tensor.host())[:len(output_tensor)] return result.index(max(result)) # 返回最大概率对应的类别索引号 if __name__ == "__main__": model_file = "./example.mnn" test_image = [value for row in [[col for col in line.strip().split()] for line in open("./test.txt").readlines()] for value in map(int,row)] # 假设这里是从文本记录还原原始RGB数组形式的数据集样本之 predicted_label = inference_mnn_model(model_file,test_image) print(f"The image is classified as class {predicted_label}.") ``` 此片段假设存在个名为`./example.mnn`的目标识别系统保存下来的静态图表示法档案还有配套的幅待测验的小尺寸灰阶照片存放在纯ASCII编码字符串里边等待解析成整数列表传进去函数内部参与后续处理动作链路当中去。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值