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配置与运行
分类:
C++编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2021-08-20 supervisorctl 进程管理
2019-08-20 numpy-排序
2019-08-20 numpy-tile 数组复制
2019-08-20 经纬度计算距离与方位角
2019-08-20 numpy-添加操作大全
2019-08-20 高效编程之 concurrent.future