laugh12321/TensorRT-YOLO

[Question]: 关于EfficientNMS的支持

Closed this issue · 5 comments

对于EfficientNMS的支持,代码中直接在onnx中使用了'TRT::EfficientNMS_TRT'去注册NMS算子。按照我的理解,因为tensorRT官方已经有了该插件,后续执行的trtexec命令会对这个算子进行优化,不知道理解是否准确?另外请问这部分代码的来源是哪里?

你的理解是正确的,你也可以去实现自定义算子,然后导出时去注册自己实现的算子。
使用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注册插件内寻找。