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

四、效果

在这里插入图片描述

版权声明:本文为CSDN博主「刘大壮_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ljx123_/article/details/121561603

刘大壮_

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【原理篇】一文读懂Mask RCNN

Mask RCNN 何凯明大神的经典论文之一,是一个实例分割算法,正如文中所说,Mask RCNN是一个简单、灵活、通用的框架,该框架主要作用是实例分割,目标检测&#xff0

One-stage Detection YOLO 与 SSD对比

作为在one-stage Detection领域中,存在两类领军级别的检测器,大部分的one-stage的检测器都或多或少能看到这两者的影子,这两个就是YOLO和SSD。 本文主要从思想上对比YOLO和