yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。

这篇具有很好参考价值的文章主要介绍了yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

yolov7的 tensorrt8 推理, c++ 版本

环境

win10

vs2019

opencv4.5.5

cuda_11.4.3_472.50_win10.exe

cudnn-11.4-windows-x64-v8.2.4.15

TensorRT-8.2.1.8.Windows10.x86_64.cuda-11.4.cudnn8.2.zip

RTX2060推理yolov7, FP32 耗时 28ms  ,FP16 耗时 8ms,单帧对应总耗时30ms 和 10ms。

推理yolov7-tiny,FP32 耗时 8ms  ,FP16 耗时 2ms。

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

tensorrtx/yolov7 at master · wang-xinyu/tensorrtx · GitHubhttps://github.com/wang-xinyu/tensorrtx/tree/master/yolov7

GitHub - QIANXUNZDL123/tensorrtx-yolov7: yolov7-tensorrtxhttps://github.com/QIANXUNZDL123/tensorrtx-yolov7

python gen_wts_trtx.py -w yolov7-tiny.pt -o yolov7-tiny.wts

根据大神的攻略,通过yolov7-pt文件生成对应的 .wts 文件. 

然后根据如下c++代码生成对应的 .engine文件,把自带的engine文件覆盖掉。工程不用cmake了,直接改。 要修改对应自己的文件目录。

由于大神的代码不是win10 cuda11的,以下代码修改好了,只要修改对应目录就可以调通了.

 yolov7的win10tensorrt推理c++版本-C++文档类资源-CSDN文库https://download.csdn.net/download/vokxchh/87399894

注意:

需要修改自己对应的目录,显卡对应的算力。。

1.工程设置到release x64。

C:\TensorRT-8.2.1.8\lib 和 C:\opencv4.5.5\build\x64\vc15\bin的dll拷入exe所在文件目录。

2.包含目录:

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

3.库目录:

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

4.预处理器定义:

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

5. 显卡算力:yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

6.附加依赖项:

opencv_world455.lib
nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib
cublas.lib
cublasLt.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cudnn.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.lib
cusolverMg.lib
cusparse.lib
nppc.lib
nppial.lib
nppicc.lib
nppidei.lib
nppif.lib
nppig.lib
nppim.lib
nppist.lib
nppisu.lib
nppitc.lib
npps.lib
nvblas.lib
nvjpeg.lib
nvml.lib
nvrtc.lib
OpenCL.lib

---------------------------------------

win10系统环境变量:

 yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

 

7.修改config.h的USE_FP32 ,编译生成自己的FP32的exe。

USE_FP16 ,生成自己的FP16的exe。

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

8.然后运行FP32的exe,通过yolov7.wts生成FP32的engine文件,运行FP16的exe生成FP16的engine文件。

Project5.exe -s yolov7.wts  yolov7-fp32.engine v7

注意,FP32的engine生成时间短,FP16的engine生成时间长。要耐心等待。FP16生成等了50分钟。。

9.运行如下代码预测

Project5.exe -d yolov7-fp32.engine ./samples

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

//

以下是自己的数据集问题,官方的80分类pt文件它自己处理过了。

1.自己的数据集,需要把config.h的const static int kNumClass =80;改为自己的数量。

2.自己训练的pt,需要重参,不然tensorrt推理出来结果不对。

yolov7/reparameterization.ipynb at main · WongKinYiu/yolov7 · GitHub

# import
from copy import deepcopy
from models.yolo import Model
import torch
from utils.torch_utils import select_device, is_parallel
import yaml

device = select_device('0', batch_size=1)
# model trained by cfg/training/*.yaml
ckpt = torch.load('cfg/training/yolov7_training.pt', map_location=device)
# reparameterized model in cfg/deploy/*.yaml
model = Model('cfg/deploy/yolov7.yaml', ch=3, nc=80).to(device)

with open('cfg/deploy/yolov7.yaml') as f:
    yml = yaml.load(f, Loader=yaml.SafeLoader)
anchors = len(yml['anchors'][0]) // 2

# copy intersect weights
state_dict = ckpt['model'].float().state_dict()
exclude = []
intersect_state_dict = {k: v for k, v in state_dict.items() if k in model.state_dict() and not any(x in k for x in exclude) and v.shape == model.state_dict()[k].shape}
model.load_state_dict(intersect_state_dict, strict=False)
model.names = ckpt['model'].names
model.nc = ckpt['model'].nc

# reparametrized YOLOR
for i in range((model.nc+5)*anchors):
    model.state_dict()['model.105.m.0.weight'].data[i, :, :, :] *= state_dict['model.105.im.0.implicit'].data[:, i, : :].squeeze()
    model.state_dict()['model.105.m.1.weight'].data[i, :, :, :] *= state_dict['model.105.im.1.implicit'].data[:, i, : :].squeeze()
    model.state_dict()['model.105.m.2.weight'].data[i, :, :, :] *= state_dict['model.105.im.2.implicit'].data[:, i, : :].squeeze()
model.state_dict()['model.105.m.0.bias'].data += state_dict['model.105.m.0.weight'].mul(state_dict['model.105.ia.0.implicit']).sum(1).squeeze()
model.state_dict()['model.105.m.1.bias'].data += state_dict['model.105.m.1.weight'].mul(state_dict['model.105.ia.1.implicit']).sum(1).squeeze()
model.state_dict()['model.105.m.2.bias'].data += state_dict['model.105.m.2.weight'].mul(state_dict['model.105.ia.2.implicit']).sum(1).squeeze()
model.state_dict()['model.105.m.0.bias'].data *= state_dict['model.105.im.0.implicit'].data.squeeze()
model.state_dict()['model.105.m.1.bias'].data *= state_dict['model.105.im.1.implicit'].data.squeeze()
model.state_dict()['model.105.m.2.bias'].data *= state_dict['model.105.im.2.implicit'].data.squeeze()

# model to be saved
ckpt = {'model': deepcopy(model.module if is_parallel(model) else model).half(),
        'optimizer': None,
        'training_results': None,
        'epoch': -1}

# save reparameterized model
torch.save(ckpt, 'cfg/deploy/yolov7.pt')

以上yolov7的重参。

# import
from copy import deepcopy
from models.yolo import Model
import torch
from utils.torch_utils import select_device, is_parallel
import yaml

device = select_device('0', batch_size=1)
# model trained by cfg/training/*.yaml
ckpt = torch.load('best-yolov7-tiny.pt', map_location=device)
# reparameterized model in cfg/deploy/*.yaml
model = Model('cfg/deploy/yolov7-tiny.yaml', ch=3, nc=2).to(device)

with open('cfg/deploy/yolov7-tiny.yaml') as f:
    yml = yaml.load(f, Loader=yaml.SafeLoader)
anchors = len(yml['anchors'][0]) // 2

# copy intersect weights
state_dict = ckpt['model'].float().state_dict()
exclude = []
intersect_state_dict = {k: v for k, v in state_dict.items() if k in model.state_dict() and not any(x in k for x in exclude) and v.shape == model.state_dict()[k].shape}
model.load_state_dict(intersect_state_dict, strict=False)
model.names = ckpt['model'].names
model.nc = ckpt['model'].nc

# reparametrized YOLOR
for i in range((model.nc+5)*anchors):
    model.state_dict()['model.77.m.0.weight'].data[i, :, :, :] *= state_dict['model.77.im.0.implicit'].data[:, i, : :].squeeze()
    model.state_dict()['model.77.m.1.weight'].data[i, :, :, :] *= state_dict['model.77.im.1.implicit'].data[:, i, : :].squeeze()
    model.state_dict()['model.77.m.2.weight'].data[i, :, :, :] *= state_dict['model.77.im.2.implicit'].data[:, i, : :].squeeze()
model.state_dict()['model.77.m.0.bias'].data += state_dict['model.77.m.0.weight'].mul(state_dict['model.77.ia.0.implicit']).sum(1).squeeze()
model.state_dict()['model.77.m.1.bias'].data += state_dict['model.77.m.1.weight'].mul(state_dict['model.77.ia.1.implicit']).sum(1).squeeze()
model.state_dict()['model.77.m.2.bias'].data += state_dict['model.77.m.2.weight'].mul(state_dict['model.77.ia.2.implicit']).sum(1).squeeze()
model.state_dict()['model.77.m.0.bias'].data *= state_dict['model.77.im.0.implicit'].data.squeeze()
model.state_dict()['model.77.m.1.bias'].data *= state_dict['model.77.im.1.implicit'].data.squeeze()
model.state_dict()['model.77.m.2.bias'].data *= state_dict['model.77.im.2.implicit'].data.squeeze()

# model to be saved
ckpt = {'model': deepcopy(model.module if is_parallel(model) else model).half(),
        'optimizer': None,
        'training_results': None,
        'epoch': -1}

# save reparameterized model
torch.save(ckpt, 'best-yolov7-tiny-cc.pt')

以上yolov7-tiny的重参。

3.将yolov7_training.pt字段替换为自己训练完成的pt。nc=80字段改为自己的数量。

4.最终生成的pt文件再去转换wts,然后再转为engine。推理就准确了。

yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。,yolov7,tensorrt,c++,深度学习,人工智能

总结:

yolov7自己的数据集需要重参,不然tensorrt推理结果不对。

试了一下推理yolov5-7.0 ,自己数据集不要再重参,tensorrt推理结果也是正确的。文章来源地址https://www.toymoban.com/news/detail-550234.html

到了这里,关于yolov7的 TensorRT c++推理,win10, cuda11.4.3 ,cudnn8.2.4.15,tensorrt8.2.1.8。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 模型实战(11)之win10下Opencv+CUDA部署yolov5、yolov8算法

    测试环境:AMDRH7000+RTX3050+win10+vs2-10+opencv455+cuda11.7 关于opencv470+contrib+cuda的编译,可以详见:Win10下Opencv+CUDA联合编译详细教程 本文代码同时支持 yolov5 、 yolov8 两个模型,详细过程将在文中给出, 完整代码仓库最后给出 其中,yolov8在opencv-DNN + CUDA下的效果如下: 新建VS项目,名

    2024年02月16日
    浏览(43)
  • pytorch的安装(CUDA10.2+cuDNN8.3.3+torch1.10+​torchvision​0.11.1+python3.9)

    (已存网盘和硬盘,文件夹含三个文件) 本文基本逻辑是: 一、先根据电脑硬件的条件获取本身CUDA版本,据此以及表格比较得出cuDNN、torch、torchvision、python版本。 二、在 NVIDIA 官网下载CUDA和cuDNN,获取torch的下载链接,网页提供python3.9的下载链接 三、安装CUDA后,把cuDNN这个

    2024年01月17日
    浏览(85)
  • 使用Tensorrt部署,C++ API yolov7_pose模型

    虽然标题叫部署yolov7_pose模型,但是接下来的教程可以使用Tensorrt部署任何pytorch模型。 仓库地址:https://github.com/WongKinYiu/yolov7/tree/pose 系统版本:ubuntu18.4 驱动版本:CUDA Version: 11.4 在推理过程中,基于 TensorRT 的应用程序的执行速度可比 CPU 平台的速度快 40 倍。借助 TensorRT,您

    2024年02月05日
    浏览(44)
  • Win11基于WSL2安装CUDA、cuDNN和TensorRT(2023-03-01)

    如果有小伙伴看了2023-03-05更新,发现设置环境变量后运行cuda代码在链接过程中仍然会有报错问题啥的,那我这里建议,先别管2023-03-05更新的内容了,还是按照我博客里的安装步骤一步一步往下安装,用 sudo apt install nvidia-cuda-toolkit 命令去安装nvcc,也不需要配置环境变量了。

    2024年02月02日
    浏览(54)
  • ffmpeg tensorrt c++多拉流硬解码yolov5 yolov7 bytetrack 人流追踪统计 硬件编码推流直播

    ffmpeg拉流硬解码yolov5 bytetrack 人流追踪统计 硬件编码推流直播 编程语言C++,所以环境搭建可能比较复杂,需要有耐心。 CPU:I5 12490F GPU:RTX2060 6GB RAM:16x2 GB双通道 我测试运行可以25路(很极限了),20路比较稳,不会爆显存。 多路编码推流有个问题,就是NVIDIA对消费级显卡编

    2024年02月14日
    浏览(58)
  • 全网最新最全的基于Tensorflow和PyTorch深度学习环境安装教程: Tensorflow 2.10.1 加 CUDA 11.8 加 CUDNN8.8.1加PyTorch2.0.0

    本文编写日期是:2023年4月. Python开发环境是Anaconda 3.10版本,具体Anaconda的安装这里就不赘述了,基础来的。建议先完整看完本文再试,特别是最后安装过程经验分享,可以抑制安装过程中一些奇怪的念头,减少走弯路。 目录 1. NVidia驱动安装  2. 安装CUDA Toolkit 3. 安装Tensorfl

    2024年02月08日
    浏览(55)
  • Ubuntu20.04下载cuda11.3+cuDNN8.2.0,卸载cuda11.6+cuDNN8.4全记录【保姆级教程】

    CUDA(Compute Unified Device Architecture)是由NVIDIA公司推出的一种高性能并行计算架构。它利用GPU的并行处理能力,能够显著提高计算效率,尤其在科学计算、数据分析、深度学习等领域具有广泛应用。CUDA提供了一套编程模型和API,使开发人员能够利用GPU并行执行计算任务,从而获

    2024年02月05日
    浏览(96)
  • TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)

    新增手动插入 QDQ 节点以及手动 initialize 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 TensorRT下的模型量化,在其课程的基础上,所整理出的一些实战应用。 本次课程为 YOLOv7 量化实

    2024年02月08日
    浏览(43)
  • 快速解决深度学习推理过程cuda或tensorRT推理速度变慢的办法【亲测有效】

    各位朋友,好久不见,距离上一次更博已经过去三月有余。这段时间里博主基于LabVIEW探索开发了一些工具包,包括OpenVIN工具包、TensoRT工具包以及一键训练工具包,这几天会整理一下分享给大家,今天要和大家分享的是好多朋友私信问我的深度学习推理过程中cuda或tensorRT变慢

    2024年02月09日
    浏览(35)
  • win10 cuda11.8 和torch2.0 安装

    为了不污染现有开发环境,创建新的conda环境,这里我选择Python3.11版本 cuda 下载链接:cuda 去archve下找到11.8的版本 直接安装,首先提取在temp目录 安装好cuda后,会提示重启。重启完成后,安装成功。 cuda安装好之后,会新建两个环境变量 CUDA_PATH 以及 CUDA_PATH_V11_8 : 安装cuDN

    2024年02月04日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包