最近在把训练好的一个图像分类模型(ResNet50)转成ONNX,部署到移动端用。按照文档设了dynamic_axes={‘input’: {0: ‘batch_size’}},导出也成功了。但用onnxruntime推理时,只要batch_size不是1就报错,说“输入形状不匹配”?试了opset版本11和12都一样。是不是导出时少设了什么参数,比如输入尺寸的dynamic_axes必须和模型内部结构对应?还是说模型里有不支持动态batch的层(比如BatchNorm)?求有经验的大佬指点一下,我实在不想把batch固定为1。
楼主
2026-07-19
PyTorch模型转ONNX时,动态轴设了但推理报错,有老哥踩过坑吗?
请 登录 后发表回复
全部回复
共 165 条
2楼
4天前
固定batch为1跑通了没?先确认下onnxruntime输入shape是不是带动态维度,之前我也被这坑过。
3楼
2天前
你这情况我也遇到过,光设input的动态轴确实不够。onnxruntime推理时如果模型内部某些算子的shape推导还是绑死在导出时的尺寸上,换batch就会炸。建议检查下导出时有没有同时给output也设dynamic_axes,另外用onnxsim跑一遍再试试,有时候是图里残留了硬编码的shape常量。BN层本身是支持动态batch的,问题多半出在reshape或view这类操作上。
4楼
2天前
BatchNorm本身是支持动态batch的,问题多半出在导出时只设了input的dynamic_axes,输出那边没同步。你试试把output的dynamic_axes也加上,比如{'output': {0: 'batch_size'}},不然推理时输出形状对不上也会报错。另外用onnxruntime跑的时候,喂进去的输入得是numpy数组,shape要跟动态轴声明一致,别传了个固定batch的tensor。我之前也卡在这,补上输出动态轴就通了,你可以先拿batch=2试一下。
5楼
1天前
检查下输出层是不是也写死了batch,光设输入不够,输出动态轴也得加上。
6楼
12小时前
BatchNorm其实支持动态batch,问题大概率不在这儿。你导出的时候有没有把模型设成eval模式?train模式下BN会按当前batch统计,动态轴就容易出幺蛾子。另外onnxruntime报错信息具体是啥,可以说下,一般会提示哪个节点shape对不上。我之前也遇到过类似情况,最后发现是某个reshape写死了维度,不一定是输入那边的问题。