ONNX模型轉Openvino部署踩坑記錄
最近要使用openvino部署一個深度學習模型,模型主要是使用pytorch進行訓練,部署時首先轉為onnx模型,然後在將onnx模型轉為openvino進行部署,本文就記錄一下在onnx模型轉openvino時所遇到的坑以及解決辦法,未來有遇到新的問題會補充到本文。
1:openvino模型不支援動態shape的輸入和輸出
onnx模型轉openvino的第一個問題就是openvino不支援輸入和輸出的shape是動態的,而onnx是支援動態shape的輸入和輸出,onnx動態shape的設定是torch.export.onnx()中的dynamic_axes引數,具體使用方法不在多說。
2.openvino模型只支援一個輸入
這個問題還是比較麻煩的,onnx模型的支援多個輸入而openvino只支援單個輸入,openvino好像也只支援單個輸出,這個不太清楚也並未驗證,但是onnx可以確定的是支援多個輸入和輸出。
3.openvino並支援onnx所有的operator
openvino支援的onnx的operator可在https://docs.openvinotoolkit.org/latest/openvino_docs_MO_DG_prepare_model_Supported_Frameworks_Layers.html#onnx_supported_operators查詢,我當時沒有用openvino部署成功是因為我的模型中有LSTM,而openvino不支援onnx中使用了peephole的LSTM,雖然我用的是pytroch的LSTM介面而pytorch中並未說明LSTM是否使用了peephole,但是我的onnx模型並未成功轉成openvino,因此估計pytroch中的LSTM還是使用了peephole。
4.openvino模型不支援onnx模型中的if節點
這個問題著實難為我了好幾天,就是因為openvino不支援if語句,然後我吧程式碼中的所有if語句全部刪除了,但是刪除了if語句發現轉換的onnx模型中依然有if節點,最後發現是pytroch中的squeeze()運算元在轉換成onnx之後會產生If節點,具體可以看另外的一篇部落格https://blog.csdn.net/lhyyhlfornew/article/details/109562383。
5.載入openvino模型報錯tensor dynamic shape
這個報錯好像還是因為onnx模型中有些變數是動態shape的原因,我程式碼中有很多變數使用諸如view()方法或者其他需要維度的方法時沒有使用固定的資料而是使用tensor.size(),如a.view(b.size(0), b.size(1))這種寫法時就報錯了,但是當我改成a.view(5, 10)這種固定資料的寫法就不報錯了,因此我估計是onnx模型轉openvino時引數都需要直接固定下來而不是使用其他變數提供引數,openvino只支援靜態圖結構,所以為了避免出錯還是建議引數直接寫死。
目前遇到的onnx轉openvino坑就這幾個,後續有新的坑還會及時補充本文。
相關文章
- onnx模型轉openvino報錯nGraph does not support the following ONNX operations: If模型
- c# onnx模型部署:TensorRT、OpenVino、ONNXRuntime、OpenCV dnnC#模型OpenCVDNN
- ?踩坑指南——onnx系列
- Solr 部署與使用踩坑全記錄Solr
- Sentry 部署踩坑記
- sealos踩坑記錄
- strtotime 踩坑記錄
- DietPi踩坑記錄
- laravel踩坑記錄Laravel
- TP5_模型初始化_踩坑記錄模型
- pytorch模型(.pt)轉onnx模型(.onnx)的方法PyTorch模型
- node link 踩坑記錄
- ABP框架踩坑記錄框架
- Electron工程踩坑記錄
- gorm踩坑記錄(一)GoORM
- MySQL_踩坑記錄MySql
- Android Studio踩坑記錄Android
- Go json 踩坑記錄GoJSON
- TensorRT c++部署onnx模型C++模型
- ES6踩坑記錄
- React專案踩坑記錄React
- ijkplayer編譯踩坑記錄編譯
- Laravel7 踩坑記錄Laravel
- vuePC專案踩坑記錄Vue
- Next.js踩坑記錄JS
- uniapp開發踩坑記錄APP
- list複製踩坑記錄
- React同構踩坑記錄React
- 工作踩坑問題記錄
- Mac下Charles踩坑記錄Mac
- Taro 小程式 踩坑記錄
- Electron Built-in AutoUpdater 踩坑記錄UI
- H5 Video踩坑記錄H5IDE
- 微信小程式踩坑記錄微信小程式
- mybatis學習與踩坑記錄MyBatis
- Nginx反向代理minio踩坑記錄Nginx
- flutter前端入門踩坑記錄Flutter前端
- 新手學習laravel踩坑記錄Laravel