onnx,pytorch
pytorch转onnx时的时候报错:
since it's not constant, please try to make things (e.g., kernel size) static if possible
主要是一些tensor的尺寸没有固定,可以通过pycharm在symbolic_helper.py
文件中的如下位置打断点。
elif value.node().kind() == 'prim::ListConstruct':if desc == 'is':for v in value.node().inputs():if v.node().kind() != 'onnx::Constant':raise RuntimeError("Failed to export an ONNX attribute '" + v.node().kind() +"', since it's not constant, please try to make ""things (e.g., kernel size) static if possible")
然后可以通过看变量v
就可以看到错误的位置:
782 defined in (%782 : Long(device=cpu) = onnx::Gather[axis=0](%779, %781) # /home/darknet/CM/8_instance_segmentation/AttaNet/AttaNet.py:82:0)
可以看到是在AttaNet.py
文件的第82行出错的。
对pytorch代码的修改
看AttaNet.py
文件的第82行:
batchsize, c_middle, h, w = q.size()q = F.avg_pool2d(q, [h, 1])
可以看到这里的avg_pool2d
操作采用的h
作为参数,这里因为h不是固定值引起的。修改方式:
用整数值代替单个变量采用:torch.tensor(feats.size(1)).item()多个变量采用:torch.tensor(probs.shape[:2]).tolist()