立体匹配模型RAFT-Stereo的onnx导出与trt使用指南


通过将 RAFT-Stereo 模型转换为 ONNX 格式,我们能够在不同的推理引擎和硬件平台上高效地部署和运行该模型,而无需依赖原始的 PyTorch 环境。这为在实际应用中使用 RAFT-Stereo 算法提供了极大的灵活性,尤其是在需要考虑性能优化和跨平台兼容性的场景中。

接下来,我们将详细讲解以下几个方面:

  1. 如何将 RAFT-Stereo 模型导出为 ONNX 格式
  2. 如何在 Python 环境中使用导出的 ONNX 模型进行推理
  3. 如何导出trt模型

如何将 RAFT-Stereo 模型导出为 ONNX 格式

环境设置:

tensorrt= 10
pytorch=1.13.1
cuda=11.6
vs2019

在导出onnx之前,看一下推理的代码:

def forward(self, image1, image2, iters=12, flow_init=None, test_mode=False):
    """ 估计一对帧之间的光流 """

    # 将图像归一化到 [-1, 1] 范围
    image1 = (2 * (image1 / 255.0) - 1.0).contiguous()
    image2 = (2 * (image2 / 255.0) - 1.0).contiguous()

    # 运行上下文网络
    with autocast(enabled=self.args.mixed_precision):
        # 根据是否使用共享骨干网络选择不同的处理方式
        if self.args.shared_backbone:
            *cnet_list, x = self.cnet(torch.cat((image1, image2), dim=0), dual_inp=True, num_layers=self.args.n_gru_layers)
            fmap1, fmap2 = self.conv2(x).split(dim=0, split_size=x.shape[0]//2)
        else:
            cnet_list = self.cnet(image1, num_layers=self.args.n_gru_layers)
            fmap1, fmap2 = self.fnet([image1, image2])

        # 处理上下文网络的输出
        net_list = [torch.tanh(x[0]) for x in cnet_list]
        inp_list = [torch.relu(x[1]) for x in cnet_list]

        # 预先计算GRU的卷积层,以提高效率
        inp_list = [list(conv(i).split(split_size=conv.out_channels//3, dim=1)) for i,conv in zip(inp_list, self.context_zqr_convs)]

    # 选择相关性实现方法
    if self.args.corr_implementation == "reg": # 默认方法
        corr_block = CorrBlock1D
        fmap1, fmap2 = fmap1.float(), fmap2.float()
    elif self.args.corr_implementation == "alt": # 更节省内存的方法
        corr_block = PytorchAlternateCorrBlock1D
        fmap1, fmap2 = fmap1.float(), fmap2.float()
    elif self.args.corr_implementation == "reg_cuda": # 更快的reg版本
        corr_block = CorrBlockFast1D
    elif self.args.corr_implementation == "alt_cuda": # 更快的alt版本
        corr_block = AlternateCorrBlock

    # 创建相关性函数
    corr_fn = corr_block(fmap1, fmap2, radius=self.args.corr_radius, num_levels=self.args.corr_levels)

    # 初始化光流
    coords0, coords1 = self.initialize_flow(net_list[0])

    if flow_init is not None:
        coords
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一休哥※

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

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

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

打赏作者

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

抵扣说明:

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

余额充值