手把手教你在Win10使用CPU和Openvino框架部署YOLOV7(C++版本)

本文面向深度学习初学者,详细介绍了如何在Windows环境下,利用OpenVINO 2022.1进行YOLOV7模型的C++部署。从环境配置、OpenVINO安装、模型导入到C++代码实现,每个步骤都有清晰的说明和常见问题解答。通过代码解读,解析了模型输出并进行了NMS和可视化操作,适合对CPU加速推理感兴趣的开发者参考。
摘要由CSDN通过智能技术生成

前言

本文面向深度学习的初学者,使用Liunx的同学可以自写CMakeLists使用。使用的模型结构为onnx,YOLOV7中的export.py自带了转换onnx的脚本。本文使用openvino加速cpu进行推理,适配了d6、e6、w6模型。

1.环境准备

  • windows 10
  • openvino 2022.1
  • Visual Studio 2022

2.安装OpenVINO

2.1 官网下载安装包

此处是openvino 2022官网地址,找到其中的Windows下C++ Runtime安装包,解压后一路默认安装。为了方便大家,提供了下载链接,下载第一个zip。后期可能会失效。在这里插入图片描述

2.2 Runtime文件

在这里插入图片描述

  • bin 动态链接库
  • include 头文件
  • lib 动态库的导出声明(也可以叫静态链接库)
  • 3rdparty 第三方库

安装完成后,相应安装路径会生成类似的文件目录。这里熟悉C++的朋友已经基本明白了,对于初学者,需要给大家解释一下这些文件的涵义。我们生成C++代码的时候需要引用Inlcude和lib,然后将bin中的dll复制到生成的程序路径下。

  • 注意复制plugins.xml文件和3rdparty下的tbb_debug.dll或tbb.dll
  • 还需要把include\ie也加入到引用目录
  • 确认好自己的版本DebugRelease,目前只支持x64下编译代码
  • 前期无法确认自己所需的DLL时,可把DebugRelease下所有文件都复制到程序根目录。

3.模型导入

不要加 --grid参数,会导致输出层变化,让openvino无法读取模型。end2end加了netron没看出效果。

  • python export.py --img-size 1280 1280 --weights yolov7-e6.pt

4.C++部署代码

Github代码路径 :https://github.com/BeCoolMaker/yolov7_cpp_openvino_win

4.1 记录一下几个踩过的坑

  • 意外重启程序,可能会导致plugins.xml丢失,导致模型无法加载。
  • yolov5中增大image size时,需要增大相应的grid,猜测可能v7也需要
  • 解析outputblob数据时,数组超限导致内存报错,一般是由于grid的设置有问题。

4.2 部署代码解读(查看github代码)

Step 1. 初始化
  • 注意是否缺乏依赖项
Step 2. 读取模型
  • 注意根目录下的plugins.xml是否存在,否则会报错
  • 导入onnx时batch设置为1,暂未测试多batch方案
Step 3. 设置为cpu推理,获取模型输入输出
  • GPU方案建议使用TensorRT,而非openvino
Step 4. 创建一个输入请求inference request
Step 5. 将Mat转换为openvino tensor
  • letterbox 将图像缩放至模型所需尺寸,边界用灰色缝补
  • openvino所需格式为归一化后的rgb图像
Step 6. 推理模型
Step 7. Process output
  • w6的模型输出是4层{160, 80, 40, 20},v7的模型输出是3层{80, 40, 20}
Step 7.1 解析模型输出
# yolov7.onnx
output_tensor get_shape{1, 3, 80, 80, 85}
output_tensor get_shape{1, 3, 40, 40, 85}
output_tensor get_shape{1, 3, 20, 20, 85}
  • 推理后的数据是一个一维数组,原始形状如上,我们的目标就是解析它
  • yolov7.pt是用的coco数据集其中有80类,加上xywh,conf就是85,数据格式为[x,y,w,h,边框的confidence,80类的置信度得分]
Step 8. NMS
Step 9. 可视化

5.运行结果

在这里插入图片描述

6. 参考项目

  • https://github.com/OpenVINO-dev-contest/YOLOv7_OpenVINO_cpp-python
  • https://github.com/fb029ed/yolov5_cpp_openvino
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值