1. 程式人生 > 其它 >onnx問題彙總

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關鍵詞

顯示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的其餘引數。