承接上文,復現一下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的版本問題可參考https://blog.csdn.net/hesongzefairy/article/details/104457091
官網下載相應的版本,這裏官方其實也貼心的給出了匹配的版本
下載完成之後解壓,然後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的性能確實十分有誘惑力!