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版本可以选择。

    注意:最新版本的pytorch和libtorch(1.11.0)已经不支持windows系统下的CUDA10.2,如下图所示。解决方法:windows下使用CUDA11.3,或者不使用最新版本的pytorch和libtorch,1.10版本是支持windows下的pytorch的。老版本的libtorch下载请参考这篇博客

    3.libtorch在windows下如何使用

    libtorch解压后如下图所示:

    最核心的是include和lib这两个文件夹。其实,不管是libtorch,还是别的tensorrt、openvino等模型部署工具,其本质都是给用户提供include和lib去使用。

    下面讲解下libtorch在windows下如何在VS中使用。
    3.1在VS的包含目录中添加libtorch的头文件

    3.2 在VS的库目录中添加libtorch的库文件

    3.3 在VS中添加附加依赖项

    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配置中的符合模式 改为否,问题解决。如下图所示。

    3.5 Torch::cuda::is_available()返回值为False的解决办法:
    在链接器中 -> 命令行 -> 其他选项,添加如下内容:

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

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

    来源:脆皮茄条

    物联沃分享整理
    物联沃-IOTWORD物联网 » Libtorch的介绍与使用方法

    发表评论