TensorRT教程9:使用 Python parser API解析模型(重点)

使用 Python parser API解析模型(重点)

1、解析模型创建engine的10个基本步骤

step1:创建logger

step2:创建builder

step3:创建network

step4:创建parser

step5:使用parser解析模型填充network对象

step6:标记网络输出

step7:创建config并设置最大batchsize和最大工作空间

step8:创建engine

step9:序列化保存engine

step10:释放资源

2、parser解析caffe模型

#导入模块
import tensorrt as trt
#定义数据类型
datatype = trt.float32
#定义caffe模型路径
deploy_file = 'data/mnist/mnist.prototxt' #网络文件
model_file = 'data/mnist/mnist.caffemodel'#模型文件

#step1:创建logger:日志记录器, 此处我们抑制了信息 消息,并仅报告警告和错误
logger = trt.Logger(trt.Logger.WARNING)

#step2:创建builder、network、parser
with trt.Builder(logger) as builder, builder.create_network() as network, trt.CaffeParser() as parser:
    model_tensors = parser.parse(deploy=deploy_file, model=model_file, network=network, dtype=datatype)

#step3:创建config并设置最大batchsize和最大工作空间
with builder.create_builder_config() as config
    config.max_batch_size= 32
    config.max_workspace_size = 10 << 20
    
#step4:创建engine
engine = builder.build_cuda_engine(network,config)

#step5:序列化保存engine到planfile
with open(“sample.engine”, “wb”) as f:
    f.write(engine.serialize())

3、parser解析onnx模型

在 TensorRT 7.0 中,ONNX 解析器仅支持全维模式,这意味着您的网络定义必须使用 explicitBatch 标志集创建

#导入模块
import tensorrt as trt
#定义数据类型
datatype = trt.float32
#定义onnx模型路径
model_file = 'data/mnist/mnist.onnx'#模型文件

#step1:创建logger:日志记录器, 此处我们抑制了信息 消息,并仅报告警告和错误
logger = trt.Logger(trt.Logger.WARNING)

#step2:创建builder、network、parser
#创建的是动态shape网络
EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
with trt.Builder(logger) as builder, builder.create_network(EXPLICIT_BATCH) as network, trt.OnnxParser(network, logger) as parser:
with open(model_path, 'rb') as model:
    if not parser.parse(model.read()):
        for error in range(parser.num_errors):
            print(parser.get_error(error))

#step3:创建config并设置最大batchsize和最大工作空间
with builder.create_builder_config() as config
    config.max_batch_size= 32
    config.max_workspace_size = 10 << 20
    
#step4:创建engine
engine = builder.build_cuda_engine(network,config)

#step5:序列化保存engine到planfile
with open(“sample.engine”, “wb”) as f:
    f.write(engine.serialize())

4、parser解析UFF模型(tensorflow模型)

首先使用 UFF 转换器转换冻结 tensorflow的张量流模型到 UFF 文件

convert-to-uff frozen_inference_graph.pb
#导入模块
import tensorrt as trt
#定义数据类型
datatype = trt.float32
#定义uff模型路径
model_file = '/data/mnist/mnist.uff' 

#step1:创建logger:日志记录器, 此处我们抑制了信息 消息,并仅报告警告和错误
logger = trt.Logger(trt.Logger.WARNING)

#step2:创建builder、network、parser
with trt.Builder(logger) as builder, builder.create_network() as network, trt.UffParser() as parser:
    #注册网络输入输出
    parser.register_input("Placeholder", (1, 28, 28))
    parser.register_output("fc2/Relu")
    parser.parse(model_file, network)

#step3:创建config并设置最大batchsize和最大工作空间
with builder.create_builder_config() as config
    config.max_batch_size= 32
    config.max_workspace_size = 10 << 20
    
#step4:创建engine
engine = builder.build_cuda_engine(network,config)

#step5:序列化保存engine到planfile
with open(“sample.engine”, “wb”) as f:
    f.write(engine.serialize())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

米斯特龙_ZXL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值