亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

pytorch模型轉(zhuǎn)onnx模型的方法詳解

 更新時間:2022年08月30日 11:55:40   作者:掙扎的笨鳥  
很多時候有pytorch模型轉(zhuǎn)onnx模型的必要,比如用tensorRT加速的時候,下面這篇文章主要給大家介紹了關(guān)于pytorch模型轉(zhuǎn)onnx模型的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

學(xué)習(xí)目標

1.掌握pytorch模型轉(zhuǎn)換到onnx模型

2.順利運行onnx模型

3.比對onnx模型和pytorch模型的輸出結(jié)果

學(xué)習(xí)大綱

  • pytorch模型轉(zhuǎn)換onnx模型
  • 運行onnx模型
  • onnx模型輸出與pytorch模型比對

學(xué)習(xí)內(nèi)容

前提條件:需要安裝onnx 和 onnxruntime,可以通過 pip install onnx 和 pip install onnxruntime 進行安裝

1 . pytorch 轉(zhuǎn) onnx

pytorch 轉(zhuǎn) onnx 只需要一個函數(shù) torch.onnx.export

torch.onnx.export(model, args, path, export_params, verbose, input_names, output_names, do_constant_folding, dynamic_axes, opset_version)

參數(shù)說明:

  • model——需要導(dǎo)出的pytorch模型
  • args——模型的輸入?yún)?shù),滿足輸入層的shape正確即可。
  • path——輸出的onnx模型的位置。例如‘yolov5.onnx’。
  • export_params——輸出模型是否可訓(xùn)練。default=True,表示導(dǎo)出trained model,否則untrained。
  • verbose——是否打印模型轉(zhuǎn)換信息。default=False。
  • input_names——輸入節(jié)點名稱。default=None。
  • output_names——輸出節(jié)點名稱。default=None。
  • do_constant_folding——是否使用常量折疊(不了解),默認即可。default=True。
  • dynamic_axes——模型的輸入輸出有時是可變的,如Rnn,或者輸出圖像的batch可變,可通過該參數(shù)設(shè)置。如輸入層的shape為(b,3,h,w),batch,height,width是可變的,但是chancel是固定三通道。
    格式如下 :
    1)僅list(int) dynamic_axes={‘input’:[0,2,3],‘output’:[0,1]}
    2)僅dict<int, string> dynamic_axes={‘input’:{0:‘batch’,2:‘height’,3:‘width’},‘output’:{0:‘batch’,1:‘c’}}
    3)mixed dynamic_axes={‘input’:{0:‘batch’,2:‘height’,3:‘width’},‘output’:[0,1]}
  • opset_version——opset的版本,低版本不支持upsample等操作。
import torch
import torch.nn
import onnx

model = torch.load('best.pt')
model.eval()

input_names = ['input']
output_names = ['output']

x = torch.randn(1,3,32,32,requires_grad=True)

torch.onnx.export(model, x, 'best.onnx', input_names=input_names, output_names=output_names, verbose='True')

2 . 運行onnx模型

檢查onnx模型,并使用onnxruntime運行。

import onnx
import onnxruntime as ort

model = onnx.load('best.onnx')
onnx.checker.check_model(model)

session = ort.InferenceSession('best.onnx')
x=np.random.randn(1,3,32,32).astype(np.float32)  # 注意輸入type一定要np.float32!!!!!
# x= torch.randn(batch_size,chancel,h,w)


outputs = session.run(None,input = { 'input' : x })

參數(shù)說明:

  • output_names: default=None
    用來指定輸出哪些,以及順序
    若為None,則按序輸出所有的output,即返回[output_0,output_1]
    若為[‘output_1’,‘output_0’],則返回[output_1,output_0]
    若為[‘output_0’],則僅返回[output_0:tensor]
  • input:dict
    可以通過session.get_inputs().name獲得名稱
    其中key值要求與torch.onnx.export中設(shè)定的一致

3.onnx模型輸出與pytorch模型比對

import numpy as np
np.testing.assert_allclose(torch_result[0].detach().numpu(),onnx_result,rtol=0.0001)

如前所述,經(jīng)驗表明,ONNX 模型的運行效率明顯優(yōu)于原 PyTorch 模型,這似乎是源于 ONNX 模型生成過程中的優(yōu)化,這也導(dǎo)致了模型的生成過程比較耗時,但整體效率依舊可觀。

此外,根據(jù)對 ONNX 模型和 PyTorch 模型運行結(jié)果的統(tǒng)計分析(誤差的均值和標準差),可以看出 ONNX 模型的運行結(jié)果誤差很小、基本可靠。

內(nèi)容參考:https://zhuanlan.zhihu.com/p/422290231

總結(jié)

到此這篇關(guān)于pytorch模型轉(zhuǎn)onnx模型的文章就介紹到這了,更多相關(guān)pytorch模型轉(zhuǎn)onnx模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python requests.get帶header

    python requests.get帶header

    這篇文章主要介紹了python requests.get帶heade方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編小編過來看看吧
    2020-05-05
  • python分塊讀取大數(shù)據(jù),避免內(nèi)存不足的方法

    python分塊讀取大數(shù)據(jù),避免內(nèi)存不足的方法

    今天小編就為大家分享一篇python分塊讀取大數(shù)據(jù),避免內(nèi)存不足的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 如何用Python?實現(xiàn)景區(qū)安防系統(tǒng)

    如何用Python?實現(xiàn)景區(qū)安防系統(tǒng)

    本設(shè)計中,利用YOLO目標檢測算法、Openpose姿態(tài)識別算法、deepsort跟蹤算法、MSCNN人群密度估計算法實現(xiàn)了火災(zāi)監(jiān)測、吸煙監(jiān)測、行為安全監(jiān)測、人群密度監(jiān)測、口罩率監(jiān)測、人員定位監(jiān)測六大功能,對Python?實現(xiàn)景區(qū)安防系統(tǒng)感興趣的朋友一起看看吧
    2022-07-07
  • python 字符串和整數(shù)的轉(zhuǎn)換方法

    python 字符串和整數(shù)的轉(zhuǎn)換方法

    今天小編就為大家分享一篇python 字符串和整數(shù)的轉(zhuǎn)換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python數(shù)據(jù)序列化之pickle模塊

    Python數(shù)據(jù)序列化之pickle模塊

    這篇文章主要介紹了Python數(shù)據(jù)序列化之pickle模塊,pickle的本質(zhì)是將Python數(shù)據(jù)還原為內(nèi)存中的二進制數(shù)據(jù),供用戶轉(zhuǎn)移、儲存,更多詳細內(nèi)容,需要的小伙伴可以下面文章內(nèi)容
    2022-03-03
  • 淺談python中的面向?qū)ο蠛皖惖幕菊Z法

    淺談python中的面向?qū)ο蠛皖惖幕菊Z法

    下面小編就為大家?guī)硪黄獪\談python中的面向?qū)ο蠛皖惖幕菊Z法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Pytorch四維Tensor轉(zhuǎn)圖片并保存方式(維度順序調(diào)整)

    Pytorch四維Tensor轉(zhuǎn)圖片并保存方式(維度順序調(diào)整)

    這篇文章主要介紹了Pytorch四維Tensor轉(zhuǎn)圖片并保存方式(維度順序調(diào)整),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python程序打包exe報錯的幾種解決方法

    Python程序打包exe報錯的幾種解決方法

    本文主要介紹了Python程序打包exe報錯的幾種解決方法,文中通過幾種解決方法的介紹非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • django channels使用和配置及實現(xiàn)群聊

    django channels使用和配置及實現(xiàn)群聊

    本文主要介紹了django channels使用和配置及實現(xiàn)群聊,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 詳解如何用Python寫個聽小說的爬蟲

    詳解如何用Python寫個聽小說的爬蟲

    在路上經(jīng)常發(fā)現(xiàn)好多人都喜歡用耳機聽小說,同事居然可以一整天的帶著一只耳機聽小說。本文就用Python爬蟲實現(xiàn)下載聽小說tingchina.com的音頻,需要的可以參考一下
    2022-02-02

最新評論