YOLOv7(目标检测)入门教程详解---C++部署

目录

一.前言

二.源码下载

三.环境安装

 opencv安装

四.ONNX模型导出

五.总结


一.前言

     我们在之前的yolov7入门教程中讲到了如何进行环境的安装和python终端运行:

       YOLOv7(目标检测)入门教程详解---环境安装

       YOLOv7(目标检测)入门教程详解---检测,推理,训练

     今天我们就来学习一下如何用c++部署yolov7

二.源码下载

  c++源码下载地址: https://github.com/UNeedCryDear/yolov7-opencv-dnn-cpp

  使用这个源码的要求是opencv 版本>=4.5.0

三.环境安装

 opencv安装

  竟然要使用opencv,那我们当然要安装opencv了,博主用的是VS 2019去跑的,那么我就说一下VS 2019是如何安装opencv的

   由于我们要用GPU去加速,那在c++中就要利用到opencv-cuda去加速,那么这个时候官网的opencv包是不够的,我们同时还需要opencv_contrib的包去编译opencv。那么我们先说要准备的软件。

VS(默认已有)

opencv4.5.5

opencv4.5.5_contrib

cmake

 opencv官网:Home - OpenCV

点击官网的library->release 

 

 选择opencv-4.5.5的github,并且点击tags

选择4.5.5,下拉,点击opencv4.5.5-vc14_vc15.exe进行下载

下载完之后就会得到opencv的文件夹

opencv_contrib的下载:GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules

点击tags,选择与opencv相对应的版本

 下载好之后我们把,opencv_contrib和opencv放在同一目录下

Cmake下载:CMake

 选择较新的版本下载即可,但是记得注意:安装的时候勾选加入path,并且生成cmake-gui。

接下来具体操作,我给大家推荐一个非常好的b站视频教程,按着教程做,问题就全部解决了

视频链接:OpenCV4.5.x+CUDA11.0.x源码编译与YOLOv5加速测试!_哔哩哔哩_bilibili 

过程强调:

1.在vs生成中,一定要选择release版本

2.路径一定要写对

3.cuda与cudnn版本一定要对应

4.如果已经vs已经生成好了newbuild,之后如果要重装cuda,那就得重新生成

四.ONNX模型导出

  我们之前用python跑yolov7的时候权重都是pt文件,那么在c++中我们用net去读取onnx模型从而进行yolo的推理,所以这里我们需要将pt模型转成onnx模型。

 其实很简单,yolov7源码中自带了export.py文件,通过export直接导出。但是在之前我们需要安装onnx模型的插件。这个时候我们打开yolov7,找到里面的requirments。

把这三个#去掉,然后保存,之后在按我之前的教程中说的,在终端用清华镜像重新下载一遍即可

   YOLOv7(目标检测)入门教程详解---检测,推理,训练

进入我们之前创建好的虚拟环境,输入以下指令

 

显示success则导出成功,我的建议是不要按照yolov7的官网指令去导出,很容易出错,直接指定一个pt权重路径即可,然后img-size要对应,默认是640 640 不用去修改了。

此时我们把模型放到我们的vs项目文件夹之下

然后在c++源码中该model路径

 

 然后运行进行推理测试:

你会发现用GPU反而要三秒一张照片,这是因为第一次调用GPU需要一定的时间,所以第一次时间比较长。我们试试看处理一百张照片的时间要多久

 我们可以看到,大概在15ms左右的样子,速度是还不错的

五.总结

   综合博主的这三篇教程:

YOLOv7(目标检测)入门教程详解---环境安装_螺丝工人的博客-CSDN博客

YOLOv7(目标检测)入门教程详解---检测,推理,训练_螺丝工人的博客-CSDN博客YOLOv7(目标检测)入门教程详解---C++部署

已经可以完全自如的利用yolov7进行推理,检测,和训练了。并且同时适用与python环境和c++环境。

  • 36
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
YoloV7是一个深度学习模型,主要用于目标检测。其中的head结构是YoloV7模型中非常重要的一部分,它负责将从骨干网络中提取的特征图转换为目标检测的输出。在本文中,我们将详细讨论YoloV7中的head结构。 1. YoloV7的head结构基础 在YoloV7中,head结构主要由三个部分组成:第一个部分是一个卷积层,用于进一步提取特征;第二个部分是一个全局平均池化层,用于将特征图压缩成一个特征向量;第三个部分是一个全连接层,用于将这个特征向量转换为目标检测的输出。 2. 卷积层 卷积层是head结构中最简单的一部分。它的主要作用是进一步提取特征。在YoloV7中,卷积层的输入是从骨干网络中提取的特征图,输出是一个新的特征图,它的深度通常比输入特征图要大。 卷积层的具体结构可以根据实际需求进行设计。在YoloV7中,卷积层通常采用3x3的卷积核,并且使用ReLU激活函数。 3. 全局平均池化层 全局平均池化层是head结构中非常重要的一部分。它的主要作用是将特征图压缩成一个特征向量,使得整个模型的输出更加紧凑。 在YoloV7中,全局平均池化层的输入是卷积层的输出特征图,输出是一个包含所有通道的平均值的向量。 4. 全连接层 全连接层是head结构中最后一部分。它的主要作用是将全局平均池化层输出的特征向量转换为目标检测的输出。 在YoloV7中,全连接层通常是一个非常大的矩阵,其维度通常是输出类别数目的几倍。在这个矩阵中,每一行对应一个类别,每一列对应一个边界框属性(如中心坐标、宽度、高度等)。每个元素的值表示该类别对应的边界框属性的权重。 5. 目标检测的输出 最终,head结构将全局平均池化层输出的特征向量转换为目标检测的输出。在YoloV7中,目标检测的输出通常是一个张量,其维度为(batch_size, num_boxes, num_classes+5),其中batch_size表示批次大小,num_boxes表示每个图像中的边界框数目,num_classes表示类别数目。 具体来说,对于每个边界框,目标检测的输出包括以下属性: - 中心坐标x和y - 边界框的宽度和高度 - 边界框的置信度 - 每个类别的概率分数 6. 总结 在YoloV7模型中,head结构是非常重要的一部分。它负责将骨干网络中提取的特征图转换为目标检测的输出。head结构主要由卷积层、全局平均池化层和全连接层组成。通过这些层的组合,YoloV7可以实现高效的目标检测,具有非常好的性能和精度。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

螺丝工人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值