Hello,
There was an error: "RuntimeError: output 1 (3[ CPULongType{} ]) of traced region did not have observable data dependence with trace inputs; this probably indicates your program cannot be understood by the tracer."
encountered when I was exporting my mobilenetv3 decoder to onnx.
I suspect it is due to my input type since it contains multiple scales of image(list of tensors).
Here is my decoder
code snippet:
class MobilenetV3DecoderV1(nn.Module):
def __init__(
self,
num_ch_enc,
scales=range(4),
num_output_channels=1,
use_skips=True,
mode="mobilenet_v3_small",
) -> None:
super().__init__()
self.num_output_channels = num_output_channels
self.use_skips = use_skips
self.upsample_mode = "nearest"
self.scales = scales
self.num_ch_enc = num_ch_enc
if mode == "mobilenet_v3_large" or mode == "mobilenet_v3_large_quantize":
self.num_ch_dec = np.array([16, 32, 64, 128, 256])
elif mode == "mobilenet_v3_small":
self.num_ch_dec = np.array([4, 12, 20, 40, 80])
# decoder
self.convs = OrderedDict()
self.num_of_scales = len(scales)
for i in range(self.num_of_scales, -1, -1):
# upconv_0
num_ch_in = self.num_ch_enc[-1] if i == self.num_of_scales else self.num_ch_dec[i + 1]
num_ch_out = self.num_ch_dec[i]
self.convs[("upconv", i, 0)] = ConvBlock(num_ch_in, num_ch_out)
# upconv_1
num_ch_in = self.num_ch_dec[i]
if self.use_skips and i > 0:
num_ch_in += self.num_ch_enc[i - 1]
num_ch_out = self.num_ch_dec[i]
self.convs[("upconv", i, 1)] = ConvBlock(num_ch_in, num_ch_out)
for s in self.scales:
self.convs[("dispconv", s)] = Conv3x3(
self.num_ch_dec[s], self.num_output_channels
)
self.decoder = nn.ModuleList(list(self.convs.values()))
self.sigmoid = nn.Sigmoid()
def forward(self, input_features):
self.outputs = {}
# decoder
x = input_features[-1]
for i in range(self.num_of_scales, -1, -1):
x = self.convs[("upconv", i, 0)](x)
# if i != 0:
# x = self.convs[("attentionconv", i)](x, [input_features[i-1]])
# else:
x = [upsample(x)]
if self.use_skips and i > 0:
x += [input_features[i - 1]]
x = torch.cat(x, 1)
x = self.convs[("upconv", i, 1)](x)
if i in self.scales:
self.outputs[("disp", i)] = self.sigmoid(self.convs[("dispconv", i)](x))
return self.outputs
Is there a way can export it to onnx correctly?
Thanks in advance!