c++实现yolov5的OpenVINO部署

注意,在以下整个过程中,出现python错误提示缺少什么模块,就使用pip install 该模块!!!否则无法进行!!!

主要参考:
https://gitee.com/avBuffer/yolov5_cpp_openvino?_from=gitee_search#git%E9%A1%B9%E7%9B%AE%E4%BD%BF%E7%94%A8

1、首先进行模型训练

yolov5下载地址:https://github.com/ultralytics/yolov5

yolov5的模型训练参考:https://github.com/wudashuo/yolov5

2、将模型训练得到.pt格式文件转换成.onnx格式文件

参考:https://github.com/ultralytics/yolov5/issues/251

在yolov5主目录下运行以下命令:

python models/export.py --weights yolov5s.pt --img 640 --batch 1

出现以下图示情况说明.pt格式文件转换成.onnx格式文件成功,会看到在yolov5主目录下多了yolov5s.onnx等文件
在这里插入图片描述

转换完成后可以使用Netron:https://github.com/lutzroeder/netron.git 进行可视化.对于陌生的模型,该可视化工具对模型结构的认识有很大的帮助。
在这里插入图片描述

3、onnx格式转换OpenVINO的xml和bin格式

首先需要安装OpenVINO,可以参考我的另外一篇博客:Ubuntu18安装OpenVINO https://blog.csdn.net/qq_40700822/article/details/115707156

安装完成后运行如下脚本实现.onnx模型到.xml.bin模型的转换。

python /opt/intel/openvino/deployment_tools/model_optimizer/mo_onnx.py --input_model yolov5.onnx  --output_dir /home/inbc
踩坑案例:

如果执行完后可能会一直报错,并无法生成.xml.bin模型:
在这里插入图片描述
需要修改yolov5 yolov5/models/export.py文件中的opset_version设置把12改为10,即:

 torch.onnx.export(model, img, f, verbose=False, opset_version=10, input_names=['images'],
                          output_names=['classes', 'boxes'] if y is None else ['output'],
                          dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'},  # size(1,3,640,640)
                                        'output': {0: 'batch', 2: 'y', 3: 'x'}} if opt.dynamic else None)

然后重新执行一下命令:

python models/export.py --weights yolov5s.pt --img 640 --batch 1  

导出成功,就可以看到主目录下已经生成了yolov5.onnx文件了。

然后在执行命令:

python /opt/intel/openvino/deployment_tools/model_optimizer/mo_onnx.py --input_model yolov5.onnx  --output_dir /home/inbc
踩坑完毕

看到一下画面就说明.xml.bin文件导出成功了。

在这里插入图片描述

运行成功之后会获得.xml.bin文件,.xml.binOpenVINO中的模型存储方式。

获得了yolov5s.xmlyolov5s.bin就可以进行c++实现yolov5的OpenVINO部署了。

4、c++实现yolov5的OpenVINO部署

1、首先下载大佬做的部署:

https://github.com/fb029ed/yolov5_cpp_openvino
先测试一下大佬的代码是否可用。

直接编译demo中的cpp文件即可:

cd demo
mkdir build
cd build
cmake ..
make

编译完成后就可以直接运行程序了:

./detect_test

出现一下图像说明环境搭建的还算比较成功:
在这里插入图片描述

2、好了,可以把自己训练好的.pt模型转换为.onnx模型,进而在转换为.xml.bin再在demo中使用。

我用yolov5训练好的模型文件名为last_1000.pt

模型转换过程见上文。

1、修改main.cpp

首先需要修改main.cpp文件中的文件路径(大约在第6行,我这里使用的是last_1000.xml):

#include "detector.h"

int main(int argc, char const *argv[])
{
    Detector* detector = new Detector;
    string xml_path = "../res/last_1000.xml";
    detector->init(xml_path,0.1,0.5);
    /*

更改测试图片的路径,大约在程序的第28行左右:

    waitKey(1);
    }
    */
    Mat src = imread("../res/32.png");
    Mat osrc = src.clone();
    resize(osrc,osrc,Size(640,640));
    vector<Detector::Object> detected_objects;
    auto start = chrono::high_resolution_clock::now();
    detector->process_frame(src,detected_objects);
2、修改detector.cpp

这里需要修改测试对象的种类,需要修改第15行左右的item_size为6,因为我的模型只训练了一个对象,所以是1+5=6item_size=n+5其中n为你模型训练的物品的种类。

const float *output_blob = blobMapped.as<float *>();
   //80个类是85,一个类是6,n个类是n+5
   //int item_size = 6;
   int item_size = 6;
    size_t anchor_n = 3;
    for(int n=0;n<anchor_n;++n)
        for(int i=0;i<net_grid;++i)
            for(int j=0;j<net_grid;++j)
            {

之后编译运行测试一下:

cd demo_02
mkdir build
cd build
cmake ..
make

编译成功后,生成了detect_test文件,直接执行该文件:

./detect_test

耗时间use 0.219407 s,(本人用的Vm的Ubuntu18虚拟机,分配了3个处理器)如果出现一下画面,那恭喜你!!就可以愉快的用C++使用yolov5的模型训练了。
接下来就可以在大佬的肩膀上仰望星空了( ̄▽ ̄)!
在这里插入图片描述

5、推理加速

1、使用核显GPU进行计算

在main.cpp的第86行左右。

_network =  ie.LoadNetwork(cnnNetwork, "CPU");

改为

_network =  ie.LoadNetwork(cnnNetwork, "GPU");

这样

如果OpenVINO环境配置设置无误程序应该可以直接运行.

检测环境是否配置无误的方法是运行:

cd /opt/intel/openvino/deployment_tools/demo
./demo_security_barrier_camera.sh

若成功运行则cpu环境正常.

./demo_security_barrier_camera.sh -d GPU 

运行正常则gpu环境运行正常.

2、使用openmp进行并行化

在推理之外的数据预处理和解析中存在大量循环,这些循环都可以利用openmp进行并行优化.

模型优化如定点化为int8类型
在模型转换时通过设置参数可以实现模型的定点化.

  • 5
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
### 回答1: YOLOv5是一种基于深度学习的目标检测算法,而OpenVINO是英特尔开发的用于神经网络模型优化和部署的工具集。 首先,YOLOv5可以在训练过程中生成模型权重,这些权重包含了检测目标的特征信息。然后,使用OpenVINO可以将YOLOv5训练得到的模型进行优化和部署。 在YOLOv5 c OpenVINO部署过程中,首先需要将YOLOv5的模型转换为OpenVINO支持的IR(Intermediate Representation)格式。这可以通过OpenVINO提供的Model Optimizer工具来完成,该工具可以将YOLOv5模型的权重和配置文件转换为OpenVINO可用的中间表示格式。 转换完成后,就可以使用OpenVINO进行模型的部署OpenVINO提供了一系列可以用于优化和加速神经网络的计算库和工具。例如,可以使用OpenVINO的Inference Engine库来加载和运行转换后的模型,并利用英特尔的硬件加速功能提高推理速度和效率。 此外,OpenVINO还提供了一些用于适配不同硬件平台的示例代码和优化技术。例如,可以使用OpenVINO的Hardware-Aware Optimizations工具来针对特定的硬件平台进行优化,以实现更好的性能表现。 总结来说,YOLOv5 c OpenVINO部署是将基于深度学习的目标检测算法YOLOv5转换为OpenVINO支持的中间表示格式,并使用OpenVINO进行模型的优化和部署。通过利用OpenVINO提供的硬件加速和优化技术,可以提高模型的推理速度和效率。 ### 回答2: YOLOv5是一个用于目标检测的深度学习模型,而OpenVINO是一种用于模型部署和优化的开源工具包。将YOLOv5模型部署OpenVINO中,可以提高模型的推理性能并适应不同的硬件环境。 首先,要将YOLOv5模型转换为OpenVINO支持的IR格式。IR(中间表示)格式是一种中间表达,能够将深度学习模型转换为可在不同硬件上执行的优化形式。可以使用OpenVINO提供的Model Optimizer工具来进行模型转换。该工具将根据模型的结构和权重生成IR文件。 接下来,在部署模型之前,需要选择适当的推理引擎。OpenVINO提供了多种推理引擎,例如CPU、GPU、VPU等。根据硬件环境的特性选择最优的推理引擎。 在进行实际的部署前,需要编写一个推理脚本来加载IR文件并执行推理操作。脚本需要指定输入图像、处理结果以及模型的基本参数,例如置信度阈值、IOU阈值等。可以使用OpenVINO提供的Python API来编写推理脚本。 最后,可以在硬件设备上运行推理脚本来进行目标检测。通过OpenVINO的优化,模型的推理速度可以得到明显的提升,并且可以在不同硬件环境中进行部署,如服务器、边缘设备等。 总之,将YOLOv5模型部署OpenVINO需要进行模型转换、选择推理引擎、编写推理脚本等步骤。这样可以提高模型的推理性能,并使其适应不同的硬件环境。 ### 回答3: YOLOv5是一个流行的目标检测算法,其在计算机视觉领域具有广泛的应用。OpenVINO是英特尔开发的一个工具套件,用于优化和部署深度学习模型。 YOLOv5-C是YOLOv5系列中的一个变种,其相对较小而轻量化,适合在资源受限的设备上进行部署OpenVINO可以用于将训练好的YOLOv5-C模型进行加速和优化,并将其部署到不同的设备上。 在使用OpenVINO部署YOLOv5-C模型时,首先需要使用OpenVINO的Model Optimizer工具将模型转换为OpenVINO可识别的格式。这个工具可以自动进行网络层级别的优化和压缩,以减少模型的大小和计算量。 转换完成后,可以使用OpenVINO的Inference Engine进行模型推理。Inference Engine是一个优化的推理引擎,可以在各种硬件设备上高效地运行深度学习模型。它提供了API和示例代码,使得在不同平台上进行部署变得更加简单和便捷。 通过使用OpenVINO部署YOLOv5-C模型,可以获得更高的推理性能和更低的延迟。这对于一些应用场景,如实时目标检测和视频分析,非常重要。此外,OpenVINO还支持边缘设备、嵌入式系统和云计算平台,使得模型可以在多种场景下灵活部署和应用。 总而言之,使用OpenVINO部署YOLOv5-C模型可以实现对模型的优化和加速,使得在各种设备上实现高效的目标检测应用成为可能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iNBC

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值