Windows下使用C++调用pytorch模型教程(VS工程)

    技术2023-10-03  98

    如果读者有在VS下配置opencv工程的经历,那么在本教程的指导下配置起来将非常轻松。大致可以分为三步:

    生成Torch Script下载libtorch在VS下配置项目属性及系统环境变量

    生成Torch Script

    新建一个python脚本,写下

    import torch import torchvision model = torch.load('模型路径') model.cuda() # An example input you would normally provide to your model's forward() method. example = torch.rand(1, 3, 224, 224).cuda() # Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing. traced_script_module = torch.jit.trace(model, example) traced_script_module.save('model-gpu.pt') model.cpu() example = torch.rand(1, 3, 224, 224) traced_script_module = torch.jit.trace(model, example) traced_script_module.save("model-cpu.pt")

    注意该脚本的目录下要放入自己网络结构的代码(网络结构的.py文件)。

    下载libtorch

    想要下载对应版本的libtorch可以参看该文章,Windows可用以下链接。下载gpu版本不需要再下载cpu版本压缩包,gpu版本包含了cpu版本运行所需的库。

    https://download.pytorch.org/libtorch/cpu/libtorch-win-shared-with-deps-1.0.1.zip https://download.pytorch.org/libtorch/cu80/libtorch-win-shared-with-deps-1.0.1.zip https://download.pytorch.org/libtorch/cu90/libtorch-win-shared-with-deps-1.0.1.zip https://download.pytorch.org/libtorch/cu100/libtorch-win-shared-with-deps-1.0.1.zip

    修改版本号可以下载相应版本。下载后解压,并记住解压后文件夹路径,后续配置将用上该路径。

    配置Visual Studio工程及系统环境

    笔者使用的是win10和vs2015环境。

    新建一个项目工程,打开VS的“项目->属性”,在C/C++一栏的“附加包含目录”中添加libtorch的头文件路径 你自己的路径\libtorch-win-shared-with-deps-1.0.1\libtorch\include 你自己的路径\libtorch-win-shared-with-deps-1.0.1\libtorch\include\torch\csrc\api\include 在“链接器->常规->附加库目录”中添加libtorch的静态库路径 你自己的路径\libtorch-win-shared-with-deps-1.0.1\libtorch\lib 在“链接器->输入->附加依赖项”中写入静态库名称 c10_cuda.lib c10.lib caffe2_detectron_ops_gpu.lib caffe2_gpu.lib caffe2.lib caffe2_module_test_dynamic.lib clog.lib cpuinfo.lib libprotobuf.lib libprotobuf-lite.lib libprotoc.lib onnxifi_dummy.lib onnxifi_loader.lib onnx.lib onnx_proto.lib torch.lib 右键“此电脑”,点击“高级系统设置”,点击“环境变量”,在上下两个框中找到“Path”变量,添加libtorch的动态库路径(静态库和动态库在同一个文件夹下) 你自己的路径\libtorch-win-shared-with-deps-1.0.1\libtorch\lib

    至此,环境配置结束,示例代码如下

    #include <torch/script.h> #include <iostream> int main(void) { std::shared_ptr<torch::jit::script::Module> module = torch::jit::load("model-gpu.pt"); assert(module != nullptr); std::cout << "Model is loaded!" << std::endl; // Create a vector of inputs. std::vector<torch::jit::IValue> inputs; inputs.push_back(torch::ones({ 1, 3, 224, 224 }).cuda()); // Execute the model and turn its output into a tensor. at::Tensor output = module->forward(inputs).toTensor(); std::cout << output << std::endl; system("pause"); return 0; }

    若遇到错误

    error C4996: 'getenv': This function or variable may be unsafe.

    在项目->属性->C/C+±>预处理器->预处理器定中添加 _CRT_SECURE_NO_WARNINGS 这个预定义。

    本文参看了以下链接: https://zhuanlan.zhihu.com/p/52806730 https://blog.csdn.net/qq_37569355/article/details/104246813

    Processed: 0.016, SQL: 9