TensorRT源码上提供了一些python的samples,但是说好的提供onnx_packnet这个sample是onnx2trt自定义op的示例,但却没有写完整,不熟悉的人很难看懂。但其实Python版本的onnx2trt自定义op很简单,过程如下:
- 找到一个需要自定义op的C++插件(或者自己写)如:grid_sampler
- 使用cmake将上述grid_sampler相关文件生成C++库文件
libtensorrtplugins.so
- 在Python文件的最开头加上一句:
ctypes.CDLL("/home/tensorrt/libtensorrtplugins.so")
注意:模型中使用的不支持op的名字应该与注册的插件名字一致
如果不一致且模型难以重新训练,可直接对onnx模型里的node进行修改,或者修改插件注册名。