torchscript接口

一、定义

  1. 定义
  2. script、eager、onnx 模式对比
  3. 案例
  4. 生成的模型可以被c++调用
  5. 接口解读

二、实现

  1. 定义
    1. 可以在高性能环境libtorch(C ++)中直接加载,实现模型推理,而无需Pytorch训练框架依赖
    2. 无需代码,直接加载模型,实现推理。
    3. 主要用途是进行模型部署,需要记录生成一个便于推理优化的 IR,对计算图的编辑通常都是面向性能提升等等,不会给模型本身添加新的功能。
      教程网址:https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html
      接口网址:https://pytorch.org/docs/stable/jit.html
  2. script、eager、onnx 模式对比
    在这里插入图片描述
  3. 案例
    模型转为脚本:
import torch
from torch import nn
from torchvision.models.resnet import resnet18
model = resnet18(pretrained=True)
# 修改模型
model.conv1 = nn.Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
model.maxpool = nn.Identity()  # type: ignore
model.fc = nn.Linear(model.fc.in_features, 10)
model.eval()

script_module = torch.jit.trace(model, example_inputs=torch.randn([1, 3, 224, 224]))
torch.jit.save(script_module, "quant_model.pth")

脚本文件加载、推理

import torch
#推理时加载模型
quantized_recover_model = torch.jit.load("quant_model.pth")
with torch.no_grad():  # 设置禁止计算梯度
    inputs = torch.randn([1, 3, 224, 224])
    outputs = quantized_recover_model(inputs)  # 前向传播
    print(outputs)

4.生成的模型可以被c++调用

c++代码
 // 加载生成的torchscript模型 
auto module = torch::jit::load('jit_model.pth'); 
// 根据任务需求读取数据 
std::vector<torch::jit::IValue> inputs = ...; 
// 计算推理结果 
auto output = module.forward(inputs).toTensor(); 
  1. 接口解读
    在这里插入图片描述
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了将TorchScript模型推断出的结果绘制在原图中并显示,您可以使用C语言来实现以下步骤: 1. 首先,您需要使用TorchScript模型进行推断,并获取推断结果。 2. 然后,您可以使用C语言中的图形绘制函数(例如OpenCV中的cvDrawRect或cvDrawCircle)将推断结果绘制在原图中。 3. 最后,使用C语言中的图形显示函数(例如OpenCV中的cvShowImage或cvimshow)将绘制后的图像显示出来。 例如,如果您使用的是OpenCV,您可以使用以下代码来绘制一个矩形框并显示图像: ``` #include <opencv2/opencv.hpp> int main() { // 读取图像 cv::Mat img = cv::imread("image.jpg"); // 使用TorchScript模型进行推断,获取结果 // ... // 将结果绘制在原图中 cv::rectangle(img, cv::Point(10, 10), cv::Point(100, 100), cv::Scalar(0, 0, 255)); // 显示图像 cv::imshow("image", img); cv::waitKey(0); return 0; } ``` 希望这些信息能够帮到您。如果您有更多问题,请随时追问。 ### 回答2: 使用C语言实现将TorchScript模型推断出的结果绘制在原图中并显示,可以遵循以下步骤: 首先,需要使用C语言读取原始图像文件,并将其加载到内存中进行处理。可以使用OpenCV库或其他适用的图像处理库来实现此步骤。根据图像格式,我们需要解码和转换原始图像。 接下来,我们需要加载经过训练并转换为TorchScript格式的模型。可以使用TorchScript的C接口来加载模型,并将其导出为可供C语言使用的结构。 在模型导入后,我们可以使用C语言调用模型进行推断。为此,我们需要按照模型的输入要求对原始图像进行预处理。根据具体模型,可能需要进行图像归一化、尺寸调整等预处理操作。然后,我们可以调用模型的推断函数,将预处理后的图像作为输入,获取得到的推断结果。 得到推断结果后,我们可以将其与原始图像进行叠加,将结果绘制在原图上。具体绘制方法可以使用图形库,如OpenCV或相关的绘图库。 最后,我们可以在窗口中显示绘制后的图像,以便查看推断结果。可以使用图形库提供的函数将图像显示在图形界面中。 通过以上步骤,我们可以使用C语言实现将TorchScript模型推断出的结果绘制在原图中并显示的功能。具体细节可能因使用的库和模型而有所不同,但整体流程是类似的。 ### 回答3: 使用C语言实现将TorchScript模型推断出的结果绘制在原图中并显示的方法如下: 首先,需要加载TorchScript模型并将输入数据传递给模型进行推断。可以使用TorchScript的C API接口来加载和运行模型。首先,需要使用`torch::jit::load()`函数加载模型,然后使用`torch::jit::IValue`类型的变量传递输入数据给模型进行推断。 接下来,将推断结果绘制在原图中。首先,需要将模型的输出结果转换成C语言中的常规数据结构,例如数组。然后,使用一些图形库(例如OpenCV)提供的函数来在原图上绘制结果。可以根据推断结果的类型和绘制需求,使用线段、矩形、文本等绘制函数,将结果可视化在原图上。 最后,使用图形库提供的函数显示带有推断结果的原图。根据使用的图形库,可以使用相应的显示窗口函数来创建显示窗口,并将带有绘制结果的原图显示在窗口中。 需要注意的是,具体的实现方法可能会因为使用的图形库和推断结果的需求而有所不同。以上是一个一般性的方法概述,具体的实现需要根据具体的情况来选择合适的函数和库,并进行必要的适配和调整。 总之,使用C语言实现将TorchScript模型推断结果绘制在原图中并显示的过程需要加载模型进行推断、将结果转换成C语言数据结构、使用图形库绘制结果,并最终显示带有推断结果的原图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值