Ubuntu18.04+CUDA8.0+cuDNN11.0环境下,编译安装opencv4.4.0和darknet、测试yolov4踩坑集锦

一、环境配置:

(一)前言

Ubuntu18.04、CUDA8.0、cuDNN11.0的安装与配置以及Nvidia驱动的安装不再赘述,可查看另一篇文章:《ubuntu16.04/18.04安装卸载cuda10.0/10.1和cudnn图文说明》
。版本不同但安装方法大同小异。需要注意nvidia驱动、CUDA和cuDNN的版本号需要对应,低版本的驱动安装高版本的CUDA是不行的,会出现报错:

CUDA driver version is insufficient for CUDA runtime version Result = FAIL

具体版本对应信息可官网查看:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html在这里插入图片描述
注:下文中所用的文件在文章末尾可直接打包下载。

(二)验证

安装完CUDA后记得执行一下source ~/.bashrc更新环境变量。
查看CUDA和cudnn版本来验证是否安装成功:
(1)查看CUDA是否安装成功:

nvcc -V

在这里插入图片描述
编译执行一下自带的例子:

cd /usr/local/cuda/samples/1_Utilities/deviceQuery 
sudo make -j16
./deviceQuery

若显示为如下:最后一行是PASS才行。
在这里插入图片描述

(2)查看cudnn:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

在这里插入图片描述

(三)记录cuda安装完成后出现的一个错误

输入sudo ldconfig后出现错误提示

/sbin/ldconfig.real:/usr/local/cuda-11.0/targets/x86_64-Linux/lib/libcudnn.so.8 不是符号连接

在这里插入图片描述

此处参考
这种情况是软连接问题,执行一下命令:

 sudo ln -sf /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn.so.8.0.2 /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn.so.8

注意具体的cuda版本号要正确,有几个软连接错误就改几个。改完后再sudo ldconfig就不报错了。

二、编译安装opencv4.4.0

(一)准备

1.在安装配置完成环境后,去opencv官网下载源码。
2.下载opencv_contrib-4.4.0github地址。这是一个opencv的额外扩展库。具体信息自己查或见此处
3.切换到opencv的根目录,将opencv_contrib-4.4.0目录复制到opencv-4.4.0目录下。
4.若曾经安装过其他版本的opencv,卸载方法如下:

cd opencv-x.x.x/build
sudo make uninstall
cd ..
sudo rm -r build
 
sudo 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*
 
cd /usr
sudo find . -name "*opencv*" | xargs sudo rm -rf

(二)开始安装

1.创建build目录以便编译

cd opencv-4.4.0
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules .. \
    -DWITH_CUDA=1 \
    -DENABLE_FAST_MATH=1 \
    -DCUDA_FAST_MATH=1 \
    -DWITH_CUBLAS=1 \
    -DOPENCV_GENERATE_PKGCONFIG=1 \
    -DCUDA_GENERATION=Pascal ..

(1)cmake的前提是要安装cmake工具。要注意命令最后的两个点,因为编译所需的文件在上级目录;
(2)如果opencv_contrib文件名不一样自己改一下。

2.编译

make -j16

具体-j后面的数字根据cpu性能而定。

3.编译过程中出现的错误

(1)报错:

Makefile:162:recipe for target ‘all’ failed make:*** [all] Error 2

老办法,谷歌百度一下,发现此贴及作者给出的解决办法:
在这里插入图片描述
作者(leaf918)在github此处提供了打包好的压缩包,可以点击直接点击此处下载此压缩包,然后将压缩包里的两个目录下的文件替换到下面两个目录中即可:
opencv/.cache/xfeatures2d/boostdesc
opencv/.cache/xfeatures2d/vgg

然后重新执行cmake,make命令。编译完成后执行sudo make install安装。

(三)验证安装成功

pkg-config --modversion opencv4

输出版本号为4.4.0则成功。注:opencv4前的版本,此命令最后为opencv而不是opencv4。

如果提示:

Package opencv was not found in the pkg-config search path.

则可能是环境变量配置有问题,参考:《Ubuntu 16.04 OpenCV 源码安装、自定义环境变量 PKG_CONFIG_PATH》

三、编译安装darknet测试yolov4

(一)准备工作及编译

1.darknet项目地址
克隆源码到本地:

git clone https://github.com/AlexeyAB/darknet
cd darknet

2.修改Makefile:
可以用gedit、vim等打开Makefile,将以下几项修改:
在这里插入图片描述
其中GPU、CUDNN是使用GPU加速,OPENCV是编译时使用OPENCV。
执行 make -j16,不出问题的话当前目录下会生成darknet可执行文件。

(二)可能出现的问题

编译过程到70%左右时,我遇到了:

nvcc fatal : Unsupported gpu architecture ‘compute_20’

类似这样的错误提示。一番查找,我在Makefile做了如下修改:注释掉ARCH后面的内容,打开了GeForce RTX 2080TI…后面的内容,然后就很神奇地编译通过了。具体原因有人知道的话可以留言指教。
在这里插入图片描述

(三)验证darknet编译成功

编译完成后,会在本地生成一个名为datknet的可执行文件,在darknet目录下执行:./darknet,若提示如下则成功:在这里插入图片描述

(四)验证yolov4:

1.首先去下载官方训练好的权重文件,200+M,文件名为yolov4.weights,放到darknet目录下。下载速度可能会很慢,可以去找别人下载好的,也可以找我要。
2.测试:
检测一张图片

./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights data/dog.jpg

检测给定路径的单个视频

./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output test.mp4

检测给定路径的单个视频,并将检测结果保存为视频

./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights test.mp4 -out_filename res.avi

(五)检测效果

这里我截取了电影《憨豆先生的假期》最后一段人比较多的视频测试了效果:

YOLOv4测试《憨豆先生的假期》结尾片段

四、写在最后

所用到的文件在百度云下载:
链接: https://pan.baidu.com/s/1ggJ1nxG5VdMC0tYR4SriJA 密码: b58i
在这里插入图片描述

文章不足之处望提出意见,遇到的问题也可以在下面留言。

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值