Libtorch的介绍与使用方法

Libtorch的介绍与使用方法

    • 1.libtorch是什么
    • 2.libtorch如何下载
    • 3.libtorch在windows下如何使用
    • 4.libtorch推理YOLOv5的例子
    • 5.libtorch模型转换方法

1.libtorch是什么

libtorch是pytorch的C++版本,支持CPU端和GPU端的部署和训练。由于python和c++的语言特性,因此用pytorch做模型训练,libtorch做模型部署。

用libtorch部署pytorch模型,而不是用tensorrt等工具部署模型的优势在于:pytorch和libtorch同属一个生态,API语句比较接近,并且不会出现某网络层不支持的问题。

Note that LibTorch is only available for C++.

2.libtorch如何下载

libtorch的下载链接,如下图所示,libtorch有release和debug版本可以选择。
Libtorch的介绍与使用方法_第1张图片
注意:最新版本的pytorch和libtorch(1.11.0)已经不支持windows系统下的CUDA10.2,如下图所示。解决方法:windows下使用CUDA11.3,或者不使用最新版本的pytorch和libtorch,1.10版本是支持windows下的pytorch的。老版本的libtorch下载请参考这篇博客。
Libtorch的介绍与使用方法_第2张图片

3.libtorch在windows下如何使用

libtorch解压后如下图所示:

最核心的是include和lib这两个文件夹。其实,不管是libtorch,还是别的tensorrt、openvino等模型部署工具,其本质都是给用户提供include和lib去使用。
Libtorch的介绍与使用方法_第3张图片
下面讲解下libtorch在windows下如何在VS中使用。
3.1在VS的包含目录中添加libtorch的头文件
Libtorch的介绍与使用方法_第4张图片
3.2 在VS的库目录中添加libtorch的库文件
Libtorch的介绍与使用方法_第5张图片
3.3 在VS中添加附加依赖项
Libtorch的介绍与使用方法_第6张图片
libtorch的所有依赖项如下,可以直接粘贴使用。

asmjit.lib
c10.lib
c10_cuda.lib
caffe2_detectron_ops_gpu.lib
caffe2_module_test_dynamic.lib
caffe2_nvrtc.lib
Caffe2_perfkernels_avx.lib
Caffe2_perfkernels_avx2.lib
Caffe2_perfkernels_avx512.lib
clog.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
fbjni.lib
kineto.lib
libprotobuf-lite.lib
libprotobuf.lib
libprotoc.lib
mkldnn.lib
pthreadpool.lib
pytorch_jni.lib
torch.lib
torch_cpu.lib
torch_cuda.lib
XNNPACK.lib

3.4 错误:c2872 std 不明确的符号
解决方法:将 VS配置中的符合模式 改为否,问题解决。如下图所示。
Libtorch的介绍与使用方法_第7张图片
3.5 Torch::cuda::is_available()返回值为False的解决办法:
在链接器中 -> 命令行 -> 其他选项,添加如下内容:

/INCLUDE:?warp_size@cuda@at@@YAHXZ

Libtorch的介绍与使用方法_第8张图片
如果还没解决的话,可以参考下图,亲测有效:
Libtorch的介绍与使用方法_第9张图片

4.libtorch推理YOLOv5的例子

这篇博客写的较为详细,推荐看这篇博客。

5.libtorch模型转换方法

官方教程链接Converting to Torch Script via Tracing

#例子
import torch
import torchvision

# An instance of your model.
model = torchvision.models.resnet18()

# 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)

# save model
traced_script_module.save("traced_resnet_model.pt")

你可能感兴趣的:(c++,libtorch,pytorch,pytorch,libtorch,c++)