## 前言
  首先感谢bubbliiiing博主提供的训练代码!
整个部署程序分为四步(C++):
1. 下载bubbliiiing博主项目更改predict 为 export_onnx
2. 更改文件夹nets下的yolo.py代码
3. 生成onnx文件
4. 下载此项目进行cmake&make
经测试,可以对(pytorch版本的)yolov4 -- yolov5 -- yolov5-6.1 yolov7 进行转换测试
由于bubbliiiing博主已经将网络结构和如何训练,我这边就不再过多的讲述如何训练。
## 如何使用?
  这里我以yolov7为例子向大家展示如何得到onnx以及运行onnx进行部署(bubbliiiing博主v4>>v5>>v5-6.1同理)
## Step1:
git clone https://github.com/bubbliiiing/yolov7-pytorch.git
cd yolov7-pytorch\
pip install -r requirements.txt\
vim predict.py
```
line24: mode = "export_onnx" ## predict >> 'export_onnx'
```
## Step2:
cd /nets\
vim yolo.py
```
line300 ----line316:
#---------------------------------------------------#
# 第三个特征层
# y3=(batch_size, 75, 80, 80)
#---------------------------------------------------#
out2 = self.yolo_head_P3(P3)
#---------------------------------------------------#
# 第二个特征层
# y2=(batch_size, 75, 40, 40)
#---------------------------------------------------#
out1 = self.yolo_head_P4(P4)
#---------------------------------------------------#
# 第一个特征层
# y1=(batch_size, 75, 20, 20)
#---------------------------------------------------#
out0 = self.yolo_head_P5(P5)
return [out0, out1, out2]
```
如下图为bubbliiiing博主源码生成的onnx输入输出信息截取

  bubbliiiing 这里的return[out0, out1, out2] 在经过"export_onnx"后并没有torch.cat,我们需要将输出的结果进行torch.cat操作,
在进行torch.cat操作之前需要将输出结果进行转换一下维度,详见如下代码:
```
out2 = self.yolo_head_P3(P3)
bs, _, ny, nx = out2.shape
# 这里的 no = 85[类别数nc(80) + 目标坐标和置信度(4+1)]
out2 = out2.view(bs, 3, 85, ny, nx).permute(0, 1, 3, 4, 2).contiguous() # no = 85
out2 = out2.view(bs * 3 * ny * nx, 85, 1).contiguous() # no = 85
# ---------------------------------------------------#
# 第二个特征层
# ---------------------------------------------------#
out1 = self.yolo_head_P4(P4)
bs, _, ny, nx = out1.shape
out1 = out1.view(bs, 3, 85, ny, nx).permute(0, 1, 3, 4, 2).contiguous() # no = 85
out1 = out1.view(bs * 3 * ny * nx, 85, 1).contiguous() # no = 85
# ---------------------------------------------------#
# 第一个特征层
# ---------------------------------------------------#
out0 = self.yolo_head_P5(P5)
bs, _, ny, nx = out0.shape
out0 = out0.view(bs, 3, 85, ny, nx).permute(0, 1, 3, 4, 2).contiguous() # no = 85
out0 = out0.view(bs * 3 * ny * nx, 85, 1).contiguous() # no = 85
output = torch.cat((out2, out1, out0))
output = output.permute(2, 0, 1)
# return [out0, out1, out2]
return output
```
  **使用上述的代码部分替代源代码的line300 至 line316:** 更换后得到的信息下图所示\

  大家在更换自己的数据集进行训练得到的权重进行pth2onnx时需要注意:上述代码注释部分的更换85(coco数据集的类别数+5),
在这里需要更换为自己的数据集的类别数再加上5。例如自己的数据集是10个类别(nc=10),那么这里的no=10+5 ;也就是85需要更改为15(no = nc + 5)
## Step3:
cd ..\
python predict.py \
这样我们就可以得到C++调用onnx需要的权重
## step4:
git clone https://github.com/kivenyangming/yolo-bubbliiiing-onnx.git \
cd yolo-bubbliiiing-onnx\
mkdir build\
cd build\
cmake ..\
cmake --build . (或者:make)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论






























收起资源包目录









共 5 条
- 1
资源评论


Mmnnnbb123
- 粉丝: 784
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大规模SLAM方法论解析
- 基于Python和Pandas的自动化数据表SQL生成工具-数据采集标准表结构解析CSV文件读取命令行参数处理-用于根据数据采集标准规范自动生成标准化的MySQL或Postgr.zip
- 网络游戏代理协议.docx
- 网络创业项目推广策划书.docx
- 高中数学第二章算法初步2.3.1条件语句课时素养评价(含解析)北师大版必修3.doc
- 电子商务专业求职信范文.docx
- 软件工程毕业论文模版.docx
- 机械制造及其自动化大学本科方案设计书.doc
- 高大模板支撑系统安全监理设施细则.doc
- 网络构建实验交换机端口隔离及端口安全.doc
- 网络广告代理协议书范本.doc
- 一个基于Nodejs和Webpack构建的第三方库快速开发脚手架工具-包含模块化配置模板自动化构建单元测试文档生成和发布流程-旨在帮助前端开发者高效创建和维护高质量开源组件库-技.zip
- 利润表excel模板.xls
- 版自考教材电子商务概论串讲免费下载鄙视收费.doc
- tkinter实现服务器上传下载文件软件001
- 2023年广电网络年终总结发言(3篇).docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
