首先根据自己的CUDA
版本安装正确对应的cuda
和cudnn
并进行配置。
这里安装的是cuda-11.3
版本,以下基于这个版本进行安装。
1. 安装 Clion
因为Clion
更容易直接编写CMakelists.txt
,所以使用Clion
作为IDE。
需要在File -> Setting -> CMake
的CMake options
中添加
-DCMAKE_CUDA_ARCHITECTURES=86 -DCMAKE_CUDA_COMPILER=”/usr/local/cuda/bin/nvcc”
不然在编译时会出现“CMAKE_CUDA_ARCHITECTURIES must be non-empty if set.”
的错误。
2. 下载 Libtorch
注意libtorch
的版本一定要和pytorch
的版本完全相同。可根据Libtorch各版本下载进行下载,这里下载的是对应的1.11.0
版本
https://download.pytorch.org/libtorch/cu113/libtorch-shared-with-deps-1.11.0%2Bcu113.zip
3. 下载 OpenCV
注意opencv
的版本不能高于4.0.0
,不然在编译的时候会因为-D_GLIBCXX_USE_CX11_ABI=0
问题与libtorch
产生冲突。所以不要使用sudo apt-get install -y libopencv-dev
直接安装,会下载最新版本。这里安装3.4.20
版本
首先进行依赖包的下载
sudo apt update
sudo apt install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev
如果在下载时遇到没有依赖包的问题,可以使用
sudo apt-get install aptitude
sudo aptitude install XXX
会有如下提示
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Downgrade the following packages:
Accept this solution? [Y/n/q/?] y
The following packages will be DOWNGRADED:
Accept this solution? [Y/n/q/?] y
从官方库中下载对应版本的opencv
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.4
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 3.4
进行build
cd ~/opencv
mkdir build
cd buildcmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
最后进行安装
make -j$(nproc)
sudo make install
sudo ldconfig
4. 编写 CMakelists.txt
在Clion
的工程下的CMakelists.txt
中进行如下编写
cmake_minimum_required(VERSION 3.27)
project(test2)
set(CMAKE_CXX_STANDARD 14)
set(Torch_DIR /home/t2/libtorch/share/cmake/Torch)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIBRARIES})
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS})
add_executable(test2 main.cpp)
target_link_libraries(test2 ${TORCH_LIBRARIES})
target_link_libraries(test2 ${OpenCV_LIBS})
set_property(TARGET test2 PROPERTY CXX_STANDARD 14)
最后点击File -> Reload CMake Project
重新build
就完成了。
5. 测试
以下是测试代码main.cpp
#include <iostream>
#include <torch/torch.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(){
torch::Tensor tensor = torch::rand({2, 3});
std::cout << tensor << std::endl;
Mat image = cv::imread("/t2/clion-2023.3.4/bin/clion.png", 1);
cv::imshow("image", image);
cv::waitKey(0);
return 0;
}
测试效果如下