Closed Tom-Teamo closed 6 months ago
你的理解是正确的,你也可以去实现自定义算子,然后导出时去注册自己实现的算子。
使用Pytorch
进行插件注入的代码在tensorrt_yolo/export/head.py
, PaddlePaddle
的代码在tensorrt_yolo/export/ppyoloe.py
。
好的,感谢。但是我在tensorRT的efficientNMS并没有见到这种写法,也没有搜到相关文档有写这个部分,想问一下这种Pytorch
插件注入的方法来源是哪里啊?
一般是直接在ONNX上做修改,类似于我在PPYOLOE
的处理方式。
在Pytorch中导出未实现的算子,可以使用torch.autograd.Functions进行封装。
我理解在Pytorch
中注册算子的做法,但是TensorRT EfficientNMS对这种写法并没有提及。我想请问的问题主要在于,TensorRT EfficientNMS
是如何支持g.op('TRT::EfficientNMS_TRT',...)
这种写法的?我没有搜到TensorRT EfficientNMS
会识别到注册的算子并优化的相关资料。不知道我说清楚没有
这个一搜就出来了,onnx tensorrt plugin
搜这个关键词,查如何在onnx注入tensorrt插件。
onnx-tensorrt 实现了FallbackPluginImporter
用于在其内部找不到ONNX节点转Plugin插件的定义时,尝试在TRT注册插件内寻找。
对于EfficientNMS的支持,代码中直接在onnx中使用了
'TRT::EfficientNMS_TRT'
去注册NMS
算子。按照我的理解,因为tensorRT官方已经有了该插件,后续执行的trtexec
命令会对这个算子进行优化,不知道理解是否准确?另外请问这部分代码的来源是哪里?