pytorch模型转onnx再转tensorrt

前提条件:

pytorch模型文件(xxx.pt)

export_onnx.py

依赖库:

tensorrt 7.1.3

一、将torch模型转化为onnx模型

# 加载必要的依赖包
from modeling.deeplab import * 
import torch 
import torchvision 
import onnx 

# 定义加载原始模型的方法
def get_model(): 
    model = DeepLab(num_classes=4, backbone='mobilenet', output_stride=16,
    sync_bn=None, freeze_bn=False) 
    ckpt = torch.load('model_best.pth', map_location='cpu') 
    model.load_state_dict(ckpt['state_dict']) 
    model = model.cuda() 
    model.eval() 
    return model 

# 加载模型
model = get_model() 

# 配置onnx模型的节点名称,参数
input_names = ["input"] 
output_names = ["output"] 
example_tensor = torch.randn(1, 3, 320, 640, device='cuda') 
torch.onnx.export(model, example_tensor, "deeplab.onnx", verbose=True, 
opset_version=11, input_names=input_names, output_names=output_names) 

# 加载onnx模型 
onnx_model = onnx.load('deeplab.onnx') 

# 检查onnx模型是否正确导出
onnx.checker.check_model(onnx_model) 

二、使用onnx模型转化tensorrt模型

1.安装完tensorrt之后,使用tensorrt的工具trtexec,导出trt模型。

#该命令不会修改模型的精度类型 
sudo ./trtexec --onnx=alexnet.onnx --saveEngine=alexnet.trt 
#该命令会修改模型的精度类型为int8
sudo ./trtexec --onnx=alexnet.onnx --saveEngine=alexnet.trt --int8 

三、前后处理的重写

根据原算法的图像预处理方法和模型预测后结果的后处理方法,重新写一遍即可完成整个算法的部署迁移。

四、注意的细节

1.图像预处理尽量采用opencv直接读取图像,并对图像进行预处理。(一般情况需要将torchvisison的预处理方法改写成numpy的方法)

2.模型预测结果的后处理。(原算法中主要为torch类型的数组,而trt模型输出的结果一般为numpy类型,同样需要将处理方式从torch.tensor()修改为numpy类型)

3.模型转换完之后,模型预测时间大概在0.05s/帧,图像的前后处理也较为耗时,因此需要提升速度时,需全局考虑图像预处理操作和模型预测结果的后处理操作。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Simscape是一种基于物理建模的仿真软件,用于建立和模拟动态系统。它可以有效地对实际物理系统进行建模和仿真,如机械系统、电气系统、液压系统等。Simscape模型导出是指将建立的Simscape模型导出到其他工程软件或环境中继续使用的过程。 Simscape模型导出可以通过两种不同的方式实现。一种方式是将Simscape模型换为Simulink模型,然后再将Simulink模型导出到其他工程软件中。这种方法适用于那些只支持Simulink模型的软件平台,如MATLAB、LabVIEW等。通过这种方式,Simscape模型中的物理元件和连接关系将换为Simulink的信号和传输线,以便在其他软件环境中使用和分析。 另一种方式是将Simscape模型导出为代码文件,如C代码或C++代码。这种方式适用于那些需要直接控制硬件或进行实时仿真的应用场景。通过将Simscape模型导出为代码,可以在嵌入式系统或硬件控制器中运行,实现实时模拟和控制。 无论采用哪种方式,Simscape模型导出都需要进行一些配置和设置。首先,需要选择正确的导出选项和目标平台。然后,根据导出的要求对模型进行调整和优化,以确保导出后的模型可以正常运行并满足性能要求。最后,进行编译和生成可执行文件或代码的过程。在导出完成后,就可以将模型集成到其他工程软件或系统中,进行进一步的使用和分析。 总的来说,Simscape模型导出是一项重要的工作,它将Simscape模型扩展到更广泛的应用领域,并实现与其他工程软件和硬件平台的无缝集成。通过Simscape模型导出,我们可以更好地利用Simscape的强大功能,为各种实际系统建立准确的仿真模型,进行控制设计和性能分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值