第一步参考”c++调用pytorch模型并使用GPU进行预测“(https://blog.youkuaiyun.com/u010397980/article/details/89437628)博客中的方法。其他部分都没有问题。
在make的时候报错 error: ‘class at::DeprecatedTypeProperties’ has no member named ‘tensorFromBlob’,因为我的pytorch安装版本高于作者,接口形式改变了,修改为 auto img_tensor = torch::from_blob(float_image.data, {1, image.rows, image.cols, 3}).permute({0, 3, 1, 2}).to(torch::kCUDA); inputs.emplace_back(img_tensor); 可正常运行。
因为本人不熟悉cmake方法,想在qt中使用libtorch,这样更加方便。
qt的配置环境如下:
INCLUDEPATH += /usr/include \
/path_to_libtorch/include \
/path_to_libtorch/include/torch/csrc/api/include
LIBS += -L/usr/lib \
-L /path_to_libtorch/lib \
-L/usr/local/cuda-9.0/lib64
LIBS += -lstdc++fs
LIBS += -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_imgcodecs
LIBS += -lc10 -lc10_cuda -ltorch -lthnvrtc -lcaffe2_gpu -lcaffe2 -lgomp \
-lcudart -lnvToolsExt
配置完后还有14个报错,其中一个如下
/media/zw-cj-2/4A2250F32250E58B/qtProjects/libtorchTest/liibtorchTest/libtorchTest/main.cpp:-1: error: undefined reference to `c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
最终的解决方法是,在qt的配置文件中添加
QMAKE_CXXFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0,主要参考了https://github.com/pytorch/pytorch/issues/13541。
到此可编译成功并运行。