0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TorchScript介绍及使用

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-05-10 11:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

TorchScript介绍

TorchScript是PyTorch模型推理部署的中间表示,可以在高性能环境libtorch(C ++)中直接加载,实现模型推理,而无需Pytorch训练框架依赖。torch.jit是torchscript Python语言包支持,支持pytorch模型快速,高效,无缝对接到libtorch运行时,实现高效推理。它是Pytorch中除了训练部分之外,开发者最需要掌握的Pytorch框架开发技能之一。

trace使用

Torchscript使用分为两个部分分别是script跟trace,其中trace是跟踪执行步骤,记录模型调用推理时执行的每个步骤,代码演示如下:
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)

运行结果如下:

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

跟踪执行结果

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是导出模型为中间IR格式文件,支持高性能libtorch C++部署,我们以torchvision中Mask-RCNN导出中间格式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<< output << std::endl;
}

上面代码来自官方测试程序,特别说明一下!

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发
    +关注

    关注

    0

    文章

    382

    浏览量

    42279
  • C++
    C++
    +关注

    关注

    22

    文章

    2139

    浏览量

    77508
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14958

原文标题:轻松学Pytorch之torchscript使用!

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【「Altium Designer 25 电路设计精进实践」阅读体验】+本书概览与内容特点介绍

    本文以AD 25版本为依托,介绍了AD25进行电子电路设计的方法,理论结合实践。 内容概览先来概览下本书的内容,看一本书的内容,从其目录就可以看到个大概本书分为以下章节,总体上来说还是按照先理论再
    发表于 02-14 15:56

    关于MT6901的直线DEMO介绍

    关于MT6901的直线DEMO介绍
    的头像 发表于 01-30 10:54 989次阅读
    关于MT6901的直线DEMO<b class='flag-5'>介绍</b>

    电磁触控屏介绍

    电磁触控屏介绍
    的头像 发表于 12-04 11:01 1165次阅读
    电磁触控屏<b class='flag-5'>介绍</b>

    关于NFC镍锌铁氧体片的介绍

    关于NFC镍锌铁氧体片的介绍
    的头像 发表于 12-04 10:52 636次阅读
    关于NFC镍锌铁氧体片的<b class='flag-5'>介绍</b>

    堆栈指针SP介绍

    SP 堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。 堆栈的介绍堆栈是一种按“先进后出”规律操作的存储结构。不同类型的处理器其堆栈的设计各不相同: SP寄存器作为堆栈指针。这种结构的特点是
    发表于 11-17 06:07

    电子电路当中 “地” 的介绍

    质量,除了这些地之外那么我们经常说的单点接地,分地与包地什么意思呢,下面就给大家介绍一下有关“地”的知识! 首先,我们了解一下什么是电源地,什么是信号地。 不管是电源还是信号,他都有一个回流路径,我们
    发表于 11-12 07:44

    关于系统链接脚本的介绍

    一、队伍介绍 本篇为蜂鸟E203系列分享第四篇,本篇介绍的内容是系统链接脚本。 二、如何实现不同的下载模式? 实现三种不同的程序运行方式,可通过makefile的命令行指定不同的链接脚本,从而实现
    发表于 10-30 08:26

    NICE端口相关信号简单介绍与配置

    以下对自定义指令情况下的NICE各个端口配置进行详细介绍。 由于NICE模块的输入端口由CPU发送相关信号,因此仅对NICE返回给CPU的端口进行介绍。 NICE返回给CPU的端口分为返回给
    发表于 10-30 07:57

    ExpeditionPCB中管脚交换介绍

    mentor PCB设计器件管脚网络交换介绍
    发表于 10-28 16:56 0次下载

    Montgomery模乘介绍

    Montgomery模乘介绍 Montgomery 模乘算法是最有效的大整数模乘算法之一它的一个显著特点是消除了mod n 的除法运算。Montgomery 算法的基本思想是计算 ,设n为k比特
    发表于 10-22 07:35

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

    是“$”,在命令提示符后边输入命令即可和系统进行交互操作。ubuntu默认的Shell是Bash(Bourne Again Shell)。Linux命令有很多,功能比较强大,下节我们简单介绍一些常用的命令。常用
    发表于 09-28 09:05

    电路、电流和电压介绍

    电子发烧友网站提供《电路、电流和电压介绍.pptx》资料免费下载
    发表于 09-18 17:26 19次下载

    BASiC_SiC分立器件产品介绍

    BASiC_SiC分立器件产品介绍
    发表于 09-01 16:16 0次下载

    紫外光固化技术介绍

    本文主要介绍了光的分类和紫外线的定义,以及紫外线的特性、应用和固化原理。
    的头像 发表于 06-30 17:27 2108次阅读
    紫外光固化技术<b class='flag-5'>介绍</b>

    常用电子元器件介绍

    电子发烧友网站提供《常用电子元器件介绍.pptx》资料免费下载
    发表于 06-24 16:54 57次下载