win7 vs2017 程序报错_windows + VS2017 配置libpytorch
因為項目對實時性的要求,嘗試一波c++直接調用libpytorch。實現的同時,整理了網上的相關資料,希望對效率追求的同學提供一份幫助。
0.下載準備
下載安裝VS2017 和 cmake (3.0版本以上)
記得把bin目錄添加到環境變量path中。這里解釋一下,目前還不能直接使用VS直接配置成功libpytorch(如果讀者成功了可以@我,這篇文檔也就完成了使命就刪了),而是先借助cmake先編譯,達到曲線救國。
下載安裝opencv
可以參考博客:https://blog.csdn.net/qq_41175905/article/details/80560429,該博客中寫的很詳細。推薦opencv4.1.0
下載libtorch
下載地址:https://pytorch.org/get-started/locally/,這個根據自己情況選擇下載,因為我自己的是cuda10,并且我選擇使用release版本,所以我的選擇如下:
1. 準備文件
接下來使用cmake來進行配置吧,我們首先自己創建一個文件夾,存放我們的主程序main.cpp還有CMakeLists.txt,然后我們再創建一個build的空文件夾,之后我們編譯好的文件都存放在build文件夾里頭。
目錄結構大概就是這樣,假設這個文件夾存放在D盤:
example:
- build (文件夾)
- torchscript.py
- model.pt(由 python torchscript.py 生成)
- main.cpp
- CMakeLists.txt
touchscript.py
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) traced_script_module.save("model.pt")通過python touchscript.py ,則會生成我們上面main.cpp 需要的model.pt文件。
main.cpp
#include <torch/script.h> // One-stop header. #include <iostream> #include <memory>int main() {// Deserialize the ScriptModule from a file using torch::jit::load().torch::jit::script::Module module = torch::jit::load("F:/LabSources/PytorchCmake/model.pt");assert(module != nullptr);std::cout << "okn";// 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.torch::Tensor output = module.forward(inputs).toTensor();std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << 'n';while (1); }這是目前比較新的代碼,舊的代碼因為是測試版會出現語法錯誤,見 https://blog.csdn.net/qq_33507306/article/details/104427134
CMakeLists.txt
cmake_minimum_required(VERSION 3.12 FATAL_ERROR) project(example-app)set(CMAKE_PREFIX_PATH "D:Space.DeveloplibtorchsharecmakeTorch") find_package(Torch REQUIRED) find_package(OpenCV REQUIRED)if(NOT Torch_FOUND)message(FATAL_ERROR "Pytorch Not Found!") endif(NOT Torch_FOUND)message(STATUS "Pytorch status:") message(STATUS " libraries: ${TORCH_LIBRARIES}")message(STATUS "OpenCV library status:") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")add_executable(example-app example-app.cpp) target_link_libraries(example-app ${TORCH_LIBRARIES} ${OpenCV_LIBS}) set_property(TARGET example-app PROPERTY CXX_STANDARD 11)其中,如果沒有set(CMAKE_PREFIX_PATH "D:Space.Develop libtorchsharecmakeTorch"),可能有的同學會報錯找不到Torch的錯誤。
2. Cmake編譯
Cmake有GUI編譯和命令行編譯,本文主要操作GUI為主,命令行編譯請見https://zhuanlan.zhihu.com/p/55292836。
首先我們打開cmake軟件,然后打開我們創建的目錄,我的目錄是F:/LabSource/Pytorch Cmake, 填好兩個目錄(創建目錄和其中的bin目錄)。
選擇generator,選擇64位,因為CUDA不支持32位運算。
點擊Configure,沒問題的話再點擊Configure,然后再點擊Generate就成功了。
如果遇到以下錯誤:
則我們根據錯誤,遇到下載缺少的資源,配在紅色區域。(紅色區域并不是都是錯誤,引起錯誤的是報錯信息里日志里提示的缺少資源的NotFound)。
解決辦法: 上圖所示問題需要我們下載對應版本的CUDNN,并將資源配置(include、lib等)在對應的變量里。如下:
最后,如果日志出現warning,雖然也是紅色警報,但是也可以繼續Generate。進入下一步。
3. VS2017啟動
然后打開build文件夾中的vcxporj文件,設置項目為啟動項目,并更改為release的x64模式,生成解決方案。
最后,還可能遇到兩中情況:
1.如果提示缺少dll,可以把LibTorch的lib文件夾加入環境變量,
可以把lib文件夾的dll全拷到cpp目錄下。
2.無法定位程序輸入點到xxx.dll,
解決辦法: 則到pytorchlib下面找到放到C:WindowsSystem32和C:WindowsSysWOW64下即可。
4.輸出
已經配置好啦,希望大家都配置成功。
好的教程鏈接,本文基于以下教程更新:
https://blog.csdn.net/gulingfengze/article/details/92013360
https://zhuanlan.zhihu.com/p/68901339
https://zhuanlan.zhihu.com/p/55292836
問題解決鏈接:
https://www.cnblogs.com/yeshengCqupt/p/10448476.html
https://www.lizenghai.com/archives/29637.html
https://blog.csdn.net/qq_33507306/article/details/104427134
https://www.cnblogs.com/xym4869/p/11255598.html
總結
以上是生活随笔為你收集整理的win7 vs2017 程序报错_windows + VS2017 配置libpytorch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算字符位置
- 下一篇: 第二批鸿蒙手机排行,鸿蒙系统第二批升级机