2022-08-23 21:21:29 +08:00
|
|
|
|
# 工具模块编译
|
|
|
|
|
|
|
|
|
|
## 模型转换工具
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_CONVERTER` 是否编译模型转换工具
|
|
|
|
|
- `MNN_BUILD_TORCH` 是否支持TorchScript模型转换,MacOS下需要安装pytorch,Linux下会下载libtorch
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
cmake .. -DMNN_BUILD_CONVERTER=ON -DMNN_BUILD_TORCH=ON
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `MNNConvert` 模型转换工具
|
2023-04-18 18:54:46 +08:00
|
|
|
|
- `TestConvertResult` 模型转换正确性测试工具,*Windows下没有此产物,用`MNNConvert`对应功能替代*
|
2022-08-23 21:21:29 +08:00
|
|
|
|
- `TestPassManager` 模型转换工具测试用例
|
|
|
|
|
- `MNNDump2Json` 模型转换为Json
|
|
|
|
|
- `MNNRevert2Buffer` Json转换为模型
|
|
|
|
|
- `OnnxClip` Onnx模型裁剪工具
|
|
|
|
|
## 训练框架
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_TRAIN` 是否编译训练框架
|
|
|
|
|
- `MNN_BUILD_TRAIN_MINI` 对于移动端/嵌入式设备,建议设置`MNN_BUILD_TRAIN_MINI=ON`,不编译内置的`Dataset`,`Models`,这部分在移动端/嵌入式设备上一般有其他解决方案
|
|
|
|
|
- `MNN_USE_OPENCV` 部分PC上的demo有用到,与Dataset处理相关
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_BUILD_TRAIN=ON -DMNN_USE_OPENCV=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `MNNTrain` 训练框架库
|
|
|
|
|
- `runTrainDemo.out` 运行训练框架demo的入口程序
|
2023-12-04 11:12:20 +08:00
|
|
|
|
- `transformer` 训练模型转换器,将推理用的MNN模型转换为执行训练的MNN模型
|
|
|
|
|
- `extractForInfer` 从执行训练的MNN模型中提取参数,对应更新推理用的MNN模型
|
2022-08-23 21:21:29 +08:00
|
|
|
|
## 测试工具
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_TOOL` 是否编译测试工具
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_BUILD_TOOL=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `GetMNNInfo` 获取MNN模型信息
|
|
|
|
|
- `ModuleBasic.out` 使用V3 API对模型执行基础推理测试
|
|
|
|
|
- `SequenceModuleTest.out` 测试Sequence模型推理
|
|
|
|
|
- `MNNV2Basic.out` 使用V2 API对模型执行基础推理测试
|
|
|
|
|
- `mobilenetTest.out` 测试mobilenet模型推理
|
|
|
|
|
- `backendTest.out` 测试模型在指定后端上执行的结果是否与CPU一致
|
|
|
|
|
- `modelCompare.out` 原始模型与量化模型推理结果比较
|
|
|
|
|
- `testModel.out` 给定输入输出测试模型推理正确性
|
|
|
|
|
- `testModel_expr.out` 给定输入输出测试模型推理正确性
|
2023-02-28 10:41:24 +08:00
|
|
|
|
- `testModelWithDescribe.out` 给定输入输出和shape描述测试模型推理正确性
|
2022-08-23 21:21:29 +08:00
|
|
|
|
- `getPerformance.out` 获取当前设备的CPU性能
|
|
|
|
|
- `checkInvalidValue.out` 检测输出目录里的数据
|
|
|
|
|
- `timeProfile.out` 测试模型在指定后端上执行的时间,并获取每层的执行时间占比
|
|
|
|
|
- `testTrain.out` 测试训练功能
|
|
|
|
|
- `checkDir.out` 测试两个文件夹是否一致
|
|
|
|
|
- `checkFile.out` 测试两个文件是否一致
|
|
|
|
|
- `winogradExample.out` winograd示例
|
2023-12-27 17:26:44 +08:00
|
|
|
|
- `fuseTest` 测试 GPU 自定义算子的功能,目前仅支持 Vulkan Buffer 模式
|
2024-03-13 14:55:54 +08:00
|
|
|
|
- `GpuInterTest.out` 测试 GPU 内存输入的功能,目前仅支持 OpenCL Buffer 模式与 OpenGL texture 模式,编译时许打开 MNN_OPENCL 与 MNN_OPENGL
|
2022-08-23 21:21:29 +08:00
|
|
|
|
## Benchmark工具
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_BENCHMARK` 是否编译Benchmark工具
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_BUILD_BENCHMARK=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `benchmark.out` benchmark工具
|
|
|
|
|
- `benchmarkExprModels.out` 表达式构图模型测试benchmark工具
|
|
|
|
|
## 模型量化工具
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_QUANTOOLS` 是否编译模型量化工具
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
2023-05-12 14:23:48 +08:00
|
|
|
|
cmake .. -DMNN_BUILD_QUANTOOLS=ON
|
2022-08-23 21:21:29 +08:00
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `quantized.out` 模型量化工具
|
|
|
|
|
## 评估工具
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_EVALUATION` 是否编译图片分类结果评估工具
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_EVALUATION=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `classficationTopkEval.out` 图片分类结果评估工具
|
|
|
|
|
## MNN OpenCV库
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_OPENCV` 是否编译OpenCV函数接口
|
|
|
|
|
- `MNN_IMGCODECS` 是否编译OpenCV图像解码器
|
|
|
|
|
- `MNN_OPENCV_TEST` 是否编译OpenCV单元测试
|
|
|
|
|
- `MNN_OPENCV_BENCH` 是否编译OpenCV性能测试
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_BUILD_OPENCV=ON -DMNN_IMGCODECS=ON -DMNN_OPENCV_TEST=ON -DMNN_OPENCV_BENCH=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `libMNNOpenCV.so` MNN OpenCV函数库
|
|
|
|
|
- `opencv_test` MNN OpenCV单元测试
|
|
|
|
|
- `opencv_bench` MNN OpenCV性能测试
|
|
|
|
|
|
|
|
|
|
## 示例工程
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_DEMO` 是否编译MNN Demo
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_BUILD_DEMO=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
|
|
|
|
- `pictureRecognition.out` V2接口(Session)图片识别示例
|
|
|
|
|
- `pictureRecognition_module.out` V3接口(Module)图片识别示例
|
2023-02-28 10:41:24 +08:00
|
|
|
|
- `pictureRecognition_batch.out` 自定义batchsize图片识别示例
|
2022-08-23 21:21:29 +08:00
|
|
|
|
- `multithread_imgrecog.out` 多线程图片识别示例
|
|
|
|
|
- `pictureRotate.out` 图片旋转示例
|
|
|
|
|
- `multiPose.out` 姿态检测示例
|
|
|
|
|
- `segment.out` 图像实例分割示例
|
|
|
|
|
- `expressDemo.out` 表达式接口推理示例
|
|
|
|
|
- `expressMakeModel.out` 使用表达式构建模型示例
|
|
|
|
|
- `transformerDemo.out` Transformer模型示例
|
|
|
|
|
- `rasterDemo.out` Raster示例
|
|
|
|
|
- `nluDemo.out` nlu模型示例
|
2022-11-18 22:35:31 +08:00
|
|
|
|
- `mergeInplaceForCPU` 将模型中可以Inplace计算的算子改成Inplace计算,可以减少内存占用,但限定CPU后端运行
|
2022-08-23 21:21:29 +08:00
|
|
|
|
## 单元测试
|
|
|
|
|
- 相关编译选项
|
|
|
|
|
- `MNN_BUILD_TEST` 是否编译MNN单元测试
|
|
|
|
|
- 编译命令
|
|
|
|
|
```bash
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
cmake .. -DMNN_BUILD_TEST=ON
|
|
|
|
|
make -j4
|
|
|
|
|
```
|
|
|
|
|
- 编译产物
|
2022-11-18 22:35:31 +08:00
|
|
|
|
- `run_test.out` 单元测试程序
|