#Yolo v3をCudaとOpenCVで動かす
#環境
Server: Supermicro 1029U-TR4
GPU: NVIDIA TESLA V100
CPU: Xeon Gold 5117M x2
Memory: 32GB x4
Storage:800GB SSD
USB Camera:Logicool C270n
#大まかな手順
1, Ubuntu 18.04をクリーンインストール
2, Yolo v3をインストールして単体で動かす
3, CudaをインストールしてMake
4, OpenCVのライブラリをインストールしてMake
#1, Ubuntu 18.04をクリーンインストール
1)update 色々
インストーラでは特別変わった設定はなし。
インストール後アップデートとgit,build-esentialを追加しておく
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get install git
$sudo apt-get install build-essential
2)SSHを有効にしておく
$sudo apt-get install ssh
$sudo vi /etc/ssh/sshd_config
PermitRootLoginをprohibit-passwordからnoに変更
#2, Yolo v3をインストールして単体で動かす
$git clone https://github.com/pjreddie/darknet
$cd darknet
$make
$wget https://pjreddie.com/media/files/yolov3.weights (20分くらいかかるかも。)
$./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
(/data/以下を別のjpgにすると別の写真で実行する。鳥とかキリンとか。)
結果は下記のように出る。
*data/dog.jpg: Predicted in 20.787187 seconds. dog: 100% truck: 92% bicycle: 99%*
結果の出力画像はdarknetフォルダにpredictions.jpgという名前で保存される。
#3, CudaをインストールしてMake
1)nouveauを使用しないようにするため、blacklist-nouveau.confを作る
$sudo vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
2)設定を反映させて再起動
$sudo update-initramfs -u
$reboot
再起動後Ctrl+Alt+F3を押してコンソールにログイン
それか、SSHで入ってコピペした方が良いかも。
4)NVIDIAドライバーのインストール
http://download.nvidia.com 参照
$wget http://download.nvidia.com/XFree86/Linux-x86_64/435.17/NVIDIA-Linux-x86_64-435.17.run
$chmod a+x NVIDIA-Linux-x86_64-435.17.run
$sudo ./NVIDIA-Linux-x86_64-435.17.run --no-opengl-files
インストーラが起動するのでDefaultで進む。
5)CUDAインストール
https://developer.nvidia.com
High Performanice ComputingからCuda tool kitの項目を参照
$wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
$chmod a+x cuda_10.1.243_418.87.00_linux.run
$sudo sh cuda_10.1.243_418.87.00_linux.run --silent --no-opengl-libs --toolkit
6)環境変数の設定
始めにバージョンとパス確認=>/usr/local/cudaが有るかどうか確認しておく。
$echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
$echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$source ~/.bashrc # CUDAのパスが書き込まれた~/.bashrcを読み込む。
PATHの確認(それぞれの結果に/usr/local/cudaが含まれていればOK)
$echo $PATH
$echo $LD_LIBRARY_PATH
$which nvcc
7)GPUの確認
$nvidia-smi
GPUがリストされればOK
8)CUDAでYolo v3をmake
$cd darknet
$vi Makefile(GPU=0を1にする。)
GPU=1
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0
9)makeして再度試すとGPUを使用して検知が行われる
$make
$./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
GPU無しでも動かして比較するといかにGPUが有効かわかる。
$./darknet -nogpu detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
#4, OpenCVのライブラリをインストールしてMake
OpenCVを正しくインストールすると結構ハマります。
取り急ぎ動かしたい場合はlibopencv-devだけでもOK。
$sudo apt-get install libopencv-dev
$cd darknet
$vi Makefile (OPENCV=0も1にする。)
GPU=1
CUDNN=0
OPENCV=1
OPENMP=0
DEBUG=0
$make
$./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
すると別ウインドが出て、リアルタイムの物体検知が始まります。
#補足 (OpenCVを完全にインストールしたい場合)
1,OpenCVのインストール準備
$sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main'
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt-get -y install checkinstall cmake unzip pkg-config yasm
$sudo apt-get -y install git gfortran python3-dev
$sudo apt-get -y install libjpeg8-dev libjasper-dev libpng-dev libavcodec-dev libavformat-dev $libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
$sudo apt-get -y install libjpeg-dev libpng-dev libtiff-dev libtbb-dev
$sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libatlas-$base-dev libxvidcore-dev libx264-dev libgtk-3-dev
2,OpenCVのコピー
$cd /usr/local/src
$git clone https://github.com/opencv/opencv.git
$git clone https://github.com/opencv/opencv_contrib.git
$cd opencv_contrib
$git checkout -b 3.4.3 refs/tags/3.4.3
$cd ../opencv/
$git checkout -b 3.4.3 refs/tags/3.4.3
3,OpenCVのインストール
$mkdir build
$cd build
$cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
$make -j7
$make install
$echo /usr/local/lib > /etc/ld.so.conf.d/opencv.conf
$ldconfig -v
4,上記手順 4, OpenCVのライブラリをインストールしてMake へ。
(あれ?これだけでよくね?
という事に後で気づきました。)