首页 > 编程语言 >深度学习 之 模型部署【4】-libtorch入门 - pytorch部署torchscript 以及 c++ libtorch 调用 pytorch 模型

深度学习 之 模型部署【4】-libtorch入门 - pytorch部署torchscript 以及 c++ libtorch 调用 pytorch 模型

时间:2022-08-20 15:55:29浏览次数:72  
标签:模型 torch libtorch pytorch output model 224

pytorch 部署 torchscript

from torchvision.models import resnet34
import torch.nn.functional as F
import torch.nn as nn
import torch
import cv2

#读取一张图片,并转换成[1,3,224,224]的float张量并归一化
image = cv2.imread("flower.jpg")
image = cv2.resize(image,(224,224))
input_tensor = torch.tensor(image).permute(2,0,1).unsqueeze(0).float()/225.0

#定义并加载resnet34模型在imagenet预训练的权重
model = resnet34(pretrained=True)
model.eval()
#查看模型预测该付图的结果
output = model(input_tensor)
output = F.softmax(output,1)
print("模型预测结果为第{}类,置信度为{}".format(torch.argmax(output),output.max()))

#生成pt模型,按照官网来即可
model=model.to(torch.device("cpu"))
model.eval()
var=torch.ones((1,3,224,224))
traced_script_module = torch.jit.trace(model, var)
traced_script_module.save("resnet34.pt")

 

c++  libtorch  调用 pytorch 模型

cpu 版测试成功,gpu 可能是 libtorch gpu 版本不对,后期 再研究吧

#include<opencv2/opencv.hpp>
#include <torch/torch.h>
#include <torch/script.h> 

int main_succ1()
{
    //定义使用cuda
    bool s = torch::cuda::is_available;
    std::cout << s << std::endl;
    auto device = torch::Device(torch::kCUDA, 0);
    //读取图片
    auto image = cv::imread("C:/Users/yansh/source/repos/data/2.jpg");
    //缩放至指定大小
    cv::resize(image, image, cv::Size(224, 224));
    //转成张量
    auto input_tensor = torch::from_blob(image.data, { image.rows, image.cols, 3 }, torch::kByte).permute({ 2, 0, 1 }).unsqueeze(0).to(torch::kFloat32) / 225.0;
    //input_tensor.to(device);
    //加载模型
    auto model = torch::jit::load("C:/Users/yansh/source/repos/data/resnet34.pt");
    //model.to(device);
    //model.eval();
    //前向传播
    auto output = model.forward({input_tensor}).toTensor();
    output = torch::softmax(output, 1);
    std::cout << "模型预测结果为第" << torch::argmax(output) << "类,置信度为" << output.max() << std::endl;
    system("pause");
    return 0;
}

 

测试代码2

int main() {
    //torch::Device device(torch::kCUDA);
    auto device = torch::Device(torch::kCUDA, 0);
    // Deserialize the ScriptModule from a file using torch::jit::load()
    torch::jit::script::Module module = torch::jit::load("C:/Users/yansh/source/repos/data/resnet34.pt");
    //module.to(device);

    // Create a vector of inputs
    std::vector<torch::jit::IValue> inputs;
    inputs.push_back(torch::ones({ 1, 3, 224, 224 }));    //.to(device)

    // Exectute the model
    at::Tensor output = module.forward(inputs).toTensor();

    std::cout << output.slice(/*dims=*/1, /*start=*/0, /*end=*/5) << '\n';

    std::cout << "ok\n";
    system("pause");
}

 

 

 

参考资料:

https://blog.csdn.net/AllentDan/article/details/115313683  pytorch部署torchscript篇

https://zhuanlan.zhihu.com/p/363611229  Ubuntu 20.04下c++ libtorch gpu配置与运行

标签:模型,torch,libtorch,pytorch,output,model,224
From: https://www.cnblogs.com/yanshw/p/16563257.html

相关文章

  • 深度学习 之 模型部署【2】-TensorRT 入门
    TensorRT简介TensorRT是英伟达公司根据自己的硬件设备面向AI工作者推出的一种模型部署方案;同时可以对网络进行压缩、优化,它通过combineslayers、kernel优......
  • pytorch环境下查看gpu是否可用
    (36条消息)yolov5设置GPU-CSDNpython#输入库importtorch#查看版本print(torch.__version__)#查看gpu是否可用torch.cuda.is_available()#返回设备gpu个数tor......
  • 广义线性模型(GLM)及其应用
    广义线性模型[generalizelinearmodel(GLM)]是线性模型的扩展,通过联系函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。它的特点是不强行改变数据的自然度......
  • Docker容器网络(基本网络模型)
    解析Docker的4种容器网络默认网络模型先介绍默认的网络模型:安装docker后,输入ifconfig就会发现多了网卡中多了一个docker0:$ifconfigdocker0:flags=4099<UP,BROADC......
  • redis(1)的几种数据模型
    1.string结构:动态字符串。1.1字符串1.2数值计数器1.3bitmap偏移量0101运动权重计算2.list结构:压缩列表、双向循环链表......
  • conda自动安装cpu版本pytorch
    问题描述由于conda自带的源太慢,换成了清华源,结果无论怎么下载都无法使用cuda。检查conda列表发现装的是cpu版本原因网上众说纷纭,例如删掉cpu-only包,但都是瞎猫碰上死耗......
  • docker构建pytorch
    配置拉取镜像(devel版本有nvcc和cudnn)sudodockerpullpytorch/pytorch:1.6.0-cuda10.1-cudnn7-devel构建容器阿立dockerrun-it--gpusall--namelipytorch1.6-......
  • ModelScope初探:一行代码调用成熟AI模型
    简介: 如何用一行代码调用成熟AI模型?试试ModelScope,让AI开发者解放生产力!ModelScope是阿里推出的下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的......
  • 如何使用物联网低代码平台进行模型管理?
    AIRIOT是一款提供物联网平台技术底座型产品,低代码极速搭建物联网平台。通过模型化管理设备,数据处理能力强,创建数据展示表,如参数汇总、报表,快速创建流程图,具有低成本、易操......
  • 几个让你变得更优秀的模型
    一、时间管理:四象限法则很多人碌了一天,下班的时候发现自己好像什么都没有做。回顾一下今天的Todolist,竟然只做了一些零碎的事情,重要的事情还没开始做!四象限法则是时间......