位置: IT常识 - 正文

基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型(openvino使用)

编辑:rootadmin
基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型

推荐整理分享基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型(openvino使用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:openvino opencl,openvino使用,openvino使用,基于c++的opencv,openvino opencl,openvino开发语言,openvino教程,openvino开发语言,内容如对您有帮助,希望把文章链接给更多的朋友!

作者:英特尔物联网行业创新大使  王一凡 

目录

1.1 配置OpenVINO C++开发环境

1.2 下载并转换YoLOv5预训练模型

1.3 使用OpenVINO Runtime C++API编写推理程序

1.3.1 采集图像&图像解码

 1.3.2 YoLOv5-Seg模型的图像预处理

1.3.3 执行AI推理计算

1.3.4 推理结果进行后处理 

1.4 总结


        YOLOv5兼具速度和精度,工程化做的特别好,Git clone到本地即可在自己的数据集上实现目标检测任务的训练和推理,在产业界中应用广泛。开源社区对YOLOv5支持实例分割的呼声高涨,YOLOv5在v7.0中正式官宣支持实例分割。

        在前期文章中,已发布基于OpenVINO的YOLOv5模型的Python版本和C++版本推理程序,以及YOLOv5-Seg模型的Python版推理程序,本文主要介绍在C++中使用OpenVINO工具包部署YOLOv5-Seg模型,主要步骤有:

配置OpenVINO C++开发环境下载并转换YOLOv5-Seg预训练模型使用OpenVINO Runtime C++ API编写推理程序

下面,本文将依次详述

1.1 配置OpenVINO C++开发环境

        配置OpenVINO C++开发环境的详细步骤,请参考《在Windows中基于Visual Studio配置OpenVINO C++开发环境》。

1.2 下载并转换YoLOv5预训练模型

        下载并转换YOLOv5-seg预训练模型的详细步骤,请参考:《在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型》,本文所使用的OpenVINO是2022.3 LTS版。

首先,运行命令获得 yolov5s-seg ONNX 格式模型:yolov5s-seg.onnx:

python export.py --weights yolov5s-seg.pt --include onnx

然后运行命令获得yolov5s-seg IR格式模型:yolov5s-seg.xml和yolov5s-seg.bin,如下图所示

mo -m yolov5s-seg.onnx --compress_to_fp16

图 1-1  yolov5-seg ONNX格式和IR格式模型

1.3 使用OpenVINO Runtime C++API编写推理程序

一个端到端的AI推理程序,主要包含五个典型的处理流程:

采集图像&图像解码图像数据预处理AI推理计算对推理结果进行后处理将处理后的结果集成到业务流程

图 1-2  端到端的AI推理程序处理流程

1.3.1 采集图像&图像解码

OpenCV提供imread()函数将图像文件载入内存,

Mat cv::imread (const String &filename, int flags=IMREAD_COLOR)

         若是从视频流(例如,视频文件、网络摄像头、3D摄像头(Realsense)等)中,一帧一帧读取图像数据到内存,则使用cv::VideoCapture类,对应范例代码请参考OpenCV官方范例代码:opencv/samples/cpp at 4.x · opencv/opencv · GitHub。

基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型(openvino使用)

图 1-3 从视频流读取图像帧范例

 1.3.2 YoLOv5-Seg模型的图像预处理

        YOLOv5-Seg模型构架是在YOLOv5模型构架基础上,增加了一个叫“Proto”的小型卷积神经网络,用于输出检测对象掩码(Mask),如下图所示:

图 1-4  YOLOv5-Seg模型输出的代码定义

详细参看:https://github.com/ultralytics/yolov5/blob/master/models/yolo.py#L92

        由此可知,YOLOv5-Seg模型对数据预处理的要求跟YOLOv5模型一模一样,YOLOv5-Seg模型的预处理代码可以复用YOLOv5模型的C++预处理代码。

        另外,从代码可以看出YOLOv5-Seg模型的输出有两个张量,一个张量输出检测结果,一个张量输出proto,其形状可以用Netron打开yolov5-seg.onnx查知,如下图所示。

图 1-5  YOLOv5-Seg模型的输入和输出

        “output0”是检测输出,第一个维度表示batch size,第二个维度表示25200条输出,第三个维度表示有117个字段,其中前85个字段(0~84)表示:cx、cy、w、h、confidence和80个类别分数,后32个字段与”output1”做矩阵乘法,可以获得尺寸为160x160的检测目标的掩码(mask),如下图所示。

图 1-6  检测目标的掩码

1.3.3 执行AI推理计算

        基于OpenVINO Runtime C++ API实现AI推理计算主要有两种方式:一种是同步推理方式,一种是异步推理方式,本文主要介绍同步推理方式。

主要步骤有:

初始化Core类:ov::Core core;编译模型:core.compile_model()创建推理请求infer_request:compiled_model.create_infer_request()读取图像数据并做预处理:letterbox()将预处理后的blob数据传入模型输入节点:infer_request.set_input_tensor()调用infer()方法执行推理计算:infer_request.infer()获得推理结果:infer_request.get_output_tensor()

基于OpenVINO Runtime C++API的同步推理代码如下所示:

// -------- Step 1. Initialize OpenVINO Runtime Core -------- ov::Core core; // -------- Step 2. Compile the Model -------- auto compiled_model = core.compile_model(model_file, "GPU.1"); //GPU.1 is dGPU A770 // -------- Step 3. Create an Inference Request -------- ov::InferRequest infer_request = compiled_model.create_infer_request(); // -------- Step 4. Read a picture file and do the preprocess -------- cv::Mat img = cv::imread(image_file); //Load a picture into memory std::vector<float> paddings(3); //scale, half_h, half_w cv::Mat resized_img = letterbox(img, paddings); //resize to (640,640) by letterbox // BGR->RGB, u8(0-255)->f32(0.0-1.0), HWC->NCHW cv::Mat blob = cv::dnn::blobFromImage(resized_img, 1 / 255.0, cv::Size(640, 640), cv::Scalar(0, 0, 0), true); // -------- Step 5. Feed the blob into the input node of YOLOv5 ------- // Get input port for model with one input auto input_port = compiled_model.input(); // Create tensor from external memory ov::Tensor input_tensor(input_port.get_element_type(), input_port.get_shape(), blob.ptr(0)); // Set input tensor for model with one input infer_request.set_input_tensor(input_tensor); // -------- Step 6. Start inference -------- infer_request.infer(); // -------- Step 7. Get the inference result -------- auto detect = infer_request.get_output_tensor(0); auto detect_shape = detect.get_shape(); std::cout << "The shape of Detection tensor:"<< detect_shape << std::endl; auto proto = infer_request.get_output_tensor(1); auto proto_shape = proto.get_shape();std::cout << "The shape of Proto tensor:" << proto_shape << std::endl;1.3.4 推理结果进行后处理 

        后处理工作主要是从”detect ”输出张量中拆解出检测框的位置和类别信息,并用cv::dnn::NMSBoxes()过滤掉多于的检测框;从”detect ”输出张量的后32个字段与”proto”输出张量做矩阵乘法,获得每个检测目标的形状为160x160的掩码输出,最后将160x160的掩码映射回原始图像完成所有后处理工作。

        完整的代码实现,请下载:https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5seg_openvino_dGPU.cpp

1.4 总结

    配置OpenVINO C++开发环境后,可以直接编译运行yolov5seg_openvino_dGPU.cpp,结果如下图所示。使用OpenVINO Runtime C++ API函数开发YOLOv5推理程序,简单方便,并可以任意部署在英特尔CPU、集成显卡和独立显卡上。

图 1-7 运行结果

本文链接地址:https://www.jiuchutong.com/zhishi/295899.html 转载请保留说明!

上一篇:Vue--》探索Pinia:Vue状态管理的未来(vue .find)

下一篇:基于web的网上图书商城的设计与实现/图书购物系统(基于web的网站设计与实现)

  • 中央空调大金空调和格力空调哪个好(中央空调大金空调)(中央空调大金空调专卖)

    中央空调大金空调和格力空调哪个好(中央空调大金空调)(中央空调大金空调专卖)

  • 小米手环怎样与手机配对(小米手环怎样与手机连接)

    小米手环怎样与手机配对(小米手环怎样与手机连接)

  • 浏览boss直聘会被公司看到么(浏览boss直聘会被公司看到访问记录吗)

    浏览boss直聘会被公司看到么(浏览boss直聘会被公司看到访问记录吗)

  • 微信可以删除帐单吗(微信可以删除帐号吗)

    微信可以删除帐单吗(微信可以删除帐号吗)

  • 抖音二维码图片怎么扫(抖音二维码图片加好友)

    抖音二维码图片怎么扫(抖音二维码图片加好友)

  • 超话如何自动签到(超话怎样自动签到)

    超话如何自动签到(超话怎样自动签到)

  • 小米手环测卡路里准吗(小米手环测卡路里原理)

    小米手环测卡路里准吗(小米手环测卡路里原理)

  • 联想笔记本系统恢复按哪一个键(联想笔记本系统重装)

    联想笔记本系统恢复按哪一个键(联想笔记本系统重装)

  • excel的视图在哪里看到网格线设置(excel的视图哪里看到网格线设置)

    excel的视图在哪里看到网格线设置(excel的视图哪里看到网格线设置)

  • 微信摄像头怎么开美颜(微信里的摄像头怎么打开)

    微信摄像头怎么开美颜(微信里的摄像头怎么打开)

  • 苹果xr人脸识别不了(苹果xr人脸识别坏了能修吗)

    苹果xr人脸识别不了(苹果xr人脸识别坏了能修吗)

  • qmc0是什么格式(qmc2是什么格式)

    qmc0是什么格式(qmc2是什么格式)

  • apple京东自营店是真的吗(apple京东自营店和苹果官网有区别吗)

    apple京东自营店是真的吗(apple京东自营店和苹果官网有区别吗)

  • 京东买过的订单不见了(京东买过的订单没有了怎么办)

    京东买过的订单不见了(京东买过的订单没有了怎么办)

  • vivo云相册在哪里打开(vivox21云相册在哪)

    vivo云相册在哪里打开(vivox21云相册在哪)

  • vivo怎么设置桌面音乐(vivo怎么设置桌面软件大小)

    vivo怎么设置桌面音乐(vivo怎么设置桌面软件大小)

  • 华为圈圈怎么设置方法(华为那个圈圈怎么设置)

    华为圈圈怎么设置方法(华为那个圈圈怎么设置)

  • mate20pro怎么关闭后台(mate20pro怎么关闭华为智慧助手功能)

    mate20pro怎么关闭后台(mate20pro怎么关闭华为智慧助手功能)

  • nfc有必要一直开着吗(nfc用不用一直开着)

    nfc有必要一直开着吗(nfc用不用一直开着)

  • 华为手机拨号背景怎么设置(华为手机拨号背景图怎么取消)

    华为手机拨号背景怎么设置(华为手机拨号背景图怎么取消)

  • 如何在快手把喜欢的作品置顶到第一个(怎么把快手里的喜欢全部删除)

    如何在快手把喜欢的作品置顶到第一个(怎么把快手里的喜欢全部删除)

  • 打印机怎样维修(打印机坏了怎么维修)

    打印机怎样维修(打印机坏了怎么维修)

  • 华为p30辅助触控在哪(华为手机 辅助触控)

    华为p30辅助触控在哪(华为手机 辅助触控)

  • word添加绿色底纹(word怎么添加绿色底纹)

    word添加绿色底纹(word怎么添加绿色底纹)

  • vivo插上耳机还是外放(vivo插耳机后仍然外放)

    vivo插上耳机还是外放(vivo插耳机后仍然外放)

  • 电波钟怎么调整时间(电波钟怎么调整声音)

    电波钟怎么调整时间(电波钟怎么调整声音)

  • 如何正确使用好笔记本电池(如何正确使用好薪酬调查结果)

    如何正确使用好笔记本电池(如何正确使用好薪酬调查结果)

  • phpcms如何更换模板(phpcms怎么用)

    phpcms如何更换模板(phpcms怎么用)

  • 金税盘服务费全额抵扣是什么意思
  • 企业当年发放以往年度工资
  • 社保是当月计提当月的吗
  • 企业的主要经营哲学理念
  • 转账支票的密码盘
  • 审计调整有关损害的规定
  • 国有企业驻外人员待遇
  • 增值税发票可以抵扣多少
  • 车间报废产品改善方式
  • 发票超过2个月可以报销吗
  • 营改增后物业管理公司需要交营业税吗
  • 电子厂税负率一般是多少
  • 公司支付劳务派遣人员工资账务处理
  • 收到注册资金要交税吗
  • 取消票种核定需什么手续
  • 外币利润分配科目如何折算?
  • 税务申报系统叫什么
  • 出口退税率怎么算公式是什么
  • 17%和6%的票能直接抵扣吗?
  • 预定机票如何正常退票
  • 转让旧固定资产怎么做账
  • 投资预算的编制方法
  • 合伙人退伙资产清算需要交税吗
  • 车辆保险返点计算器
  • 小规模纳税人一个月能开多少税票
  • linux的sh
  • word文档打印时不打印批注
  • 如何在没有开瓶器的情况下开红酒
  • 企业股权融资方式有哪些
  • 公司一般账户不用了会怎么样
  • 诈骗犯查询
  • 使用mac什么意思
  • 商品从总仓到分拣要多久
  • 企业存货成本包括利润吗
  • 税务稽查补税
  • 缴费单位未按规定缴纳社会保险费的按日加收
  • 加拿大西北部的首都
  • yolov5输出参数
  • 正在求偶的凤头卡拉鹰,美国德克萨斯州 (© Alan Murphy/Minden Pictures)
  • 阿里通义千问官网
  • 论文精读分析报告
  • vue.js简介
  • 反向选择命令
  • 验证码php代码
  • diff比较文件不同输出
  • 小规模升级一般纳税人需要多久
  • 完善固定资产管理的方案
  • 总包缴税
  • 累计折旧怎么折
  • 收到的免税苗木发票必须当月抵扣么
  • 公司的财务报表能看出什么
  • 抵扣旅客运输服务申报时填哪行
  • MySQL数据库远程登录
  • 公司买卖股票亏损了 要交企业所得税吗
  • 销售退回采购方的会计分录
  • 公司注销实收资本账务处理
  • 低值易耗品一次性摊销会计科目
  • 会计的三个结转是什么
  • 编写高质量代码改善JAVA程序的151个建议
  • 电脑输入systeminfo
  • win7旗舰版开机
  • win10如何限制电脑上网权限
  • linux安装迅雷
  • spoffice是什么意思
  • linux和windows的区别?
  • 如何解决windows激活问题
  • unity的设置在哪里
  • 原生js实现仿苹果Siri语音助手特效动画
  • ubuntu系统怎么安装
  • perl keys
  • 微信小程序吸血鬼 豹女
  • unity签名
  • 守护进程和普通进程
  • Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
  • python数学语言
  • Django1.7+python 2.78+pycharm配置mysql数据库
  • 国家税务总局河南省税务平台
  • 如何打印高速公路电子发票
  • 一般纳税人开红字发票怎么报税
  • 黔西南州医疗保险报销比例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设