onnx问题汇总

摘要:
1.Onnx在Windows下使用时间节点:2021 7月,基于Anaconda,打开并激活pytorch环境,然后依次安装。Condainstall cconda fortenumpyprotobuf==3.16.0libprotobuf=3.16.0condainstall-cconda-fortonnx,然后安装onnxruntime或onnxruntimegpupipins
1.onnx在windows下使用

   时间节点:2021年7月

  基于Anaconda ,打开并激活pytorch环境,然后按顺序安装。

conda install -c conda-forge numpy protobuf==3.16.0 libprotobuf=3.16.0
conda install -c conda-forge onnx

  之后安装onnxruntime或者onnxruntime-gpu

pip install onnxruntime
或者
pip install onnxruntime-gpu

  俩者差别是运行环境不同。根据自己运行onnx模式环境,适合就好。

2.onnx 不支持roll 操作符。 

    问题时间节点:2021年7月

 尝试将swin Transformer模型从pytorch导给tensorflow。 运行遇到操作符不支持问题。

警告信息
Exporting the operator roll to ONNX opset version 9 is not supported. Please open a bug to request ONNX export support for the missing operator. 

 刚接触onnx,不懂。问朋友之后,可能是onnx支持的操作集问题

torch.onnx.export(……
                  opset_version=13)

  

还是报错。此处截取onnx的操作集适配机制,方便后来者理解该参数

_default_onnx_opset_version = 9
_onnx_main_opset = 13
_onnx_stable_opsets = [7, 8, 9, 10, 11, 12]
_export_onnx_opset_version = _default_onnx_opset_version


def _set_opset_version(opset_version):
    global _export_onnx_opset_version
    if opset_version == _default_onnx_opset_version:
        _export_onnx_opset_version = opset_version
        return
    if opset_version in _onnx_stable_opsets + [_onnx_main_opset]:
        _export_onnx_opset_version = opset_version
        return
    raise ValueError("Unsupported ONNX opset version: " + str(opset_version))

感兴趣的可以搜索pytorch源码。 默认=“9” 。 10,11,12 可以理解为基于9的代码拓展。

经朋友提醒,在pytorch的开源代码搜索到onnx

https://github.com/pytorch/pytorch/blob/master/test/onnx/test_pytorch_onnx_onnxruntime.py

  def test_roll(self):
        class M(torch.nn.Module):
            def __init__(self, shifts, dims):
                super(M, self).__init__()
                self.shifts = shifts
                self.dims = dims

            def forward(self, x):
                return torch.roll(x, self.shifts, self.dims)

  

  onnxruntime已经包含roll的测试。理论上应该支持该操作。尝试在pytorch的官网搜索 roll关键词

官方roll源码

import torch.onnx.symbolic_helper as sym_help
from torch.onnx.symbolic_helper import parse_args, _parse_arg, _unimplemented

@parse_args('v', 'is', 'is')
def roll(g, self, shifts, dims):
    assert len(shifts) == len(dims)

    result = self
    for i in range(len(shifts)):
        shapes = []
        shape = sym_help._slice_helper(g,
                                       result,
                                       axes=[dims[i]],
                                       starts=[-shifts[i]],
                                       ends=[maxsize])
        shapes.append(shape)
        shape = sym_help._slice_helper(g,
                                       result,
                                       axes=[dims[i]],
                                       starts=[0],
                                       ends=[-shifts[i]])
        shapes.append(shape)
        result = g.op("Concat", *shapes, axis_i=dims[i])

    return result

     onnx问题汇总第1张

      显示torch.onnx的操作集9 已经包含roll操作。
      搜索最新发布版本pytorch。
     1)到pytorch官网搜索最近12天发布的pyotorch版本 。页面显示只到pytorch1.9.0。

      2)尝试到pypi搜索已经发布打包好的pytorch 。 发现pytorch似乎没有类似tensorflow的tf_nightly预览版本 。

     最后,剩下直接修改调用roll的代码,更改为支持onnx的算子。或者编译最新版本pytorch源码。

      -------------------------------------------------------------------------------------------------------

     后面进一步搜索发现如下信息

4月20号提出roll转换问题 开发者说到已经记录会加入支持 。 

roll的onnx代码提交 显示5月17号议题经提交支持onnx导出“roll”。pytorch1.9是6月份发布。 所以,感觉基于1.9 还会显示不支持,有点滞后。

   后面再试试

torch.onnx.export的其余参数。

免责声明:文章转载自《onnx问题汇总》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mui实现移动端上拉加载下拉刷新功能spring boot拦截器中获取request post请求中的参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Debian下安装NFS服务器

1.安装非常简单。在Debian系统下安装NFS非常简单。在NFS服务器上执行以下命令以#aptitunstallnfs内核服务器(默认情况下将安装portmap和NFS-common)。在客户端,您需要安装:#intelligent installnfs commonportmap 2。启动、停止并重新启动服务器:启动服务#/etc/init。d/nfs内...

js 浏览器窗口 刷新、关闭事件

当前页面不会直接关闭,可以点击确定按钮关闭或刷新,也可以取消关闭或刷新。...

应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITYSYSTEM SID (S-1-5-18)授予针对 CLSID 为 {D63B10C5-BB46-4990-A94F-E40B9D520

此安全权限可以使用组件服务管理工具进行修改。根据APPID为{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}在注册表中找到HKEY_CLASSES_ROOTAppID{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}右键选择权限:加入SYSTEM用户并赋予完全控制权限:如果在注册表中没有权限添加用户,则需...

FoxMail 7.2的邮件存储目录修改

在FoxMail升级到7.x之后,邮件的存储路径和策略也发生了变化。许多朋友想更改FoxMail 7.2邮件的位置,因为他们担心重新安装系统时会占用磁盘C上的空间或丢失邮件。但是,FoxMail设置界面中没有提供相应的功能。我们该怎么办?同样,如果您想将邮件存储在磁盘D上,则需要执行以下操作:1.退出运行FoxMail,而不重新安装它。...

Qt HWND的句柄与QWidget的转换

QT中使用hwnd的句柄在编程中遇到问题。第三方API使用HWND类型作为正式参数,但该类型在QT中不可用。您可以执行以下操作来解决问题。首先声明:HWNDm in。h-hWnd;然后声明1public:2QWidget*newWidget;在In-cpp中,newWidget=QWidget::find//您需要将QWidget转换为HWND1QWidge...

nginx 获取请求头,URL参数

在nginx配置中,通过$arg_PARAMETER即可获得GET参数PARAMETER的内容。...