Ubuntu16.04配置Darknet實現YOLO

介紹:

Darknet:開源的網絡框架
YOLO:實時的目標檢測系統,網絡包括24個卷積層,2個全連接層。其中,卷積層用來提取圖像特徵,全連接層用來預測圖像位置和類別概率值。

一. 安裝OpenCV

我安裝的版本是opencv3.1.0 官網鏈接:https://opencv.org/news.html ,下載.zip壓縮包,下載完成以後解壓到home目錄下

1.安裝依賴項
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install checkinstall yasm libtiff5-dev libjpeg-dev libjasper-dev libdc1394-22-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils libeigen3-dev
這裏寫圖片描述

2.安裝opencv
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
這裏寫圖片描述

cmake完成以後在build目錄下開始make:
make -j8
注:-j8表示八核運算,根據電腦配置自行選擇。
這裏寫圖片描述

make過程可能有報錯:
注:make失敗的話可以用make clean命令消除
1. 消除nvcc warnning
在終端輸入命令:cmake -DBLAS=Open -DCUDA_NVCC_FLAGS=–Wno-deprecated-gpu-targets

2.
這裏寫圖片描述
這是因爲opecv3.0與cuda8.0不兼容導致的。解決辦法:直接進入 home/wang/opencv/modules/cudalegacy/src文件夾,修改graphcuts.cpp文件內容,如圖:
這裏寫圖片描述
其中,#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000) 是我們修改的。
修改以後重新make

這裏寫圖片描述

二.安裝CUDA

cuda是nvidia的編程語言平臺,想使用GPU就必須安裝cuda。
我安裝的版本是 CUDA Toolkit 8.0
官網鏈接:https://developer.nvidia.com/cuda-release-candidate-download
要先註冊才能下載,注意:下載的是cuda8.0的runfile(local)文件
下載完cuda8.0後,進入存放文件的文件夾,執行如下語句,運行runfile文件:
sudo sh cuda_8.0.61_375.26_linux.run
注意:執行後會有一系列提示讓你確認,有個選擇是詢問是否安裝NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26,如果已經安裝了顯卡驅動的話這裏要選擇否。其餘的都直接默認或者選擇是即可。
安裝成功以後會顯示如下界面:
安裝成功圖

安裝完畢後,要配置環境變量:
(1). 用gedit打開 ~/.bashrc文件,輸入如下命令:
sudo gedit ~/.bashrc
將以下內容寫入到~/.bashrc尾部:
export PATH=/usr/local/cuda-8.0/bin P A T H : + : $ P A T H e x p o r t L D L I B R A R Y P A T H = / u s r / l o c a l / c u d a 8.0 / l i b 64 {LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
如下圖所示:
這裏寫圖片描述

(2). 將cuda8.0的安裝路徑及相應的庫文件導入到etc目錄下的profile文件末尾
打開文件:
cd /etc
sudo gedit profile

將以下內容導入文件尾部:
export PATH= P A T H : / u s r / l o c a l / c u d a 8.0 / b i n e x p o r t L D L I B R A R Y P A T H = LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-8.0/lib64
如下圖所示:
這裏寫圖片描述
使配置文件生效,執行命令:source /etc/profile

可以測試一下cuda的Samples:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery
這裏寫圖片描述

三. 安裝CUDNN

官網下載壓縮包cuDNN v5.1 Library for Linux,不要下載deb文件 (https://developer.nvidia.com/rdp/cudnn-download):
這裏寫圖片描述

下載完cuDNN5.1之後進行解壓:
sudo tar -zxvf ./cudnn-8.0-linux-x64-v5.1.tgz
進入cuDNN5.1解壓之後的include目錄,在命令行進行如下操作:
cd cuda/include
sudo cp cudnn.h /usr/local/cuda/include #複製頭文件
再將進入lib64目錄下的動態文件進行復制和鏈接:
cd ..
cd lib64
sudo cp lib* /usr/local/cuda/lib64/ #複製動態鏈接庫
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5 #刪除原有動態文件
sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5 #生成軟銜接
sudo ln -s libcudnn.so.5 libcudnn.so #生成軟鏈接

四.配置darknet

1.下載darknet
git clone http://github.com/pjreddie/darknet.git

2.進入darknet文件夾,打開Makefile文件,按如下修改:
將開頭的OPENCV=0修改爲=1,
GPU=0修改爲=1,
NVCC= /usr/local/cuda-8.0/bin/nvcc
這裏寫圖片描述

修改完成以後在darknet目錄下開始編譯:
make -j8
make的時候有個報錯參考了下面這篇博客得以解決:
https://blog.csdn.net/tmosk/article/details/76578082

五.測試

1.下載YOLO預訓練好的模型:
下載地址:https://pjreddie.com/media/files/yolo.weights
注:我在darknet目錄下新建了weights文件夾,保存該weights文件。

2.單幅圖像測試
在darknet下輸入
./darknet detect cfg/yolo.cfg weights/yolo.weights data/dog.jpg
此時會報錯,提示找不到opencv庫,如下圖所示:
這裏寫圖片描述

解決辦法:
① 在etc目錄下找到ld.so.conf文件
sudo gedit /etc/ld.so.conf
在文件中加上一行 /usr/loacal/lib(其實就是opencv的安裝路徑)
這裏寫圖片描述
再運行sudo ldconfig,

② 修改bash.bashrc文件,sudo gedit /etc/bash.bashrc
在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

然後輸入命令:source /etc/bash.bashrc
就可以正常運行了。
這裏寫圖片描述

測試結果:
這裏寫圖片描述

3.實時視頻測試
輸入命令:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

注:darknet目錄下的cfg文件夾存放的是一些網絡模型的配置文件,其中配置文件coco.data和yolov3.cfg文件就存放在該文件夾下。yolov3.weights文件是訓練好的模型,可以直接去官網下載yolov3.weights

報錯時參考的博客:
http://blog.csdn.net/feiderade/article/details/51778408
http://blog.csdn.net/tmosk/article/details/76578082
http://blog.csdn.net/u010454261/article/details/71268325?utm_source=itdadao&utm_medium=referral
http://blog.csdn.net/hrsstudy/article/details/60876451

官網鏈接:
https://pjreddie.com/darknet/yolo/