[TOC]
install
https://pytorch.org/get-started/previous-versions/
https://pytorch.org/tutorials/beginner/saving_loading_models.html#save-load-entire-model
python库 https://download.pytorch.org/whl/cu101/torch_stable.html
example-app.cpp
1 |
|
Cmakelists.xml
1 | cmake_minimum_required(VERSION 3.0 FATAL_ERROR) |
1| pth-2-pt
官方jit文档
https://pytorch.org/docs/1.5.1/jit.html
https://pytorch.org/docs/stable/generated/torch.jit.trace_module.html
模型里面要严格遵守函数在init初始化,forward来使用
看下面这个例子:
对比torch.jit.trace功能,此处foward函数里面有依赖于输入数据的控制流,故必须使用torch.jit.script功能。
1 | torch.jit.script(obj) |
torch.jit.trace:
1 | import torch |
2| c++ load pt
由于涉及到图像的加载与处理,本⼈使⽤opencv进⾏读取和处理。
Tips:
训练过程中,采⽤PIL.Iamge加载图像(3通道 RGB),然后Resize到224 x 224⼤⼩, 之后再进⾏ToTensor。因此使⽤C++ libTorch时候也需要按照上述过程对图像进⾏预处理。
- cv::imread()默认读取为三通道BGR,需要进⾏B/R通道交换,这⾥采⽤cv::cvtColor() 实现。
- 缩放cv::resize() 实现。
- opencv读取的图像矩阵存储形式:H x W x C, 但是pytorch中 Tensor的存储为:N x C x H x W, 因此需要进⾏变换,就是np.transpose()操作,这⾥使⽤tensor.permut({2,0,1})实现,效果是⼀样的。
- 数据归⼀化,采⽤tensor.div(255)实现。
1 |
|
3| CMakeList
1 | cmake_minimum_required(VERSION 3.0 FATAL_ERROR) |
参考资料:
1、环境配置Pytorch Offical libtorch make demo
3、模型调用LOADING A TORCHSCRIPT MODEL IN C++
libtroch部署之torch.jit.script Module踩坑之旅
Demos
行人重识别PCB
1 |
|