最近在看onnx转trt,nvidia没有给出直接的示例,只能自己摸索了

Myth丶恋晨 2021-06-12 20:36 572阅读 0赞

比较笨,还在看onnx-tensorrt,等有点心得的时候写个总结

蛋疼,一圈看下来 并没有类似于caffe自定义层的转换方式,

看了onnx-tensorrt,发现该工程暴力重写了nvonnxparser::IParser,似乎是所有层都实现了一把,

这样不想依赖这个项目的onnx插件实现的工作量将会很大,不像caffe的那么容易

好下面来总结一些onnx-tensorrt实现思路

关键点:

REGISTER_TENSORRT_PLUGIN

DEFINE_BUILTIN_OP_IMPORTER

ModelImporter

我来介绍一下这三个点的作用:

(1)REGISTER_TENSORRT_PLUGIN用于注册自定义层,在注册前需要实现nvinfer1::IPluginV2以及nvinfer1::IPluginCreator的自定义层子类

(2)DEFINE_BUILTIN_OP_IMPORTER用于实际运行过程中引入层定义,在onnx-tensorrt中,不仅引入自定义层如ResizeNearest,而且引入了其他的一些比较常见的层如Conv,似乎是将一些必要的层都实现了一遍

(3)ModelImporter是nvonnxparser::IParser子类,ModelImporter重写了父类的纯虚函数,对模型的每个layer根据node.op_type()(层类型)做了调用,调用处为ModelImporter::importNode函数

这样就比较清楚了,难怪onnx-tensorrt编译后会生成libnvonnxparser.so和libnvonnxparser_runtime.so放到/usr/lib下,这个就是想覆盖tensorrt下的相应的库。

但是蛋疼的是我并不想依赖这个工程,我只想依赖tensorrt,哎,菜是原罪

发表评论

表情:
评论列表 (有 0 条评论,572人围观)

还没有评论,来说两句吧...

相关阅读