今天的任务案安装 AlexeyAB/darknet 版本的 YOLO,这是 YOLOV4 的主要作者,而这个版本的可以产生更多的衡量指标,当然,也可以使用 YOLOV4 来进行影像辨识,只是安装难度比较高。
以下的安装设定需使用下列的 AWS EC2:
启动 EC2 后,透过 ssh 协定登录到 EC2 的主机上,首先更新所有套件。
sudo yum update -y
根据 AlexeyAB/darknet github 官网上的说明,需要先安装下列元件:
检查 cmake 版本 >= 3.18
检查版本是否符合系统需求,检查 cmake,版本为 3.20.4,符合大于 3.18 的需求,使用 rpm 指令检查的结果为自行安装,非用 yum 安装的。
cmake --version
which cmake
rpm -qf /usr/local/bin/cmake
以下为将原先的 cmake 更新到 3.21 版,到 cmake 官方网站下载原始档,并安装需要的开发套件,重新编译、安装。原则上我们的安装都是在使用者目录下,所以下载前都会先到使用者目录。
sudo yum remove cmake cmake3
sudo yum install mesa-libGL mesa-libGL-devel -y
cd ~
mkdir cmake && cd cmake
wget https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0.tar.gz
tar zxfv cmake-3.21.0.tar.gz
cd cmake-3.21.0/
./bootstrap # 找寻目前系统所拥有的组态,大约要 20 分钟左右,产生 Makefile
make # 需要 20 分钟左右编译
sudo make install # 安装需要有管理者权限,因为会安装到 /usr/local/bin 目录
cd ~
检查 CUDA 版本 >= 10.2
检查 CUDA 的版本,发现在这个 AMI 中安装了多个版本的 CUDA 版本,使用 nvidia-smi 观看 GPU 的运行,发现 GPU 使用的是 11.0 ,但是目前可用的版本却是 10.0 ,整个系统安装了 10.0, 10.1, 10.2, 11.1. 11.1 等 5 个版本。
nvidia-smi
nvcc --version
ls -ld /usr/local/cuda*
删掉原来的链结,并重新指定,这样就可以对应到 CUDA 11.0 版。
sudo rm /usr/local/cuda
sudo ln -s /usr/local/cuda-11.0 /usr/local/cuda
export CUDA_BIN_PATH="/usr/local/cuda-11.0/bin"
export CUDA_HOME="/usr/local/cuda-11.0/"
export CUDA_PATH="/usr/local/cuda-11.0/"
检查 cuDNN 版本 >= 8.0.2
cuDNN 的版本检查为下列指令,会显示出 cuDNN 的版本号,这个 AMI 中安装的版本是比 8.0.2 还少,可以参考 Installing cuDNN On Linux 这个来安装,因为还要去 nVidia 注册,才能下载,所以就不去管它了。 (很任性的作者,讨厌一直注册新帐号)
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
检查 OpenCV 版本>= 2.4
使用以下三种方法来找:
前两种都没有找到,第三种有找到,但是不完整,所以只好自行安装。
rpm -qa | grep opencv
pkg-config --cflags --libs opencv4
sudo updatdb
locate opencv4
安装 opencv 4.2 的指令如下,安装的内容包含了 opencv 与他的延伸模组 contrib :
sudo yum install git cmake gcc-c++
mkdir opencv && cd opencv
# 下载原始档
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
unzip opencv.zip
unzip opencv_contrib.zip
mv opencv-4.2.0/ opencv
mv opencv_contrib-4.2.0/ opencv_contrib
mkdir -p build && cd build
# ../opencv_contrib/modules/ 是额外模组, -DOPENCV_GENERATE_PKGCONFIG=ON 是建立套件的安装组态档,../opencv 是 opencv 原始档所在目录,
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -DOPENCV_GENERATE_PKGCONFIG=ON ../opencv
make # 大约需要一个小时编译
sudo make install # 安装OpenCV,这个很快
# 确认 opencv 的分享库 (share library) 可以让其他程式存取
more /etc/ld.so.conf.d/opencv.conf
sudo ldconfig -v
设定 OpenCV 的安装环境,在使用者目录下的 .bashrc 中加上这两行,如下图所示。
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig/
export PKG_CONFIG_PATH
最后再来检查 opencv 安装情形,结果如下图。
pkg-config --cflags --libs opencv4
检查 GPU with Compute Capability (CC)>= 3.0
直接连上 GPU with Compute Capability (CC) 网站,直接找 Tesla T4 的 GPU 型号,就可以看到,如下图,版本号是 7.5。
安装 AlexeyAB/darknet
检查完相关软体后,开始安装 AlexeyAB/darknet,输入以下指令分别为设定好目录,下载原始档,建立编译环境,编译安装。接着就是下载训练好的 yolov4 的权重档,然后进行辨识,执行画面如下图,可以发现跟 yolov3 比起来,多辨识出了一个盆栽植物 (potted plant)。
cd
mkdir AlexeyAB && cd AlexeyAB
git clone https://github.com/AlexeyAB/darknet .
mkdir build_release&& cd build_release
cmake ..
cmake --build . --target install --parallel 8
cd ..
wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
./darknet detector test ./cfg/coco.data ./cfg/yolov4.cfg ./yolov4.weights data/dog.jpg