libtorch 调用模型方法

news2024/11/26 17:31:46

libtorch 是 pytorch 的 C++ 版本,支持 CPU 端和 GPU 端的模型部署。相较于用 tensorrt 部署 pytorch 模型,用 libtorch的优势在于:pytorch 和 libtorch 同属一个生态,API 语句比较接近,并且不会出现某网络层不支持的问题。这里咱们来看一下 libtorch 怎么调用模型进行推理的。

  这里咱们以 resnet50 为例。

  首先加载 resnet50 模型,并导出 trace 模型。

# 准备一个 py 脚本,里面内容如下
import torch
import torchvision
​
model = torchvision.models.resnet50(pretrained=False)
model = model.eval().cuda()
input_data = torch.randn(1, 3, 224, 224).cuda()
​
# export trace model
traced_script_model = torch.jit.trace(model, input_data)
output = traced_script_model(data)
traced_script_model.save('resnet50.pt')
​
print(output)

   这里就会导出 trace 模型 resnet50.pt。然后编写推理工程。

  先写 infer.cpp:

// infer.cpp
#include "torch/torch.h"
#include "torch/script.h"
#include <iostream>
​
int main(){
  // torch::Tensor tensor = torch::ones(3);
  // std::cout << tensor << std::endl;
  torch::jit::script::Module module;
  module = torch::jit::load("~/resnet50.pt");    // 导入前面生成的trace模型
  module.to(at::kCUDA);                          // 放到GPU上执行
​
  // 构建输入张量
  std::vector<torch::jit::IValue> inputs;
  inputs.push_back(torch::ones({1, 3, 224, 224}).to(at::kCUDA));
​
  // 执行推理
  at::Tensor output = module.forward(inputs).toTensor();
​
  std::cout << output << std::endl;
}

   然后编写 CMakeList.txt:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
find_package(PythonInterp REQUIRED)
​
project(infer_resnet50)
​
set(Torch_DIR ~/libtorch/share/cmake/Torch)  #你解压的libtorch的绝对路径
find_package(Torch REQUIRED)
​
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
set(CUDA_INCLUDE_DIRS "/usr/local/cuda/include")
​
add_executable(infer_resnet50 infer.cpp)
​
#link libtorch .a .so
target_link_libraries(infer_resnet50 "${TORCH_LIBRARIES}")
target_include_directories(infer_resnet50 PRIVATE CUDA_INCLUDE_DIRS)
​
#
set_property(TARGET infer_resnet50 PROPERTY CXX_STANDARD 14)

  开始编译 & 执行:

mkdir build

cd build

cmake ..

make -j8

   正常执行输出结果:

作者:极智视界
链接:https://juejin.cn/post/7153132249028755463
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:请求转发和请求重定向有什么区别?

在 Java 中&#xff0c;跳转的实现方式有两种&#xff1a;请求转发和请求重定向&#xff0c;但二者是完全不同的&#xff0c;所以我们今天就来盘它。请求转发和请求重定向主要区别&#xff0c;包含以下 5 点&#xff1a; 定义不同 跳转方不同 数据共享不同 最终 URL 地址不同…

路径规划算法:基于侏儒猫鼬优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于侏儒猫鼬优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于侏儒猫鼬优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

常见面试题之List集合

1. 数组 1.1 数组概述 数组&#xff08;Array&#xff09;是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 int[] array {22,33,88,66,55,25};我们定义了这么一个数组之后&#xff0c;在内存的表示是这样的&#xff1a; 现在假如&#xff0c;我们通过arrar[1]…

Java基础---传递拷贝

目录 Java是值传递还是引用传递 什么是深拷贝和浅拷贝 浅拷贝案例解析 BeanUtils的浅拷贝 实现深拷贝 深拷贝案例解析 Java是值传递还是引用传递 编程语言中需要进行方法间的参数传递&#xff0c;这个传递的策略叫做求值策略在程序设计中&#xff0c;求值策略有很多种&am…

【PHP面试题33】include和require的区别及用法

文章目录 一、前言二 、include和require的区别三、include和require的用法介绍3.1 include的用法3.2 require的用法及示例 四、include和require的用法示例4.1 包含文件4.2 包含文件并将结果赋值给变量4.3 动态包含文件4.4 使用绝对路径包含文件4.5 包含文件失败处理4.6 包含文…

数据库--->MySQL(1)【MySQL索引】

文章目录 MySQL的优点视图MySQL的存储过程与函数触发器MySQL的基本架构MySQL的引擎InnoDBMyISAM总结 索引什么是索引&#xff1f;索引的优缺点索引底层数据结构索引的分类创建索引的原则 MySQL的优点 MySQL 主要具有下面这些优点&#xff1a; 成熟稳定&#xff0c;功能完善。开…

分布式应用之Zookeeper和Kafka

分布式应用之Zookeeper和Kafka 一、Zookeeper 1.定义 分布式系统管理框架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题 相当于各种分布式应用服务的 注册中心 文件系统 通知机制2.特点 &#xff08;1&#xff09;Zookeeper&#xff1a;一个领导者&#…

Qt| There‘s no Qtversion assigned to project... 解决方法

问题&#xff1a; 原因&#xff1a;相同工程在不同电脑下qt配置不一致导致&#xff0c;该项目qt setting设置有误。 解决方法&#xff1a;右键项目打开属性 找到Qt Project Settings->Qt Installation&#xff0c;切换到当前电脑所使用的qt版本即可。

【学习笔记】在Android使用Frida进行https抓包

最近需要在Android进行https抓包&#xff0c;对数据解密&#xff0c;找了很多方法&#xff0c;终于成功了&#xff0c;不过原文一些步骤对于我这个小白还是有点不理解的地方&#xff0c;在此记录一下。 1. 前提条件 一台root手机frida环境 2. frida环境搭建 该步骤全程参考&…

基于springboot或ssm的红色新闻系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【已解决】VMware安装MacOS苹果虚拟机,开机后卡在苹果图标位置不动

我的计算机硬件与软件信息&#xff1a; Win11系统&#xff0c;VMware17&#xff0c;MacOS12 最近在VMware17上安装MacOS12苹果虚拟机时&#xff0c;前期所有内容都配置好之后&#xff0c;在开机时碰到了一个问题&#xff1a;开机后卡在苹果图标位置不动&#xff0c;即使等了一…

2023年Mac上有哪些优质的工具(一)

Downie 4 专门用来下载视频的&#xff0c;各大视频网站上的视频只要粘贴地址就可以直接下载&#xff0c;并且可以选择清晰度&#xff0c;再也不用受百度云的气了&#xff0c;下载速度非常快&#xff0c;让工作效率大大提高。 Xmind 大家熟知的一款思维导图软件&#xff0c;他…

day34-servlet 分页

0目录 servlet 1.分页 分页逻辑1&#xff1a;数据库中20条记录&#xff0c;要求每页5条数据&#xff0c;则一共有4页 分页逻辑2&#xff1a;数据库中21条记录&#xff0c;要求每页5条数据&#xff0c;则一共有5页 分页逻辑3&#xff1a;数据库中19条记录&#xff0c;要求每页…

pytorch构建深度网络的基本概念——随机梯度下降

文章目录 随机梯度下降定义一个简单的模型定义Loss什么是梯度随机梯度下降 随机梯度下降 现在说说深度学习中的权重更新算法&#xff1a;经典算法SGD&#xff1a;stochastic gradient descent&#xff0c;随机梯度下降。 定义一个简单的模型 假设我们的模型就是要拟合一根直…

基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度课堂人脸检测系统可用于日常生活中或野外来检测与定位课堂人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的课堂人脸目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标…

力扣876. 链表的中间结点

题目 给你单链表的头结点head&#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。 题解 设置快慢指针slow和fast&#xff0c;slow每次走一步&#xff0c;fast每次走两步&#xff0c;当fast走完时&#xff0c;slow刚好指到链表中间…

Vue从小白到入门(保姆级教学)

文章目录 &#x1f34b;Vue是什么?&#x1f34b;MVVM思想 &#x1f34b;vue2快速入门&#x1f34b;注意事项 &#x1f34b;数据单向渲染&#x1f34b;数据双向渲染&#x1f34b;作业布置 &#x1f34b;事件绑定&#x1f34b;事件处理机制&#x1f34b;注意事项和细节&#x1f…

西门子S7300以太网模块labview软件介绍

借助捷米特ETH-S7300-JM01以太网模块&#xff0c;通过NetS7 OPC和NI OPC Servers&#xff0c;西门子S7-300与测控软件NI LABVIEW实现以太网通讯和监控。 功能简介 LabVIEW是一种程序开发环境&#xff0c;由美国国家仪器&#xff08;NzI&#xff09;公司研制开发&#xff0c;类…

Redis 宕机了,如何避免数据丢失?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

英华特在创业板上市:总市值约50亿元,国产品牌持续向上

7月13日&#xff0c;苏州英华特涡旋技术股份有限公司&#xff08;下称“英华特”&#xff0c;SZ:301272&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;英华特的发行价为51.39元/股&#xff0c;发行数量为1463万股&#xff0c;募资总额约为7.52亿元&#xff0c;…