这篇文章上次修改于 1825 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

一. 整体架构

1. MNN简介

欢迎转载,转载请注明原文地址 。谢谢!

简介

MNN是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。 -- MNN官方文档

整体架构

引用官方文档中架构图

img1

可以看出整个MNN项目由两大部分组成:

  • Converter: 转换工具, 负责将其他深度学习框架如TensorFlowCaffeONNX 的模型转换到 MNN 的模型格式。
  • Interpreter: 推理引擎, 负责使用模型进行前向计算,得到模型推理结果。

    1. Engine 模块:包含计算图调度,模型加载,图像处理。
    2. backend 模块:各种计算设备实现的backend, 包含了内存分配,Op的实现。

源码分析的流程

阅读源码是提升编程能力的一种方式,该系列文档主要用于学习MNN框架的设计与实现,提高个人水平,由于能力有限,如有理解错误的地方还请指正。

目前计划根据首先根据 MNN 官方文档中的推理流程进行分析,逐步分析每一步的流程,在该流程中记录可能需要后续继续分析的源码, 在分析完单个模型推导流程之后,再选择按模块进行详细分析。

分为以下阶段

1. 推理流程

  1. 创建会话

    1. 创建Interpreter
    2. 创建Session
  2. 输入数据
  3. 运行会话
  4. 获取输出

2. 模块分析

  1. MNN内存池的实现
  2. FlatBuffers定义的数据结构
to do.