ncnn上部署yolov5

1、准备工作

  • U神的yolov5源码,下载地址
  • 自己的模型或者yolov5官网发布模型
  • linux系统(本在ubuntu18的docker环境下部署 )
  • ncnn源码,下载地址
  • opencv
  • protobuf 

  • opencv和protobuf必须安装否则在编译ncnn的时候,由于检测不到protobuf和opencv,onnx2ncnn工具不会被编译。

2、.pt文件转.onnx文件

将yolov5从torch框架转到ncnn上前需要用onnx工具先将.pt模型文件转化为.onnx文件,这里主要有两个中的步骤

1、python models/export.py --weights yolov5s.pt --img 640 --batch 1    #将.pt文件用onnx转化为.onnx文件
2、python -m onnxsim yolov5s.onnx yolov5s-sim.onnx   #onnxsim 精简模型

 

3、编译ncnn

1)、安装opencv

sudo apt install libopencv-dev

2)、编译protobuf-2.6.1

下载

wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz

解压后编译

cd protobuf-2.6.1
./configure
make -j
make check
sudo make install
sudo ldconfig

3)、编译ncnn

git clone https://github.com/Tencent/ncnn.git
cd ncnn
mkdir build && cd build
cmake ..
make
make install

4、onnx2ncnn(有坑)

步骤一   

cd ncnn/build/tools/onnx/

步骤二

./onnx2ncnn yolov5s-sim.onnx yolov5s.param yolov5s.bin #这里yolov5s-sim.onnx为“.pt文件转.onnx文件”生成的文件,输出yolov5s.param yolov5s.bin

这里会出现以下问题,这是由于ncnn不支持focus,这是focus模块转换的报错,我们需要手动修改生成的.param文件的参数。

可以用vim或者其他文本编辑器打开.param文件,该文件主要修改两个大的地方,如图所示:

第一处,修改不支持的层

第一处修改后:

这里主要是删除了不支持的层,并在ncnn中实现focus,删除10层 添加一层 减少了9层
添加的一层的输出可以根据下一层的输入填写,图中已标红,这里176的计算方法为原始层数185-10+1(添加的Yolov5Focus层),167是下一个卷积层的输入。

第二处 修改网络输出的shape,例如原图:

第二处修改后:

这里输出全部改为-1(修改位置为绿色框选的部分),否则回归会出来一堆bounding box,同时记住红色框出的字段,该字段为网络输出的name,在预测代码中,会根据该字段去结果,所以不同的网络需要修改此处。

5、修改yolov5的example代码,这里主要修改网络的输入和输出,输入为模型训练时image 的size,输出层name为第四步中红色框出的字段。

vim example/yolov5.cpp

6、重新编译example,在build/example目录下会生成yolov5的可执行文件,此时就可以测试了。

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值