laugh12321 / TensorRT-YOLO

🚀 你的YOLO部署神器。TensorRT Plugin、CUDA Kernel、CUDA Graphs三管齐下,享受闪电般的推理速度。| Your YOLO Deployment Powerhouse. With the synergy of TensorRT Plugins, CUDA Kernels, and CUDA Graphs, experience lightning-fast inference speeds.
https://github.com/laugh12321/TensorRT-YOLO
GNU General Public License v3.0
720 stars 81 forks source link

[Question]: 关于EfficientNMS的支持 #22

Closed Tom-Teamo closed 6 months ago

Tom-Teamo commented 6 months ago

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

laugh12321 commented 6 months ago

你的理解是正确的,你也可以去实现自定义算子,然后导出时去注册自己实现的算子。 使用Pytorch进行插件注入的代码在tensorrt_yolo/export/head.py, PaddlePaddle的代码在tensorrt_yolo/export/ppyoloe.py

Tom-Teamo commented 6 months ago

好的,感谢。但是我在tensorRT的efficientNMS并没有见到这种写法,也没有搜到相关文档有写这个部分,想问一下这种Pytorch插件注入的方法来源是哪里啊?

laugh12321 commented 6 months ago

一般是直接在ONNX上做修改,类似于我在PPYOLOE的处理方式。 在Pytorch中导出未实现的算子,可以使用torch.autograd.Functions进行封装。

Tom-Teamo commented 6 months ago

我理解在Pytorch中注册算子的做法,但是TensorRT EfficientNMS对这种写法并没有提及。我想请问的问题主要在于,TensorRT EfficientNMS是如何支持g.op('TRT::EfficientNMS_TRT',...)这种写法的?我没有搜到TensorRT EfficientNMS会识别到注册的算子并优化的相关资料。不知道我说清楚没有

laugh12321 commented 6 months ago

这个一搜就出来了,onnx tensorrt plugin搜这个关键词,查如何在onnx注入tensorrt插件。

onnx-tensorrt 实现了FallbackPluginImporter 用于在其内部找不到ONNX节点转Plugin插件的定义时,尝试在TRT注册插件内寻找。