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

    文章

    343

    浏览量

    40606
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72899
  • pytorch
    +关注

    关注

    2

    文章

    761

    浏览量

    12831

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

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

收藏 人收藏

    评论

    相关推荐

    TorchScript model与eager model的性能区别

    模型转换为TorchScript module。看一个具体的例子: 我们使用BERT(Bidirectional Encoder Representations from Transformers
    的头像 发表于 11-08 17:08 355次阅读
    <b class='flag-5'>TorchScript</b> model与eager model的性能区别

    TorchScript的重要特性和用途

    PyTorch支持两种模式:eager模式和script模式。eager模式主要用于模型的编写、训练和调试,script模式主要是针对部署的,其包含PytorchJIT和TorchScript(一种
    的头像 发表于 11-08 16:56 288次阅读

    DVP功能及应用介绍

    数字摄像头并行接口(DVP)用于捕获 CMOS 影像摄像机所输出的并行数据。本文主要就 DVP 功能简介以及应用介绍
    发表于 10-25 06:15

    AT32F4 DSP指令使用介绍

    AT32F4 DSP指令使用介绍AT32F4xx DSP指令使用介绍
    发表于 10-20 07:15

    SVPWM的原理及法则推导和控制算法介绍

    包含SVPWM的算法介绍,基本原理,以及详细的公式推导,详细的图表示意,是初学FOC,准备自己手写FOC库或者理解FOC算法的工程师的有利手册,手册中也简单介绍了SVPWM与SPWM的内在联系与区别。读者可自行推导公式后与手册结果进行对照。
    发表于 10-07 09:13

    开关电源基本原理与设计介绍

    开关电源基本原理与设计介绍(PPT)
    发表于 09-28 06:30

    有源功率因数校正技术介绍

    本书系统地介绍了功率因数校正电路的原理和应用技术。书中详细介绍了单相功率因数校正电路原理及控制方法(包括CCM单相Boost 型功率因数校正电路、CRM单相Boost型功率因数校正电路、交错并联
    发表于 09-19 07:12

    pytorch模型转换需要注意的事项有哪些?

    ,并且可以更积极地进行优化。 支持什么格式的pytorch模型? 答:Sophon的PyTorch模型编译工具BMNETP只接受PyTorch的JIT模型JIT模型(TorchScript模型
    发表于 09-18 08:05

    yolov5s_v6.1_3output.torchscript.pt模型auto_cali一键量化工具执行报错的原因?

    --include torchscript 得到 yolov5s_v6.1_3output.torchscript.pt文件 执行 ./gen_int8bmodel_nntc.sh BM1684 报错,参见
    发表于 09-18 08:01

    yolov5模型onnx转bmodel无法识别出结果如何解决?

    = dummy_output, ) 3. onnx转化bmodel代码: python3 -m bmnetp --model models/yolov5s.torchscript_bs1.pt --shapes
    发表于 09-15 07:30

    STM32F4浮点单元介绍

    固定/浮点的实用介绍  浮点单元的实用介绍  关于浮点用法的提示和评论
    发表于 09-12 08:27

    FreeRTOS详细介绍

    1 学习和掌握一种RTOS  2 FreeRTOS的原理  3 TraceAlyzer工具介绍  4 IAR EWARM集成开发环境  5 基于NUCLEO-F401RE的OS实验
    发表于 09-11 08:26

    USB Class的介绍

    USB类的概念 • USB CDC类 • 协议介绍 • STM32 USB CDC 应用介绍 • USB MSC类 • 协议介绍 • STM32 USB MSC应用介绍
    发表于 09-08 06:47

    DC-DC工作原理介绍

    DC-DC工作原理介绍
    发表于 06-08 22:54

    开关电源基本拓扑介绍

    开关电源基本拓扑介绍
    发表于 05-07 22:26