示例工程

C++ Demo

从源码编译

姿态检测

代码位置:demo/exec/multiPose.cpp

  1. 下载原始的Tensorflow模型 pose model

  2. 使用 模型转换工具 转换为 MNN 模型

  3. 执行姿态检测

    ./multiPose.out model.mnn input.png pose.png
    

效果示例:

../_images/multipose_input.pnginput.png ../_images/multipose_pose.pngpose.png

图像实例分割

代码位置:demo/exec/segment.cpp

下载 deeplabv3 分割模型并转换到 mnn 模型 https://storage.googleapis.com/download.tensorflow.org/models/tflite/gpu/deeplabv3_257_mv_gpu.tflite

./segment.out model.mnn input.png result.png

效果示例:

../_images/segment_input.pnginput.png ../_images/segment_result.pngresult.png

图像识别

代码位置:demo/exec/pictureRecognition.cpp

下载 mobilenet 模型并转换为 MNN 格式 第一个参数为 MNN 模型地址 第二个参数为图像地址 追加参数则为下一张图像地址

示例:

./pictureRecognition.out moiblenet.mnn Test.jpg

效果示例:

../_images/TestMe.jpgTestMe.jpg.png

输出:

Can't Find type=4 backend, use 0 instead
For Image: TestMe.jpg
386, 0.419250
101, 0.345093
385, 0.214722
347, 0.012001
346, 0.002010
348, 0.001876
294, 0.001247
349, 0.000761
354, 0.000443
345, 0.000441

第一行表示识别出可能性最大的类别编号,在相应的 synset_words.txt 去查找对应的类别,如:demo/model/MobileNet/synset_words.txt

Python Demo

Session图片分类

代码位置:pymnn/examples/MNNEngineDemo/

测试代码包含:

  • mobilenet_demo.py 使用Session进行图片分类示例

  • mobilenet_demo_2.py 使用Runtime创建Session进行图片分类示例

  • gpu_session_demo.py 使用Session的GPU后端进行图片分类示例

资源文件如下:

示例:

$ unzip mobilenet_demo.zip
$ python mobilenet_demo.py mobilenet_demo/mobilenet_v1.mnn mobilenet_demo/ILSVRC2012_val_00049999.JPEG
Load Cache file error.
expect 983
output belong to class: 983
$ python mobilenet_demo_2.py mobilenet_demo/mobilenet_v1.mnn mobilenet_demo/ILSVRC2012_val_00049999.JPEG
Load Cache file error.
MNN use low precision
<capsule object NULL at 0x7fdd0185a270> (True,)
MNN use low precision
memory_info: 22.382057MB
flops_info: 568.792175M
backend_info: 13
expect 983
output belong to class: 983
$ python gpu_session_demo.py mobilenet_demo/mobilenet_v1.mnn mobilenet_demo/ILSVRC2012_val_00049999.JPEG 
Testing gpu model calling method

Load Cache file error.
MNN use high precision
Can't Find type=3 backend, use 0 instead
Can't Find type=3 backend, use 0 instead
Run on backendtype: 13 

expect 983
output belong to class: 983

表达式图片分类

代码位置:pymnn/examples/MNNExpr

$ python mobilenet_demo.py mobilenet_demo/mobilenet_v1.mnn mobilenet_demo/ILSVRC2012_val_00049999.JPEG
expect 983
output belong to class: 983

模型量化

代码位置:pymnn/examples/MNNQuant

离线量化工具,用法参考, 资源文件下载 示例:

$ python test_mnn_offline_quant.py  --mnn_model quant_demo/mobilenet_v2_tfpb_train_withBN.mnn \
            --quant_imgs quant_demo/quant_imgs \
            --quant_model ./quant_model.mnn
output names:	 MobilenetV2/Predictions/Reshape_1
100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:46<00:00, 23.29s/it]
Epoch cost: 46.618 s.
quantized model save to ./quant_model.mnn

模型训练

代码位置:pymnn/examples/MNNTrain

测试代码包含:

  • mnist

  • mobilenet_finetune

  • module_save

  • quantization_aware_training

mnist

使用mnist数据训练模型,并测试准确率,无需下载资源,用法如下:

$ pip install mnist 
$ python train_mnist.py
train loss:  2.3346531
train loss:  0.28027835
train loss:  0.26191226
train loss:  0.09180952
train loss:  0.14287554
train loss:  0.14296289
train loss:  0.060721636
train loss:  0.037558462
train loss:  0.11289845
train loss:  0.04905951
Epoch cost: 47.505 s.
Save to 0.mnist.mnn
test acc:  96.25 %

mobilenet_finetune

这个示例展示了如何使用MobilenetV2在你的数据集上finetune一个图像分类器。 示例资源文件:

用法如下:

$ unzip model.zip train_dataset.zip test_dataset.zip
$ python mobilenet_transfer.py --model_file mobilenet_v2_tfpb_train_public.mnn --train_image_folder train_images --train_txt train.txt --test_image_folder test_images --test_txt test.txt --num_classes 1000
# TODO: 当前版本不支持FixModule无法执行该示例
AttributeError: module 'MNN.nn' has no attribute 'FixModule'

module_save

演示了模型权值的存储和加载

$ python test_save.py 
0.0004
10

quantization_aware_training

训练量化,用法如下:

$  python quant_aware_training.py --model_file quant_demo/mobilenet_v2_tfpb_train_withBN.mnn --val_image_path quant_demo/quant_imgs --val_txt quant_demo/val.txt

Android Demo

代码位置:project/android/demo

按照project/android/demo/READNE.md的步骤,首先安装开发所需工具;然后下载并转换模型;之后就可以编译成Android APP执行测试。

效果示例:

../_images/android_demo.jpgandroid_demo.png

iOS Demo

模型下载与转换:

首先编译(如果已编译可以跳过)MNNConvert,操作如下:

cd MNN
mkdir build && cd build
cmake -DMNN_BUILD_CONVERTER=ON ..
make -j8

然后下载并转换模型: 切到编译了 MNNConvert 的目录,如上为 build 目录,执行

sh ../tools/script/get_model.sh

工程编译

代码位置:project/ios

使用xcode打开project/ios/MNN.xcodeproj, target选择demo,既可编译运行。

效果示例:

../_images/ios_demo.jpgios_demo.png

Github Demo

欢迎开发者提供示例,可以在issue中提交自己的示例项目,审核通过后可以再此处展示

以下示例为Github开发者贡献,具体用法需参考相关代码;