yolov5的工业化部署

本文介绍了如何将PyTorch的Yolov5模型转换为Torch Script,并在C++环境中进行部署。通过修改`export.py`文件以支持CUDA,然后将模型序列化,使用libtorch在C++中加载和执行模型。实现在C++上的推理,相比于Python CPU版本,性能有显著提升。
摘要由CSDN通过智能技术生成

背景

老规矩首先背景介绍一下,目的就是为了把pytorch的模型部署在ros上,而ros主要使用的C++,所以我本次的目的就是使用C++调用模型。为什么使用C++呢?当然是因为c++的性能更高了。

我的电脑配置:

  • I5处理器
  • 英伟达的1050ti显卡,4g显存
  • 运行内存8G
  • cuda10.2,cudnn7.6.5

pytorch模型

将 PyTorch 模型转换为 Torch Script

对于这步,ptorch的官网提供了两种方法,

  • 利用Tracing将模型转换为Torch Script
  • 通过Annotation将Model转换为Torch Script

将Script Module序列化为一个文件

不论是从上面两种方法的哪一种方法获得了ScriptModule,都可以将得到的ScriptModule序列化为一个文件,然后C++就可以不依赖任何Python代码来执行该Script所对应的Pytorch模型。 假设我们想要序列化前面trace示例中显示的ResNet18模型。要执行此序列化,只需在模块上调用 save并给个文件名。

yolov5的export.py文件

对于这个python文件,它是可以转为三种类型的文件,以默认的yolov5s.pt文件为例子,

  • 将模型pt文件的转换成对应的onnx文件后,即可使用netron工具查看其网络结构;
  • 将模型文件转为CoreML 文件,这个目的是为了部署到APP上(苹果推出的一种架构);
  • 将模型转为TorchScript文件,也就是为了方便我们使用libtorch调用

对于这部分代码,我修改了部分,主要是为了使用cuda。如果不修改的话,你在libtorch里面使用的话也就只能使用cpu了。
这部分我将True改为了False
model.model[-1].export = False # set Detect() layer export=True
下面两部分主要修改了使用设备部分
img = torch.zeros((opt.batch_size, 3, *opt.img_size)).to(device='cuda')
model = attempt_load(opt.weights, map_location=torch.device('cuda'))

至此,我们在python的编程的语言环境下工作已经完成。

在C++中加载你的Script Module

下载libtorch

我这里下载的是libtorch的cuda10.2版本,其目录结构如下所示:

libtorch/
  bin/
  include/
  lib/
  share/
  • lib/ 包含含链接的共享库,
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值