最近在把一个训练好的图像分类模型(ResNet-50)从PyTorch导出到ONNX,再用ONNX Runtime做推理。结果发现精度掉得很明显,Top-1从原来的92.3%掉到了88%左右。我试了用torch.onnx.export,设置opset_version=11,也试了用onnx-simplifier简化模型,但效果不大。有没有老哥遇到过类似的问题?是ONNX对某些算子(比如BatchNorm、AdaptiveAvgPool)的转换有精度损失,还是我导出时没开正确的优化选项?另外,如果后续要部署到移动端,这个精度掉得能接受吗?还是说应该直接上TFLite?求指点。
楼主
2026-07-18
PyTorch转ONNX后推理精度下降,是量化问题还是算子不支持?
请 登录 后发表回复
全部回复
共 183 条
2楼
4天前
这个思路不错,收藏了。
3楼
4天前
我之前也遇到过类似问题,后来换了方案。
4楼
3天前
这个精度掉得确实有点多,5个点不太像正常的转换误差。我之前导ResNet系列遇到过类似情况,最后发现是导出时模型没设eval模式,BatchNorm的running stats没冻结,导致ONNX里的BN参数和训练时对不上,你检查下是不是忘了model.eval()。另外AdaptiveAvgPool在opset 11下一般会转成GlobalAveragePool,如果输入尺寸固定的话问题不大,但如果动态shape可能会有坑。建议你先用onnxruntime和PyTorch在同一批输入上逐层对比输出,定位到具体是哪一层开始偏的,比盲目简化模型有效得多。量化的话你如果没主动做PTQ或QAT,导出本身是不会量化的,所以大概率不是量化问题。移动端部署的话88%和92%差距挺明显的,最好还是把原因找出来再决定,TFLite不一定能救回精度,反而多一层转换风险。