pointconv模型onnxruntime和tensorrt部署

部署运行你感兴趣的模型镜像

首先下载github仓库源代码:https://github.com/DylanWusee/pointconv_pytorch/tree/master
没有提供预训练模型,需要自己进行训练。

onnxruntime部署

onnx模型导出:

import torch
from model.pointconv import PointConvDensityClsSsg as PointConvClsSsg


num_class = 40
checkpoint = torch.load("./checkpoints/checkpoint.pth", weights_only=False)
classifier = PointConvClsSsg(num_class).cuda()
classifier.load_state_dict(checkpoint['model_state_dict'])

points, normals = torch.randn(32, 3, 1024).cuda(), torch.randn(32, 3, 1024).cuda()
torch.onnx.export(classifier, (points, normals), "model.onnx", opset_version = 13, 
                  input_names=["points", "normals"], output_names=["pred"], 
                  dynamic_axes = {"points": { 0: "batch_size"}, "normals": { 0: "batch_size"}, "pred": { 0: "batch_size"}})

onnx模型推理python脚本:

import numpy as np
import onnxruntime


npoints = 1024
onnx_session = onnxruntime.InferenceSession("model.onnx", providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])

input_name = []
for node in onnx_session.get_inputs():
    input_name.append(node.name)

cloud = np.loadtxt("./data/modelnet40_normal_resampled/bed_0610.txt", delimiter=",")
cloud = cloud[0:npoints, :]
cloud = cloud.reshape(1, npoints, 6)
cloud = cloud.transpose(0, 2, 1)
points, normals = cloud[:, :3, :], cloud[:, 3:, :]

inputs = {}
inputs['points'] = points.astype(np.float32)
inputs['normals'] = normals.astype(np.float32)

outputs = onnx_session.run(None, inputs)
print(np.argmax(outputs[0].squeeze()))

tensorrt部署

onnx模型转tensorrt模型:

trtexec --onnx=model.onnx -saveEngine=model.engine

tensorrt模型推理脚本:

import numpy as np
import tensorrt as trt
import common


logger = trt.Logger(trt.Logger.WARNING)
with open("model.engine", "rb") as f, trt.Runtime(logger) as runtime:
    engine = runtime.deserialize_cuda_engine(f.read())
context = engine.create_execution_context()
inputs, outputs, bindings, stream = common.allocate_buffers(engine)

npoints = 1024
cloud = np.loadtxt("./data/modelnet40_normal_resampled/bed_0610.txt", delimiter=",")
cloud = cloud[0:npoints, :]
cloud = cloud.reshape(1, npoints, 6)
cloud = cloud.transpose(0, 2, 1)
points, normals = cloud[:, :3, :], cloud[:, 3:, :]
np.copyto(inputs[0].host, points.ravel())
np.copyto(inputs[1].host, normals.ravel())

output = common.do_inference(context,engine=engine, bindings=bindings,inputs=inputs, outputs=outputs, stream=stream)
print(np.argmax(outputs[0].host))

您可能感兴趣的与本文相关的镜像

TensorRT-v8.6

TensorRT-v8.6

TensorRT

TensorRT 是NVIDIA 推出的用于深度学习推理加速的高性能推理引擎。它可以将深度学习模型优化并部署到NVIDIA GPU 上,实现低延迟、高吞吐量的推理过程。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

给算法爸爸上香

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

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

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

打赏作者

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

抵扣说明:

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

余额充值