【问题标题】:Upsample ONNX gives INVALID_GRAPH when trying to convert bilinear layer to onnx尝试将双线性层转换为 onnx 时,上采样 ONNX 给出 INVALID_GRAPH
【发布时间】:2019-11-03 02:06:04
【问题描述】:

当我将在 Pytorch 上训练的双线性层的网络转换为 ONNX 时,出现以下错误

RuntimeError:[ONNXRuntimeError]:10:INVALID_GRAPH:加载模型 来自 test.onnx 失败:类型错误:输入类型“张量(int64)” 节点()中算子(Floor)的参数(11)无效。

我不确定为什么会发生此错误,我尝试从源代码构建 ONNX,但问题似乎仍然没有解决。

关于什么可能导致此错误的任何想法?或者如何解决这个问题?

繁殖方式-

from torch import nn

import torch
import torch.nn.functional as F
import onnxruntime as rt

class Upsample(torch.nn.Module):
    def forward(self, x):
        #l = nn.Conv2d(3, 3, kernel_size=1, stride=1, padding=1, bias=True)
        return F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=False)

m = Upsample()
v = torch.randn(1,3,128,128, dtype=torch.float32, requires_grad=False)

torch.onnx.export(m, v, "test.onnx")
sess = rt.InferenceSession("test.onnx")

【问题讨论】:

    标签: pytorch onnx


    【解决方案1】:

    此错误已在https://github.com/pytorch/pytorch/pull/21434 中修复(修复在functional.py 中),因此如果您安装pytorch 的nightly build,您应该能够得到它。

    但是,在同一个 PR 中,在双线性模式下转换 Upsample 已被禁用;原因是 Pytorch 的双线性模式与 ONNX 的不一致,而 Nearest 模式是目前唯一支持的模式。

    ONNX 中的上采样(现在称为调整大小)正在 opset 11 中进行更新,以支持与 https://github.com/onnx/onnx/pull/2057 中的 Pytorch 对齐的双线性模式,但尚未推送。

    【讨论】:

    • 好吧,我通过更改this file 中的mode_s="bilinear" 来构建Pytorch1.0.0 解决了上述问题,如issue 中所述,它似乎有效。但是我仍然不知道更改如何影响上采样的网络图,仍在验证结果。 @Lara 你试过这样的双线性上采样修复吗?感谢修复。
    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 2019-04-10
    • 2020-02-12
    • 1970-01-01
    • 2022-10-13
    • 2023-01-31
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多