亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch如何轉onnx、torchscript

發布時間:2020-07-22 10:27:23 來源:億速云 閱讀:1205 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了Pytorch如何轉onnx、torchscript,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

前言

本文將介紹如何使用ONNX將PyTorch中訓練好的模型(.pt、.pth)型轉換為ONNX格式,然后將其加載到Caffe2中。需要安裝好onnx和Caffe2。

PyTorch及ONNX環境準備

為了正常運行ONNX,我們需要安裝最新的Pytorch,你可以選擇源碼安裝:

git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
mkdir build && cd build
sudo cmake .. -DPYTHON_INCLUDE_DIR=/usr/include/python3.6 -DUSE_MPI=OFF
make install
export PYTHONPATH=$PYTHONPATH:/opt/pytorch/build

其中 "/opt/pytorch/build"是前面build pytorch的目。

or conda安裝

conda install pytorch torchvision -c pytorch

安裝ONNX的庫

conda install -c conda-forge onnx

onnx-caffe2 安裝

pip3 install onnx-caffe2

Pytorch模型轉onnx

在PyTorch中導出模型通過跟蹤工作。要導出模型,請調用torch.onnx.export()函數。這將執行模型,記錄運算符用于計算輸出的軌跡。因為_export運行模型,我們需要提供輸入張量x。

這個張量的值并不重要; 它可以是圖像或隨機張量,只要它是正確的大小。更多詳細信息,請查看torch.onnx documentation文檔。

# 輸入模型
example = torch.randn(batch_size, 1, 224, 224, requires_grad=True)

# 導出模型
torch_out = torch_out = torch.onnx.export(model, # model being run
    example, # model input (or a tuple for multiple inputs)
    "peleeNet.onnx",
 verbose=False, # store the trained parameter weights inside the model file
 training=False,
 do_constant_folding=True,
 input_names=['input'],
 output_names=['output']) 

其中torch_out是執行模型后的輸出,通常以忽略此輸出。轉換得到onnx后可以使用OpenCV的 cv::dnn::readNetFromONNX or cv::dnn::readNet進行模型加載推理了。

還可以進一步將onnx模型轉換為ncnn進而部署到移動端。這就需要ncnn的onnx2ncnn工具了.

編譯ncnn源碼,生成 onnx2ncnn。

其中onnx轉換模型時有一些冗余,可以使用用工具簡化一些onnx模型。

pip3 install onnx-simplifier

簡化onnx模型

python3 -m onnxsim pnet.onnx pnet-sim.onnx

轉換成ncnn

onnx2ncnn pnet-sim.onnx pnet.param pnet.bin

ncnn 加載模型做推理

Pytorch模型轉torch script

pytorch 加入libtorch前端處理,集體步驟為:

Pytorch如何轉onnx、torchscript

以mtcnn pnet為例

# convert pytorch model to torch script
# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 12, 12).to(device)
# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(pnet, example)
# Save traced model
traced_script_module.save("pnet_model_final.pth")

C++調用如下所示:

#include <torch/script.h> // One-stop header.
#include <iostream>
#include <memory>
int main(int argc, const char* argv[]) 
{
 if (argc != 2) 
 {
 std::cerr << "usage: example-app <path-to-exported-script-module>\n";
 return -1;
 }

 // Deserialize the ScriptModule from a file using torch::jit::load().
 std::shared_ptr<torch::jit::script::Module> module = torch::jit::load(argv[1]);

 assert(module != nullptr);
 std::cout << "ok\n";
}

以上就是關于Pytorch如何轉onnx、torchscript的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗定市| 阳朔县| 大安市| 定襄县| 南乐县| 宁乡县| 紫金县| 孙吴县| 阜新市| 德昌县| 黎川县| 积石山| 鄯善县| 南丹县| 财经| 宣恩县| 晋城| 莱州市| 象州县| 龙岩市| 射洪县| 米林县| 清原| 乌兰察布市| 嘉祥县| 奎屯市| 南皮县| 团风县| 佳木斯市| 九江县| 巴林右旗| 榆树市| 水富县| 遂宁市| 太仓市| 青浦区| 比如县| 枝江市| 靖宇县| 思南县| 北辰区|