195、ONNX 导出 YOLOv11 的全流程源码解析:Trace、算子兼容性检查与动态 batch 设置

📅 2026/7/12 13:57:45
195、ONNX 导出 YOLOv11 的全流程源码解析:Trace、算子兼容性检查与动态 batch 设置
195、ONNX 导出 YOLOv11 的全流程源码解析:Trace、算子兼容性检查与动态 batch 设置一、一个让我熬夜到凌晨三点的bug去年秋天,我正给客户部署YOLOv11的工业检测模型。训练时mAP漂亮得不行,0.89,FP16推理也稳如老狗。结果导出ONNX时,torch.onnx.export直接给我甩了个RuntimeError——“Failed to export an ONNX attribute, since the IR version does not support non-static graph”。我盯着屏幕看了半小时,最后发现是动态batch设置时,一个reshape操作的shape推导出了问题。更坑的是,这个bug在静态batch下完全正常,只有动态batch才会触发。那天晚上我翻遍了PyTorch的ONNX导出源码,从Trace机制到算子注册表,最后定位到是YOLOv11的Detect模块里一个自定义的grid生成函数,用了torch.meshgrid的旧版API,ONNX的算子集不支持这种动态shape的网格生成。这个经历让我意识到,ONNX导出YOLOv11远不是跑个export脚本那么简单。今天这篇笔记,我会从Trace的底层原理讲起,手撕算子兼容性检查的每个细节,最后给出动态batch设置的完整方案。所有代码都经过反复验证,注释里我会直接告诉你哪里踩过坑。二、Trace机制:YOLOv11的"影子复制"到底在干什么ONNX导出的核心是Trace—