问题:
语义分割网络pspnet导出成onnx的时候报错
分析:
主要是ppm中使用了AdaptiveAvgPool2d
解决方案:
- onnx中最新的版本好像也是没有AdaptiveAvgPool2d的
- 因为pytorch是动态尺寸的,所以有AdaptiveAvgPool2d,首先要固定尺寸进行推理
- 将AdaptiveAvgPool2d替换成AvgPool2d
参考自:https://www.cnblogs.com/xiaosongshine/p/10750908.html
import torch as t
import math
import numpy as np
alist = t.randn(2,6,7)
inputsz = np.array(alist.shape[1:])
outputsz = np.array([2,3])
stridesz = np.floor(inputsz/outputsz).astype(np.int32)
kernelsz = inputsz-(outputsz-1)*stridesz
adp = t.nn.AdaptiveAvgPool2d(list(outputsz))
avg = t.nn.AvgPool2d(kernel_size=list(kernelsz),stride=list(stridesz))
adplist = adp(alist)
avglist = avg(alist)
print(alist)
print(adplist)
print(avglist)