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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

onnx 测试_ONNX 现场演示教程

發(fā)布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 onnx 测试_ONNX 现场演示教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ONNX 現(xiàn)場演示教程

譯者:馮寶寶

本教程將向您展示如何使用ONNX將已從PyTorch導(dǎo)出的神經(jīng)模型傳輸模型轉(zhuǎn)換為Apple CoreML格式。這將允許您在Apple設(shè)備上輕松運行深度學(xué)習(xí)模型,在這種情況下,可以從攝像機直播演示。

什么是ONNX

ONNX(開放式神經(jīng)網(wǎng)絡(luò)交換)是一種表示深度學(xué)習(xí)模型的開放格式。借助ONNX,AI開發(fā)人員可以更輕松地在最先進的工具之間移動模型,并選擇最適合它們的組合。ONNX由合作伙伴社區(qū)開發(fā)和支持。 您可以訪問 onnx.ai,了解有關(guān)ONNX的更多信息以及支持的工具。

教程預(yù)覽

本教程將帶你走過如下主要4步:

環(huán)境準備

我們將在虛擬環(huán)境工作,以避免與您的本地環(huán)境沖突。在本教程中使用Python 3.6,但其他版本也應(yīng)該可以正常工作。

python3.6 -m venv venv

source ./venv/bin/activate

我們需要安裝Pytorch和 onnx->coreml 轉(zhuǎn)換器:

pip install torchvision onnx-coreml

如果要在iPhone上運行iOS樣式傳輸應(yīng)用程序,還需要安裝XCode。您也可以在Linux中轉(zhuǎn)換模型,但要運行iOS應(yīng)用程序本身,您將需要一臺Mac。

下載(或訓(xùn)練)Pytorch風(fēng)格裝換模型

在本教程中,我們將使用與pytorch一起發(fā)布的樣式傳輸模型,地址為https://github.com/pytorch/examples/tree/master/fast_neural_style。如果您想使用其他PyTorch或ONNX模型,請隨意跳過此步驟。

這些模型用于在靜態(tài)圖像上應(yīng)用樣式傳輸,并且實際上沒有針對視頻進行優(yōu)化以獲得足夠快的速度。但是,如果我們將分辨率降低到足夠低,它們也可以很好地處理視頻。

我們先下載模型:

git clone https://github.com/pytorch/examples

cd examples/fast_neural_style

如果您想自己訓(xùn)練模型,您剛剛克隆下載的的pytorch/examples存儲庫有更多關(guān)于如何執(zhí)行此操作的信息。目前,我們只需使用存儲庫提供的腳本下載預(yù)先訓(xùn)練的模型:

./download_saved_models.sh

此腳本下載預(yù)先訓(xùn)練的PyTorch模型并將它們放入saved_models文件夾中。 你的目錄中現(xiàn)在應(yīng)該有4個文件,candy.pth,mosaic.pth,rain_princess.pth和udnie.pth。

將PyTorch模型轉(zhuǎn)換至ONNX模型

現(xiàn)在我們已將預(yù)先訓(xùn)練好的PyTorch模型作為saved_models文件夾中的.pth文件,我們需要將它們轉(zhuǎn)換為ONNX格式。模型定義在我們之前克隆的pytorch/examples存儲庫中,通過幾行python我們可以將它導(dǎo)出到ONNX。在這種情況下,我們將調(diào)用torch.onnx._export而不是實際運行神經(jīng)網(wǎng)絡(luò),它將PyTorch作為api提供,以直接從PyTorch導(dǎo)出ONNX格式的模型。但是,在這種情況下,我們甚至不需要這樣做,因為腳本已經(jīng)存在Neural_style / neural_style.py,它將為我們執(zhí)行此操作。如果要將其應(yīng)用于其他模型,也可以查看該腳本。

從PyTorch導(dǎo)出ONNX格式本質(zhì)上是追蹤您的神經(jīng)網(wǎng)絡(luò),因此這個api調(diào)用將在內(nèi)部運行網(wǎng)絡(luò)“虛擬數(shù)據(jù)”以生成圖形。為此,它需要輸入圖像來應(yīng)用樣式轉(zhuǎn)移,其可以簡單地是空白圖像。但是,此圖像的像素大小很重要,因為這將是導(dǎo)出的樣式傳輸模型的大小。為了獲得良好的性能,我們將使用250x540的分辨率。如果您不太關(guān)心FPS,可以隨意采取更大的分辨率,更多關(guān)于風(fēng)格轉(zhuǎn)移質(zhì)量。

讓我們使用ImageMagick創(chuàng)建我們想要的分辨率的空白圖像:

convert -size 250x540 xc:white png24:dummy.jpg

然后用它來導(dǎo)出PyTorch模型用它來導(dǎo)出PyTorch模型:

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/candy.pth --cuda 0 --export_onnx ./saved_models/candy.onnx

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/udnie.pth --cuda 0 --export_onnx ./saved_models/udnie.onnx

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/rain_princess.pth --cuda 0 --export_onnx ./saved_models/rain_princess.onnx

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/mosaic.pth --cuda 0 --export_onnx ./saved_models/mosaic.onnx

你應(yīng)該得到4個文件,candy.onnx,mosaic.onnx,rain_princess.onnx和udnie.onnx,由相應(yīng)的.pth文件創(chuàng)建。

將ONNX模型轉(zhuǎn)換至CoreML模型

現(xiàn)在我們有了ONNX模型,我們可以將它們轉(zhuǎn)換為CoreML模型,以便在Apple設(shè)備上運行它們。為此,我們使用之前安裝的onnx-coreml轉(zhuǎn)換器。轉(zhuǎn)換器附帶一個convert-onnx-to-coreml腳本,上面的安裝步驟添加到我們的路徑中。遺憾的是,這對我們不起作用,因為我們需要將網(wǎng)絡(luò)的輸入和輸出標(biāo)記為圖像,并且雖然這是轉(zhuǎn)換器支持的,但只有在從python調(diào)用轉(zhuǎn)換器時才支持它。

通過查看樣式傳輸模型(例如在像Netron這樣的應(yīng)用程序中打開.onnx文件),我們看到輸入名為'0',輸出名為'186'。這些只是PyTorch分配的數(shù)字ID。我們需要將它們標(biāo)記為圖像。

所以讓我們創(chuàng)建一個python小文件并將其命名為onnx_to_coreml.py。這可以通過使用touch命令創(chuàng)建,并使用您喜歡的編輯器進行編輯,以添加以下代碼行。

import sys

from onnx import onnx_pb

from onnx_coreml import convert

model_in = sys.argv[1]

model_out = sys.argv[2]

model_file = open(model_in, 'rb')

model_proto = onnx_pb.ModelProto()

model_proto.ParseFromString(model_file.read())

coreml_model = convert(model_proto, image_input_names=['0'], image_output_names=['186'])

coreml_model.save(model_out)

現(xiàn)在來運行:

python onnx_to_coreml.py ./saved_models/candy.onnx ./saved_models/candy.mlmodel

python onnx_to_coreml.py ./saved_models/udnie.onnx ./saved_models/udnie.mlmodel

python onnx_to_coreml.py ./saved_models/rain_princess.onnx ./saved_models/rain_princess.mlmodel

python onnx_to_coreml.py ./saved_models/mosaic.onnx ./saved_models/mosaic.mlmodel

現(xiàn)在,您的saved_models目錄中應(yīng)該有4個CoreML模型:candy.mlmodel,mosaic.mlmodel,rain_princess.mlmodel和udnie.mlmodel。

在支持風(fēng)格轉(zhuǎn)換iOS App中運行CoreML模型

此存儲庫(即您當(dāng)前正在閱讀README.md的存儲庫)包含一個iOS應(yīng)用程序,可以在手機攝像頭的實時攝像頭流上運行CoreML樣式傳輸模型。

git clone https://github.com/onnx/tutorials

并在XCode中打開tutorials/examples/CoreML/NNXLive/ONNXLive.xcodeproj項目。我們建議使用XCode 9.3和iPhone X。在舊設(shè)備或XCode版本上可能會出現(xiàn)問題。

在Models/文件夾中,項目包含一些.mlmodel文件。我們將用我們剛剛創(chuàng)建的模型替換它們。

然后你在iPhone上運行應(yīng)用程序就可以了。點擊屏幕可切換模型。

結(jié)論

我們希望本教程能夠概述ONNX的內(nèi)容以及如何使用它來在框架之間轉(zhuǎn)換神經(jīng)網(wǎng)絡(luò),在這種情況下,神經(jīng)風(fēng)格的傳輸模型從PyTorch轉(zhuǎn)移到CoreML。

您可以隨意嘗試這些步驟并在自己的模型上進行測試。如果您遇到任何問題或想要提供反饋,請告訴我們。我們傾聽你的想法。

總結(jié)

以上是生活随笔為你收集整理的onnx 测试_ONNX 现场演示教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。