博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv+libtorch c++工程问题及解决方案
阅读量:4147 次
发布时间:2019-05-25

本文共 2606 字,大约阅读时间需要 8 分钟。

问题1:添加opencv库后,报错:

by not providing "findqt5core.cmake" in cmake_module_path this project has  asked cmake to find a ...
  • 原因:未安装qt5
  • 解决方案:安装qt5
sudo apt-get install qt5-default

安装后编译时,仍然报错如上,解决方案:安装QT5后重启电脑

问题2:opencv报错

没有规则可制作目标“opencv/build/lib/libopencv_gapi.so.4.5.2libopencv_gapi.so.4.5.2”
  • 原因:只采用cmake-gui对opencv进行configure和Generate,尚未进行编译和安装
  • 解决方案:在build中打开终端:
makemake install

问题3:CMakeLists设置

cmake_minimum_required(VERSION 3.17)project(enhance)set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOMOC ON)set(BOOST_LIBRARYDIR "/usr/lib/x86_64-linux-gnu")find_package(Qt5Core)add_executable(${PROJECT_NAME} "main.cpp" xx.h xx.cpp xx.cpp)target_link_libraries(${PROJECT_NAME} Qt5::Core)## torch#set(CMAKE_PREFIX_PATH /media/zyy/software/libtorch/share/cmake/Torch)set(CMAKE_PREFIX_PATH /media/zyy/software/anaconda3/envs/pytorch160/lib/python3.7/site-packages/torch)find_package(Torch REQUIRED NO_CMAKE_FIND_ROOT_PATH)target_link_libraries(${PROJECT_NAME} "${TORCH_LIBRARIES}")# OpenCVfind_package(OpenCV REQUIRED)# 添加头文件include_directories(${OpenCV_INCLUDE_DIRS})# Link your application with OpenCV librariestarget_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

问题4:undefined reference to “cv::imread”

现象:opencv和torch分别使用不会报错,但一起使用报上述找不到cv中的函数

原因: opencv4.x编译后与libtorch有冲突

解决方案: 编译安装opencv3.4.14版本(opencv3.x应该都可行)

  • 卸载安装的opencv:
sudo make uninstallcd ..sudo rm -r buildsudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*sudo apt-get --purge remove opencv-doc opencv-data python-opencv
  • 检查
locate opencv
  • 重新编译安装opencv3.4.14(网上有很多教程,请自行编译安装)

问题5:Mat转Tensor后放入GPU报错

Process finished with exit code 11

源代码如下:

torch::Tensor input_tensor = torch::from_blob(img.data, {1, img_float.rows, img_float.cols, img.channels()});input_tensor = input_tensor.toType(torch::kFloat).to(torch::kCUDA);

猜测原因:tensor和Mat类型应对应,Mat为CV_8U,解决方案有二;

解决方案1(缺点耗时):

cv::Mat img_float;img.convertTo(img_float, CV_32FC3);auto img_tensor = torch::from_blob(img_float.data, { 1, img_float.rows, img_float.cols, img.channels() }).to(torch::kCUDA);img_tensor = img_tensor.permute({0, 3, 1, 2});

解决方案2:

auto img_tensor = torch::from_blob(img.data, { 1, img.rows, img.cols, img.channels()}, torch::kByte).to(torch::kCUDA);img_tensor = img_tensor.permute({0, 3, 1, 2}).toType(torch::kFloat);

问题6:libtorch GPU占用大,导致GPU溢出

在python环境中,模型推理之前加入 with torch.no_grad(), 可以做计算图,减少GPU占用

  • 解决方案
torch::NoGradGuard no_grad;torch::Tensor output = model.forward(inputs).toTensor();

转载地址:http://smjti.baihongyu.com/

你可能感兴趣的文章
Java白皮书的关键术语
查看>>
关于Java的常见误解
查看>>
关于URL地址的解释,让你深入了解URL
查看>>
我们为什么要使用泛型程序设计?谁想成为泛型程序员?
查看>>
安装mongodb时为什么一直卡着不动
查看>>
scan commands not supported by redis server怎么解决
查看>>
HTML5增强的通用属性
查看>>
你现在就必须知道的Java异常体系
查看>>
HTML5新增的客户端校验,你跟上HTML5时代前进的脚步了吗?
查看>>
3到5年工作经验是如何回答面试中被问到的Java集合框架问题
查看>>
SpringBoot整合ActiveMQ消息队列和双向队列、点对点与发布订阅
查看>>
CSS3新增的伪类选择器,让你体验使用CSS3的快感。
查看>>
CSS3的字体和文本相关属性
查看>>
在企业级应用中我们如何通过Linux进行部署、替换、查看日志、杀死进程?
查看>>
揭秘Java线程池的真相
查看>>
SpringBoot整合WebService服务
查看>>
在大数据时代下,数据资产成为了财富的新定义
查看>>
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
查看>>
都说数据是资产,那么到底什么是数据资产?
查看>>
何为血缘分析?血缘分析能给我们带来什么影响?
查看>>