日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

onnx问题汇总

發布時間:2023/12/19 综合教程 46 生活家
生活随笔 收集整理的這篇文章主要介紹了 onnx问题汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

顯示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问题汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。