Yolov5 TensorRT推理加速(c++版)

Yolov5 不做赘述,目前目标检测里使用非常多的模型,效果和速度兼顾,性能强悍,配合TensorRT推理加速,在工业界可以说是非常流行的组合。

废话不多说,直接开整,以下使用的Tensor RT部署推理路线为:Pytorch-> ONNX -> TensorRT。

pytorch导出到onnx模型,可以非常方便,并且支持dynamic维度,配合netron工具,可以查看模型的网络结构,而TensorRT对ONNX的支持也非常完整,所以选择这一套流程,可以非常轻松的完成TensorRT的部署,同时,tensor RT提供官方的nms插件,使得推理代码可以免去编写nms的部分,极大提高效率。

GitHub仓库地址: gentlemanarch/yolov5-tensorrt

环境准备

  1. 系统:Ubuntu20.04LTS系统,或者tensorRT官方docker镜像:nvcr.io/nvidia/tensorrt:21.05-py3(推荐)

  2. TensorRT: 本篇使用的TensorRT7.2.3

  3. Yolov5: 截止2021.09.11的develop分支代码

  4. gcc: 9.3.0

  5. torch: 1.8.2

  6. onnx:1.10.1

  7. onnx-simplifier:0.3.6

pytorch模型训练

clone Yolov5的官方代码,按照教程训练得到pt权重文件。

github地址:

https://github.com/ultralytics/yolov5

Torch -> onnx

在导出到onnx之前,为了方便后续添加nms插件,需要对torch的模型输出做一些修改.

models/yolo.py:

将这部分代码

                
                if self.inplace:
                    y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy
                    y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
                else:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953
                    xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy
                    wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2)  # wh
                    y = torch.cat((xy, wh, y[..., 4:]), -1)
                z.append(y.view(bs, -1, self.no))

替换为:

                if self.inplace:
                    xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy
                    wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2).expand(bs, self.na, 1, 1, 2)  # wh
                    rest = y[..., 4:]
                    yy = torch.cat((xy, wh, rest), -1)
                    z.append(yy.view(bs, -1, self.no))
                else:
                    xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy
                    wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2)  # wh
                    y = torch.cat((xy, wh, y[..., 4:]), -1)

同时,这句:

return x if self.training else (torch.cat(z, 1), x)

替换为:

return x if self.training else torch.cat(z, 1)

最后如图所示:

models/export.py

改写后,官方的export.py已不适用,使用以下export代码:

'''
export y
  • 21
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: yolov5是一种目标检测算法,可以用于识别图像或视频中的物体。TensorRT是NVIDIA的一个高性能推理引擎,可以加速深度学习模型的推理过程。C++是一种编程语言,可以用于开发应用程序。因此,yolov5 tensorrt c++是指使用C++编写的应用程序,使用TensorRT加速yolov5模型的推理过程。 ### 回答2: Yolov5是一种目标检测模型,它是基于PyTorch深度学习框架开发的。Yolov5可以用于不同的任务,比如物体检测、行人检测、车辆检测等。这个模型可以在GPU上高效地进行训练,因此可以实现高速的目标检测。 TensorRT是NVIDIA公司推出的加速深度学习模型的工具。它可以将深度学习模型优化为高效的推理引擎,并且可以将模型部署到边缘设备等不同的硬件中。TensorRT可以帮助解决深度学习模型在实时场景中的高延迟问题,在低延迟的环境中进行预测,同时还能够减小模型的尺寸和功耗。 在使用Yolov5模型进行目标检测时,我们可以将模型转换为TensorRT引擎,从而实现更高效的运行。TensorRT可以根据设备的性能水平和资源限制,在模型中进行裁剪和优化,来达到最高效的计算性能。通过使用TensorRT优化的Yolov5模型,可以在CPU和GPU上实现更快的目标检测。 在实现Yolov5 TensorRT C方面,我们可以使用C++或者Cuda编程语言进行开发。我们可以使用C++TensorRT API或者通过CUDNN API,来对Yolov5模型进行优化和加速。同时,我们可以使用CUDA标准库、OpenCV和其他第三方库来实现针对自己应用的定制化目标检测解决方案。 ### 回答3: YOLOv5是一个高效的目标检测算法,其基于深度学习模型,并且使用了TensorRT加速运行时间,使得它可以在实时性要求较高的应用场景下得到广泛应用。而使用C++编码则可以提高效率,增加代码稳定性。 使用YOLOv5 TensorRT C++可以直接在C++环境下使用已经训练好的模型,而无需再使用Python的环境和框架来运行,减少了不必要的资源占用,提高了代码运行效率。在使用YOLOv5 TensorRT C++时,需要首先构建计算图,这样可以将图像数据和待检测的物体分成多个部分进行并行处理,提高处理速度。然后进行模型推理,将图像数据喂入模型中,获得物体检测的结果。随后可以进行后续的处理,例如筛选无用信息,精简结果,提高算法的判断能力。 在使用YOLOv5 TensorRT C++的过程中,可以使用一些性能优化技巧来提高程序效率。例如,可以使用CUDA技术,将计算推向GPU,利用GPU的并行计算优势,提高程序速度。还可以优化数据输入和输出的过程,减少内存使用和数据传输时间。此外,还可以在编写代码时使用一些优化技巧,例如缓存数据和增加对齐方式等,来提高程序效率。 总的来说,YOLOv5 TensorRT C++是一个高效而稳定的目标检测解决方案,可以在实现实时性要求较高的应用场景下得到广泛应用。它结合了深度学习TensorRT等技术,以及C++语言的高效编程和优化技巧等,使得程序可以更加高效、稳定和可维护,同时可以适应更多种类和规模的物体检测需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HUST_Smartdeng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值