91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TorchScript介紹及使用

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-05-10 11:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

TorchScript介紹

TorchScript是PyTorch模型推理部署的中間表示,可以在高性能環(huán)境libtorch(C ++)中直接加載,實(shí)現(xiàn)模型推理,而無需Pytorch訓(xùn)練框架依賴。torch.jit是torchscript Python語言包支持,支持pytorch模型快速,高效,無縫對接到libtorch運(yùn)行時,實(shí)現(xiàn)高效推理。它是Pytorch中除了訓(xùn)練部分之外,開發(fā)者最需要掌握的Pytorch框架開發(fā)技能之一。

trace使用

Torchscript使用分為兩個部分分別是script跟trace,其中trace是跟蹤執(zhí)行步驟,記錄模型調(diào)用推理時執(zhí)行的每個步驟,代碼演示如下:
classMyCell(torch.nn.Module):
def__init__(self):
super(MyCell,self).__init__()
self.linear=torch.nn.Linear(4,4)


defforward(self,x,h):
new_h=torch.tanh(self.linear(x)+h)
returnnew_h,new_h


my_cell=MyCell()
x,h=torch.rand(3,4),torch.rand(3,4)
traced_cell=torch.jit.trace(my_cell,(x,h))
print(traced_cell)
traced_cell(x,h)
print(traced_cell.graph)

運(yùn)行結(jié)果如下:

MyCell(
original_name=MyCell
(linear):Linear(original_name=Linear)
)

跟蹤執(zhí)行結(jié)果

graph(%self.1:__torch__.MyCell,
%input:Float(3:4,4:1,requires_grad=0,device=cpu),
%h:Float(3:4,4:1,requires_grad=0,device=cpu)):
%19:__torch__.torch.nn.modules.linear.Linear=prim::GetAttr[name="linear"](%self.1)
%21:Tensor=prim::CallMethod[name="forward"](%19,%input)
%12:int=prim::Constant[value=1]()#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%13:Float(3:4,4:1,requires_grad=1,device=cpu)=aten::add(%21,%h,%12)#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%14:Float(3:4,4:1,requires_grad=1,device=cpu)=aten::tanh(%13)#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%15:(Float(3:4,4:1,requires_grad=1,device=cpu),Float(3:4,4:1,requires_grad=1,device=cpu))=prim::TupleConstruct(%14,%14)
return(%15)

script部分使用

script是導(dǎo)出模型為中間IR格式文件,支持高性能libtorch C++部署,我們以torchvision中Mask-RCNN導(dǎo)出中間格式IR為例,代碼演示如下:

importtorch
importtorchvisionastv

num_classes=3
model=tv.models.detection.maskrcnn_resnet50_fpn(
pretrained=False,progress=True,
num_classes=num_classes,
pretrained_backbone=True)
im=torch.zeros(1,3,*(1333,800)).to("cpu")
model.load_state_dict(torch.load("D:/gaobao_model.pth"))
model=model.to("cpu")
model.eval()
ts=torch.jit.script(model)
ts.save("gaobao.ts")

loaded_trace=torch.jit.load("gaobao.ts")
loaded_trace.eval()
withtorch.no_grad():
print(loaded_trace(list(im)))

最終得到torchscript文件,支持直接通過libtorch部署,其中通過torchscript C++部分加載的代碼如下:
#include//One-stopheader.
#include
#include
intmain(intargc,constchar*argv[]){
if(argc!=2){
std::cerr<"usage:example-app
";
return-1;
}

//DeserializetheScriptModulefromafileusingtorch::load().
torch::Modulemodule=torch::load(argv[1]);
std::vectorinputs;
inputs.push_back(torch::randn({4,8}));
inputs.push_back(torch::randn({8,5}));
torch::Tensoroutput=module.forward(std::move(inputs)).toTensor();

std::cout<std::endl;
}

上面代碼來自官方測試程序,特別說明一下!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    378

    瀏覽量

    42148
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77121
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    813

    瀏覽量

    14853

原文標(biāo)題:輕松學(xué)Pytorch之torchscript使用!

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    【「Altium Designer 25 電路設(shè)計(jì)精進(jìn)實(shí)踐」閱讀體驗(yàn)】+本書概覽與內(nèi)容特點(diǎn)介紹

    本文以AD 25版本為依托,介紹了AD25進(jìn)行電子電路設(shè)計(jì)的方法,理論結(jié)合實(shí)踐。 內(nèi)容概覽先來概覽下本書的內(nèi)容,看一本書的內(nèi)容,從其目錄就可以看到個大概本書分為以下章節(jié),總體上來說還是按照先理論再
    發(fā)表于 02-14 15:56

    關(guān)于MT6901的直線DEMO介紹

    關(guān)于MT6901的直線DEMO介紹
    的頭像 發(fā)表于 01-30 10:54 ?413次閱讀
    關(guān)于MT6901的直線DEMO<b class='flag-5'>介紹</b>

    電磁觸控屏介紹

    電磁觸控屏介紹
    的頭像 發(fā)表于 12-04 11:01 ?770次閱讀
    電磁觸控屏<b class='flag-5'>介紹</b>

    關(guān)于NFC鎳鋅鐵氧體片的介紹

    關(guān)于NFC鎳鋅鐵氧體片的介紹
    的頭像 發(fā)表于 12-04 10:52 ?412次閱讀
    關(guān)于NFC鎳鋅鐵氧體片的<b class='flag-5'>介紹</b>

    堆棧指針SP介紹

    SP 堆棧指針:8位寄存器,用來指示堆棧的位置,可由軟件修改。 堆棧的介紹堆棧是一種按“先進(jìn)后出”規(guī)律操作的存儲結(jié)構(gòu)。不同類型的處理器其堆棧的設(shè)計(jì)各不相同: SP寄存器作為堆棧指針。這種結(jié)構(gòu)的特點(diǎn)是
    發(fā)表于 11-17 06:07

    關(guān)于系統(tǒng)鏈接腳本的介紹

    一、隊(duì)伍介紹 本篇為蜂鳥E203系列分享第四篇,本篇介紹的內(nèi)容是系統(tǒng)鏈接腳本。 二、如何實(shí)現(xiàn)不同的下載模式? 實(shí)現(xiàn)三種不同的程序運(yùn)行方式,可通過makefile的命令行指定不同的鏈接腳本,從而實(shí)現(xiàn)
    發(fā)表于 10-30 08:26

    NICE端口相關(guān)信號簡單介紹與配置

    以下對自定義指令情況下的NICE各個端口配置進(jìn)行詳細(xì)介紹。 由于NICE模塊的輸入端口由CPU發(fā)送相關(guān)信號,因此僅對NICE返回給CPU的端口進(jìn)行介紹。 NICE返回給CPU的端口分為返回給
    發(fā)表于 10-30 07:57

    ExpeditionPCB中管腳交換介紹

    mentor PCB設(shè)計(jì)器件管腳網(wǎng)絡(luò)交換介紹
    發(fā)表于 10-28 16:56 ?0次下載

    Montgomery模乘介紹

    Montgomery模乘介紹 Montgomery 模乘算法是最有效的大整數(shù)模乘算法之一它的一個顯著特點(diǎn)是消除了mod n 的除法運(yùn)算。Montgomery 算法的基本思想是計(jì)算 ,設(shè)n為k比特
    發(fā)表于 10-22 07:35

    shell基本介紹及常用命令之shell基本介紹

    是“$”,在命令提示符后邊輸入命令即可和系統(tǒng)進(jìn)行交互操作。ubuntu默認(rèn)的Shell是Bash(Bourne Again Shell)。Linux命令有很多,功能比較強(qiáng)大,下節(jié)我們簡單介紹一些常用的命令。常用
    發(fā)表于 09-28 09:05

    電路、電流和電壓介紹

    電子發(fā)燒友網(wǎng)站提供《電路、電流和電壓介紹.pptx》資料免費(fèi)下載
    發(fā)表于 09-18 17:26 ?17次下載

    BASiC_SiC分立器件產(chǎn)品介紹

    BASiC_SiC分立器件產(chǎn)品介紹
    發(fā)表于 09-01 16:16 ?0次下載

    元器件及單元電路介紹-610頁

    元器件及單元電路介紹放大電路基礎(chǔ),電源電路,正弦波振蕩電路,調(diào)制與解調(diào)電路,混頻電路與變頻電路,集成運(yùn)算放大電路,數(shù)字集成電路等。 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評論支持一下哦~)
    發(fā)表于 05-19 15:41

    物理網(wǎng)智慧水務(wù)平臺介紹

    物理網(wǎng)智慧水務(wù)平臺介紹
    的頭像 發(fā)表于 05-13 08:38 ?580次閱讀
    物理網(wǎng)智慧水務(wù)平臺<b class='flag-5'>介紹</b>

    C語言的歷史及程序介紹

    電子發(fā)燒友網(wǎng)站提供《C語言的歷史及程序介紹.pdf》資料免費(fèi)下載
    發(fā)表于 04-09 16:10 ?0次下載