目的
YOLOv3を使ってobject detectionをする。
前の記事で学習データの作り方と学習方法を書きましたが、この記事ではYOLOv3のインストール方法を書いていきます。
yolov3はROSにも対応していて、ROS上でも動かすことができるので、将来的にROS上で使うことも検討してdarknet_rosもインストールします。これはまた別の記事で。
ただopencv関連でめちゃくちゃ手こずったので、エラー奮闘記を後半に。
環境
ubunu16.04(ubuntu18.04でも確認済み)
ROS kinetic
Geforce 1080ti
Nvidia driver 384.
CUDAのインストール
今回YOLOはGPUを使ってやっていきたいので、CUDAとcuDNNもインストールします。
Nvidia driverのバージョンが384系なのでCUDA9.0をインストールします。
ここの対応はめちゃめちゃ大事です。間違えるとログインループに陥ります。
参考URL
https://qiita.com/min9813/items/90a1ef62b3dc37d0cc33
https://qiita.com/JeJeNeNo/items/b30597918db3781e20cf
CUDA Toolkit ダウンロードサイトからCUDA9.0 debを選択download(Network)
downloadしたdirで
sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-toolkit-9-0
ここ大事。最後の部分は、sudo apt-get install cuda-9-0やcudaとすると、同梱されているnvidiaドライバーもインストールされるので注意。
そしてbashrcを編集して末尾にpathを加えておきます。
nano ~/.bashrc
## CUDA and cuDNN paths
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
反映して
source ~/.bashrc
これらのコマンドでCUDAの情報が現れればokです。
nvcc -V -->CUDAの情報が現れればOK
echo $PATH # 出力に"/usr/local/cuda-9.0/bin"が含まれているか?
echo $LD_LIBRARY_PATH # 出力に"/usr/local/cuda-9.0/lib64"が含まれているか?
which nvcc # 出力が"/usr/local/cuda-9.0/bin/nvcc"になっているか?
nvidia-smi # nvidiaのGPUの情報が表示されているか?
cuDNNのインストール
cuDNNダウンロードサイトから自分のCUDAのバージョンに合ったcuDNNをダウンロードしてきます。
今回は7.1.4.18をダウンロードしました。
「Runtime Library」と「Developer Library」「Code Samples」の3つをダウンロード
ダウンロードしたフォルダに移動し下記を実行
sudo dpkg -i libcudnn7-dev_7.1.4.18-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.1.4.18-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7_7.1.4.18-1+cuda9.0_amd64.deb
darknetのインストール
参考URL
https://qiita.com/k65c1/items/b80fd2af67a9880a0fd5
https://qiita.com/harmegiddo/items/c3db5fd567fa4c6cc9fb
cd workspace/
git clone https://github.com/pjreddie/darknet.git
cd darknet
nano Makefile
GPUを使うのでMakefileを修正します。
GPU=1
cuDNN=1
OPENCV=1
そしてコンパイル
make
これでdarknetのディレクトリで./darknet を実行してエラーなしで出力されればokです。
$ ./darknet
usage: ./darknet
サンプル画像
darknet直下のフォルダにweightをダウンロードして実行すると、色々な%とdetectされた犬が出力されます。
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
webカメラ
同じくdarknet直下で以下のコマンドを実行
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
エラー奮闘記
最初、犬の検出結果のpredictionが自動で表示されないかつ、webカメラを動かそうとするとopencvが見つからないというエラー発生
- /pkgconfig の中に opencv.pcがなく作成したけどうまく行かず
- /bash.bashrcの中にPATHを指定するところも見つからなかったどうなってるの?
自分でも意味不明の謎が…
参考にさせていただきました
https://qiita.com/MuAuan/items/8190b5f25e8a6f4491c1
結局
結局opencv.confをいじったり色々してみたけれど、opencvをアンインストールして再インストールしました..
opencvのアンインストール
opencvをインストールしたディレクトリの中で
cd opencv_ws/opencv/build
make clear
sudo make uninstall
そして、フォルダごとごみばこへ
さらに、usr/local のlibとincludeにある残骸を全部削除
実はこの方法で合っているのか分からないのですが、今のところ問題ないです。
opencvの再インストール
参考にさせていただきました
https://www.trifields.jp/how-to-install-opencv-on-ubuntu-2742
https://qiita.com/schwalbe1996/items/cfa9fde7ea2b825e4e6b
https://qiita.com/nakasuke_/items/51664807bdd7794db0da
https://github.com/intel/caffe/wiki/Ubuntu-16.04-or-15.10-OpenCV-3.1-Installation-Guide
関連パッケージ諸々をインストール
sudo apt-get install cmake libeigen3-dev libgtk-3-dev qt5-default freeglut3-dev \
libvtk6-qt-dev libtbb-dev ffmpeg libdc1394-22-dev libavcodec-dev libavformat-dev \
libswscale-dev libjpeg-dev libjasper-dev libpng++-dev libtiff5-dev \
libopenexr-dev libwebp-dev libhdf5-dev libpython3.5-dev python3-numpy \
python3-scipy python3-matplotlib libopenblas-dev liblapacke-dev
自分のworkspaceにディレクトリ作成&今回はgithubからバージョン指定してダウンロード
mkdir opencv3.3 && cd opencv3.3
wget https://github.com/opencv/opencv/archive/3.3.0.tar.gz
tar xvf 3.3.0.tar.gz
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j8
sudo make install
しかしここでエラー
こちらのissueの通りに、以下のコマンドで解決
https://github.com/pjreddie/darknet/issues/382
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'`
sudo ldconfig`
そしてもう一度
sudo make install
opencvあるのになぜか認識してくれず、色々試して…
ここまでが大変だったよぉ
おわりに
まぁ色々エラーが起きて一筋縄では行きませんでした。
結局opencvを再インストールしたわけですが、その方法も意外と分からず…
でも今は問題なく動いています、