yolov3 MNN框架部署C++版
Posted 刘大壮_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yolov3 MNN框架部署C++版相关的知识,希望对你有一定的参考价值。
一、模型转换:
1.训练的模型格式:https://github.com/AlexeyAB/darknet/ darknet训练出来的weights
2.将训练时的.cfg文件和训练后得到的.weights文件根据https://github.com/Tianxiaomo/pytorch-YOLOv4 中demo_darknet2onnx文件转onnx
3.转成MNN
二、onnx转换成MN
mnn编译:
https://github.com/alibaba/MNN.git
建议版本:
https://github.com/alibaba/MNN/archive/1.1.2.tar.gz
- 编译:
#mnn编译
mkdir build && cd build
cmake -DMNN_BUILD_CONVERTER=ON -D MNN_OPENCL=ON -D MNN_USE_SYSTEM_LIB=ON -D MNN_SEP_BUILD=OFF .. #生成转换工具 后边三个选项是编译GPU版本
make -j8
make install
- onnx→mnn:
#进入build目录
cd build
#模型zhuanhua
./MNNConvert -f ONNX --modelFile yolov3.onnx --MNNModel yolov3.mnn --bizCode MNN
当模型过大时:A protocol message was rejected because it was too big (more than 67108864 bytes)会报这个错误
解决方式:/tools/converter/source/onnx/OnnxUtils.cpp文件中添加:
google::protobuf::io::IstreamInputStream input(&fs);
google::protobuf::io::CodedInputStream codedstr(&input);
#加下面这一行,添加完重新编译就行
codedstr.SetTotalBytesLimit(512 * 1024 * 1024, 64 * 1024 * 1024);
三、模型推理
只有这一个文件,CMakeList中添加MNN和opencv的环境即可
后处理过程:对模型输出的格式进行解析。"boxes" -- [batch, num, 1, 4] ; "confs" -- [batch, num, num_classes]
工程地址: https://github.com/liujiaxing7/MNN-yolov3 支持CPU和GPU (若有帮助,可以star支持一下哟~)
./yolo.out path.mnn images.txt classes.txt
四、效果
以上是关于yolov3 MNN框架部署C++版的主要内容,如果未能解决你的问题,请参考以下文章