一、前言
在C++推理Yolo的onnx模型的时候,速度实在太慢了,一查,gpu没跑,opencv版本太低了,不支持cuda加速。
python3
import cv2
cv2.__version__
cv2.cuda.getCudaEnabledDeviceCount()
二、步骤
1、下载地址
2、编译
下载完成后解压,先安装不带cuda版本,安装之后系统就自带了cv,cuda才能编译
tar -xzvf opencv-4.7.0.tar.gz
cd opencv-4.7.0/
安装依赖,这里踩了很多坑,弄了好久,直接贴出来,包很多
sudo apt install ffmpeg libopenblas-dev libblas-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libopenmpi-dev libomp-dev libpixman-1-dev libcairo2-dev libgtk-3-dev libavcodec-dev libavformat-dev libxvidcore-dev libx264-dev libavresample-dev libswresample-dev libavdevice-dev libatlas-base-dev libhdf5-dev
然后就和c++一样编译
mkdir build
cd build
cmake要输入一些参数
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules -D WITH_CUDA=ON -D CUDA_ARCH_BIN=5.3 -D CUDA_ARCH_PTX="" -D ENABLE_FAST_MATH=ON -D CUDA_FAST_MATH=ON -D WITH_CUBLAS=ON -D WITH_LIBV4L=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_QT=ON -D WITH_OPENGL=ON -D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" -D WITH_TBB=ON ..
make -j4
这个好久好久,要一个半小时
sudo make install
安装成功,查看版本
bash
python3
import cv2
cv2.__version__
3、安装cuda版本
解压
tar -xzvf opencv_contrib-4.7.0.tar.gz
cd ../../opencv-4.7.0/build
编译,其中路径和GPU架构每个人都可能不同
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=ON -D WITH_CUDA=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D CUDA_ARCH_BIN=5.3 -D WITH_CUBLAS=1 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.7.0/modules -D HAVE_opencv_python3=ON -D PYTHON_EXECUTABLE=usr/bin/python3.6 -D BUILD_EXAMPLES=ON ..
踩坑:如果你gcc版本在8以上,请降级到7,不然会向我一样编译2小时后才报错
export CC=/usr/bin/gcc-7
export CXX=/usr/bin/g++-7
make -j5
这个更慢
历时4个小时,完成!