三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

085、YOLOv11改进-ONNX导出与图优化消除冗余节点——即插即用部署优化工具链,推理延迟降低15%

085、YOLOv11改进-ONNX导出与图优化消除冗余节点——即插即用部署优化工具链,推理延迟降低15%

085、YOLOv11改进-ONNX导出与图优化消除冗余节点——即插即用部署优化工具链,推理延迟降低15%

一个深夜的调试噩梦

凌晨两点,我盯着TensorRT的profiling结果发呆。YOLOv11模型在RTX 3090上跑出了23ms的延迟,比预期多了整整5ms。更诡异的是,ONNX模型里出现了大量形状为[1, 1, 1, 1]的Reshape节点,还有一堆看起来毫无意义的Cast操作。这些节点就像代码里的死代码——明明不干活,却硬生生拖慢了推理速度。

如果你也遇到过类似的问题——导出ONNX后模型体积膨胀、推理延迟莫名其妙增加、TensorRT优化效果不理想——那么这篇文章就是为你准备的。我会从实际调试经历出发,分享一套即插即用的ONNX导出与图优化工具链,帮你把YOLOv11的推理延迟压下去15%以上。

问题根源:YOLOv11的动态形状与冗余算子

YOLOv11的模型结构里藏着不少“坑”。比如动态形状处理时,PyTorch会自动插入一些形状推断相关的算子;再比如某些自定义模块(像我们之前加的注意力机制)在导出ONNX时会产生冗余的Transpose和Squeeze操作。

我踩过最深的坑是:YOLOv11的Detect头里有个torch.cat操作,PyTorch导出时会自动插入一个Shape节点来获取拼接维度,然后跟着一个Gather节点取具体数值。这些节点在静态形状推理时完全多余,但ONNX Runtime和TensorRT不会自动消除

← 返回列表