一、环境搭建
1.1.MNN官方文档
1.2.Clone MNN代码
git clone https://github.com/alibaba/MNN.git
1.3.框架概况
MNN框架主要分为三部分:推理,训练和转换。推理:在端侧加载MNN模型进行推理的阶段。训练:训练框架上,根据训练数据训练出模型的阶段。转换:将其他训练框架模型转换为MNN模型的阶段。
1.4.Mac环境所需工具安装
brew install protobuf
brew install cmake
二、工具链编译
2.1.编译推理部分:
./schema/generate.sh
mkdir build && cd build && cmake .. && make -j8
编译完成后本地出现MNN的动态库。
2.2.编译训练部分:
cd MNN/build
cmake .. -DMNN_BUILD_TRAIN=ON
make -j8
得到一些训练框架以及demo程序
2.3.转换部分编译:
cd path/to/MNN
# 生成 schema ,可选
cd schema && ./generate.sh
cd build
cmake .. -DMNN_BUILD_CONVERTER=true && make -j4
得到可执行文件,MNNConvert,用于转换模型,MNN提供了多种格式的转换
包括:TensorFlow、TensorFlow Lite、Caffe、ONNX、TorchScript、PyTorch
详细查看:模型转换 · 语雀
至此完成了工具链的编译,得到产物,包括转换工具以及一些demo的可执行文件,如MultiPose.out用于姿态检测,segment.out用于图像分割。
三、在Mac上尝试姿态检测demo
3.1.下载Tensorflow原始模型文件
https://github.com/czy2014hust/posenet-python/raw/master/models/model-mobilenet_v1_075.pb
3.2.将模型转换成MNN格式模型
./MNNConvert -f TF --modelFile model.pb --MNNModel pose.mnn --bizCode biz
补充Mnn可视化工具下载:Releases · lutzroeder/netron · GitHub,可以看到模型的节点和参数
3.3.执行姿态检测
执行结果:
./multiPose.out pose.mnn input.png pose.png
main, 381, cost time: 6.079000 ms
main, 405, cost time: 0.146000 ms
可得到一张新的图片pose.png,跟文档中demo一样的效果。
四、iOS图像识别demo
4.1.获取模型
执行./tools/script/get_model.sh,将会去下载工程中要使用到的模型文件,执行完成后在resource->model文件夹下看到。iOS demo使用的是MobileNet的模型CNN模型之MobileNet - 知乎
4.2.运行iOS工程
在demo->iOS中执行pod install引入MNN仓库,然后打开playground.xcworkspace,接入真机运行该工程
4.3.查看使用效果
如图中文字列出的分别是,识别到的结果,以及可能性概率,以及耗时。
五、目的
可以看出,想要简单的实现端上的图像识别等功能,只需要集成了MNN工程,并加入已经训练好的模型,针对执行结果做不同的处理即可实现,非常的容易上手。如果是针对业务开展的,公司内部算法团队能提供训练好的模型,在端上即可达到,无需转发至云端。