Q : Libtorch是什么及为什么用Libtorch?
A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!

使用Libtorch的大体流程:

  1. 将训练好的模型打包,保存为.pt格式
  2. 使用Libtorch去加载.pt格式模型

1. Libtorch安装

  1. pytorch官网上下载libtorch各个版本的url(1.0 - 1.4)
  2. 1.5版本官网下载就好
    注:安装时尽量pytorch版本和libtorch版本保持一致

2. 转换模型

import torch
import torchvision# An instance of your model.
model = torchvision.models.resnet18(pretrained=True)# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 224, 224)# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)
traced_script_module.save("traced_resnet18_model.pt")# test module
output = traced_script_module(torch.ones(1, 3, 224, 224))
print(output[0, :5])

3. C ++中使用模型

  1. 新建一个C++工程 example-app
  2. 新建main.cpp,编写如下:
#include <torch/script.h> // One-stop header.#include <iostream>
#include <memory>int main(int argc, const char* argv[]) {if (argc != 2) {std::cerr << "usage: example-app <path-to-exported-script-module>\n";return -1;}torch::jit::script::Module module;try {// Deserialize the ScriptModule from a file using torch::jit::load().module = torch::jit::load(argv[1]);}catch (const c10::Error& e) {std::cerr << "error loading the model\n";return -1;}std::cout << "ok\n";
}
  1. 新建Cmakelists.txt,编写如下:
cmake_minimum_required(VERSION 3.14.5)
project(example-app)            list(APPEND CMAKE_PREFIX_PATH "/data/home/depwang/source/libtorch")
list(APPEND CMAKE_PREFIX_PATH "/data/home/depwang/opencv3")   find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)   set(CMAKE_CXX_STANDARD 14)      add_executable(example-app main.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
target_link_libraries(example-app "${OpenCV_LIBS}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
  1. 编译
mkdir build  && cd build     #创建并进入build文件夹
cmake ..    #根据CMakeLists.txt编译生成makefile文件
make        #根据makefile编译项目
  1. 将2中的"traced_resnet18_model.pt"复制到build下,执行
    ./example-app traced_resnet18_model.pt ; 会打印出ok,代表配置成功
  2. 修改main.cpp,如下:
#include <torch/script.h> // One-stop header.#include <iostream>
#include <memory>int main(int argc, const char* argv[]) {if (argc != 2) {std::cerr << "usage: example-app <path-to-exported-script-module>\n";return -1;}torch::jit::script::Module module;try {// Deserialize the ScriptModule from a file using torch::jit::load().module = torch::jit::load(argv[1]);}catch (const c10::Error& e) {std::cerr << "error loading the model\n";return -1;}// Create a vector of inputs.std::vector<torch::jit::IValue> inputs;inputs.push_back(torch::ones({1, 3, 224, 224}));// Execute the model and turn its output into a tensor.at::Tensor output = module.forward(inputs).toTensor();std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << '\n';std::cout << "ok\n";
}
  1. 重新编译,执行
#在build文件夹下
cmake ..
make
./example-app traced_resnet18_model.pt

参考:https://blog.csdn.net/guilutian0541/article/details/104729895

部署模型之Libtorch学习(一)相关推荐

  1. 【云计算学习教程】私有云、社区云、公共云和混合云:云计算的4种部署模型

    文章目录 私有云 云端部署何处 云端所有权归谁 云端由谁负责日常管理 社区云 公共云 混合云 公/私混合云的优势 公/私混合云的构成 公/私混合云的功能 云计算有 4 种部署模型,分别是私有云.社区云 ...

  2. 老潘的AI部署以及工业落地学习之路

    Hello我是老潘,好久不见各位. 最近在复盘今年上半年做的一些事情,不管是训练模型.部署模型搭建服务,还是写一些组件代码,零零散散是有一些产出. 虽然有了一点点成果,但仍觉着缺点什么.作为深度学习算 ...

  3. 上交张伟楠副教授:基于模型的强化学习算法,基本原理以及前沿进展(附视频)

    2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...

  4. 【视频课】先搞懂你用的模型,深度学习模型分析课程来了!

    前言 欢迎大家关注有三AI的视频课程系列,我们的视频课程系列共分为5层境界,内容和学习路线图如下: 第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用. 第2层 ...

  5. C++调用PyTorch模型:LibTorch

    转载的文章,挺不错,学习一下! LibTorch学习笔记(一) 前天由于某些原因需要利用C++调用PyTorch,于是接触到了LibTorch,配了两天最终有了一定的效果,于是记录一下. 环境 PyT ...

  6. BIM模型文件下载——施工场地部署模型

    [资源介绍] 资源名称:施工场地部署模型 资源分类:BIM模型.Revit模型 其他简介:BIM模型文件下载--施工场地部署模型 [资源下载] 链接:https://pan.baidu.com/s/1 ...

  7. 初学AI的你也能一键部署模型服务?奥利给!!

    作者:Leon Wang,现为中科院特别研究助理 (博士后),在 AI.数据科学和科学计算等方面相关的工程实践上积累了丰富的经验. 编辑:王老湿 <AI炼丹炉实践指南>专栏前 6 篇: 学 ...

  8. 听Alluxio小姐姐讲述:Alluxio云上K8S部署如何加速深度学习训练

    Alluxio云上K8S部署如何加速深度学习训练 在2021 Alluxio Day V中,Alluxio核心研发工程师邱璐,为我们带来[Alluxio云上K8S部署如何加速深度学习训练]的分享 邱璐 ...

  9. 云计算的五个基本特征、四种部署模型和三种服务模式

    五个基本特征 自助服务 使用者可以按需要获取云端的计算资源 广泛的网络访问 使用者可以随时随地使用云终端设备接入网络并使用云端的计算资源. 资源池化 计算资源汇集在一起,形成一个个CPU池.内存池等, ...

最新文章

  1. Winform开发框架之肖像显示保存控件的实现
  2. shell字符串处理
  3. PyTorch基础(一)-----张量(Tensor)
  4. python的sys模块有什么用_python sys模块详解
  5. CSV格式数据如何导入MySQL?
  6. 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)
  7. pl/sql developer 设置oracle的date类型默认显示样式
  8. Spring Security 工作原理概览
  9. 微型计算机原理与接口技术知识点
  10. 计算机科学与应用论文,计算机科学与应用论文
  11. ioncube linux,lamp安装版,安装ionCube不成功
  12. 亲测有效sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, quitting sudo: una
  13. java根据入参不同调不同方法_java根据传入参数不同调用不同的方法,求高手支妙招!...
  14. 计算机考研408必考重难点整理(2022考纲大改后,陆续更新中。。)
  15. 微博图床php上传,php利用微博当图床
  16. php脚本爬取头像图片
  17. 【React】项目中组件化使用svg格式的图片
  18. 云南农职《JavaScript交互式网页设计》 综合机试试卷⑥——简易旅游网
  19. 当 Python 遇到数据库,这个模块就变得超级好用
  20. word中每页后面的空白怎么删掉

热门文章

  1. JavaBean在jsp中的使用
  2. 一个项目了解 SpringBoot 集成 MyBatis
  3. JZ50第一个只出现一次的字符JZ50第一个只出现一次的字符JZ25合并两个排序的链表思路
  4. 软件设计师备考知识04
  5. 那些年学过的Hibernate笔记
  6. python列表相加的方法:两个list [] 加法
  7. git提示(拷贝密钥问题)“Load key /home/devid/.ssh/id_rsa: bad permissions”
  8. 不会python怎么了?靠敏捷BI和数据可视化,照样去阿里腾讯
  9. 加快FineReport报表设计的几个心得体会
  10. Linux设置封包报头的函数,GitHub - LinuxDigger/RTMP