承接上文,复现一下Alexey Bochkovskiy的YOLOv4,本文先从环境配置开始,最后实现一帧图像的检测,如何训练自己的数据不在本文讨论范围(可能是下一篇),这里不得不佩服AB大佬,GitHub点开全是干货,无论是windows下还是linux下,操作流程非常详细,而且如果你之前已经成功复现了YOLOv3那么只需要改动一点参数就能使用YOLOv4,对接完美简直不要太方便。
项目地址:https://github.com/AlexeyAB/darknet
环境准备:Ubuntu18.04 1050TI Anaconda(非必需)
Step1:github下载项目
可以直接github网页下载,也可以git命令下载,文件夹改名为darknet放在/home下
Step2:环境配置
看一下作者给出的配置要求,相比起很多代码,这个requirements其实只需要最基本的cuda、cudnn就行,opencv都不是必须要安装的(opencv是个坑,大坑。。。。)
需要强调的是,企图在anaconda虚拟环境用conda install来装cudatoolkit和cudnn是不成功的,必须本地编译安装CUDA和cuDNN才能成功。
简单说一下,gcc不用管,cmake、cuda、cudnn是需要安装的,opencv看情况,不装的话检测结果会以jpg文件的形式保存
那么,只要CUDA和cudnn安装完整个YOLO的环境配置就完成了
1. CUDA安装(前提条件:nvidia显卡驱动已安装)
官网下载CUDA10.0,或者以上版本,根据显卡驱动的版本来决定(可参考CUDA版本问题,cuda与cudnn匹配问题)
找到下载的run文件,执行命令:
sudo chmod a+x cuda_10.0.130_410.48_linux.run
sudo sh cuda_10.0.130_410.48_linux.run
然后多按按空格把声明读完,注意后面有一个位置会问你装不装驱动,由于这里我们提前安装了显卡驱动,一定要选N
安装完成后,还需要添加环境变量
sudo gedit ~/.bashrc
# 文件末尾添加以下内容
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 保存修改后更新一下
source ~/.bashrc
最后测试一下CUDA是否安装成功,选择一个sample
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
结果显示Resule=pass就是安装成功!
2. cuDNN安装(前提条件:nvidia显卡驱动已安装,CUDA已安装 官网下载需要nvidia账号)
cuDNN的版本问题可参考
官网下载相应的版本,这里官方其实也贴心的给出了匹配的版本
下载完成之后解压,然后cd进文件夹执行以下拷贝命令:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
完成之后,查看cuDNN的版本号,有版本号即是安装成功
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
3. cmake安装
这里我是在anaconda虚拟环境中直接conda install装的cmake,其他的安装方法可自行百度
Step3:在linux上编译Darknet
使用cmake生成CMakeLists.txt可以自动检测已经安装的依赖
mkdir build-release
cd build-release
cmake ..
make
make install
依次执行上面的命令即可编译darknet
github上给出各种各样的编译情况,不使用cmake的方法,可以自行查阅github网址
Step4:单帧测试
首先需要下载yolov4的权重文件,放在/darknet文件夹中即可
权重百度云链接:链接:https://pan.baidu.com/s/1ILfTuUrQxtNBU5DdNw7hoQ 提取码:ffm8
在/darknet/data文件夹中有几张图片可供测试,这里我们直接用这几张经典的图片
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
./darknet detect cfg/yolov4.cfg yolov4.weights data/person.jpg
那么最后,yolov4的复现其实个v3没有什么区别,这就是大佬的厉害之处,yolov3可以完美对接上yolov4,如果你还想用yolov3来检测,那么同样只需要准备好v3的权重文件,然后将上面的命令改成v3即可运行
./darknet detect cfg/yolov3.cfg yolov3.weights data/person.jpg
这样就简单的实现了yolo最基本的检测功能,还有更多的功能大家可以自己去github上研究,Alexey Bochkovskiy大佬真的写的非常详细,还有很多功能如:视频检测、放在手机上运行等等,包括训练自己的数据都有很详细的步骤,后面如果有时间,我还会尝试用自己的数据集来训练看看,v4的性能确实十分有诱惑力!