Edited at

Ubuntu18.04でkeras版YOLOv3を使用するまでの道程

どうもこんにちは!

最近機械学習やら深層学習やらに興味が出てきて、ぽちぽちと勉強を始めております。今回は物体認識で利用されているYOLOv3を利用するまでの手順を個人的に書き残しています。

GPUを使って行うのでCUDAのインストールからYOLOv3の利用まで一通りざらーと書いていきますー。


目次


  • 実施環境

  • Nvidiaのインストール

  • CUDAとcuDNNのインストール

  • TensorFlow-gpuとKerasのインストール

  • Keras版YOLOv3のインストールとデモ

  • 終わりに

  • 参考リンク


実施環境


  • ubuntu 18.04

  • pyenv 1.29

  • python 3.7.2 3.6.8

  • GeForce GTX 980 Ti


Nvidiaのインストール


セキュアブートの無効化

起動画面時にF2だかなんだかを押してBIOS画面に入り、そこからセキュアブートを無効化します。

BIOSの種類(?)によってセキュアブートを無効にするとこが違うぽいので探すのに一苦労。(スマブラしながら5分くらい探しました)


nouveauの停止

ubuntuに既存でインストールされているグラフィックドライバーであるnoveauを停止させる必要があります。

terminalからnoveauの動作確認を行います。

lsmod | grep -i nouveau

以下のように出力されておればnoveauが動作しています。

僕の環境ではこのように出力されました。

nouveau              1851392  20

mxm_wmi 16384 1 nouveau
ttm 110592 1 nouveau
drm_kms_helper 172032 1 nouveau
drm 458752 16 drm_kms_helper,ttm,nouveau
i2c_algo_bit 16384 1 nouveau
wmi 24576 3 intel_wmi_thunderbolt,mxm_wmi,nouveau
video 45056 1 nouveau

既存のグラフィックドライバーであるnouveauを停止させるために、blacklistを作成します。

vim /etc/modprobe.d/blacklist-nvidia-nouveau.conf

ここに以下のように書き込みます。

blacklist nouveau

options nouveau modset=0

書き込んだらコンソールにて以下のコマンドを打ちます。

sudo update-initramfs -u


Nvidiaのインストール

Nvidiaのインストールは以下のコマンドだけでOK

その後再起動をしましょう。

sudo ubuntu-drivers autoinstall

sudo reboot

再起動で立ち上がったら、既存のnouveauが動作していないことを確認しましょう。

lsmod | grep -i nouveau

何も出力されなければOK

次にインストールしたドライバーが動作しているかを確認します。

nvidia-smi

上記のコマンドを打ってErrorではない何者かが出力されなければOK。

僕の場合は

Wed Mar 20 15:19:28 2019       

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116 Driver Version: 390.116 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 980 Ti Off | 00000000:01:00.0 On | N/A |
| 26% 35C P8 14W / 250W | 239MiB / 6080MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1158 G /usr/lib/xorg/Xorg 15MiB |
| 0 1196 G /usr/bin/gnome-shell 51MiB |
| 0 1373 G /usr/lib/xorg/Xorg 85MiB |
| 0 1506 G /usr/bin/gnome-shell 83MiB |
+-----------------------------------------------------------------------------+

こんな感じで出力されました。


CUDAとcuDNNのインストール


CUDAのインストール

TensorFlowとの兼ね合い(?)で最新のCUDAではなく、CUDA9.0をダウンロードします。

公式ページにひとっ飛び!

CUDA Toolkit 9.0 Downloads

ダウンロードをしたらそのディレクトリにて以下のコマンドを入力しインストールします。

sudo dpkg -i cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb

sudo apt-key add /var/cuda-repo-9-0-local/
sudo apt-get update
sudo apt-get install cuda-toolkit-9-0

その後ホームディレクトリ直下の.bashrcファイルにCUDAのPATHを書き込みます。

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}}

そして再起動して、CUDAがインストールされているかを確認します。

nvcc -V

すると下記のように出力されるはずです。

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

もしnvccコマンドが使えない場合は、.bashrcに書き込んだPATHが間違っているかもしれません(実際に僕も書き間違えていました)。もう一度ご確認ください!


cuDNNのインストール

NVIDIA公式ページより以下の3つをダウンロードします。


  • cuDNN v7.1.4 Runtime Library for Ubuntu16.04 (Deb)

  • cuDNN v7.1.4 Developer Library for Ubuntu16.04 (Deb)

  • cuDNN v7.1.4 Code Samples and User Guide for Ubuntu16.04 (Deb)

Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0

このページの[Download cuDNN v7.1.4 (May 16, 2018), for CUDA 9.0]の中に3つとも入っています。

<注意点>

必ずCUDA9.0対応のものをダウンロードしてきてください。僕はここで間違えて9.2のものをダウンロードしてしまい、あとでかなり詰みましたorz

ダウンロードが完了したらそのディレクトリまで移動し、以下のコマンドを実行してインストールを行なってください。

sudo dpkg -i libcudnn7_7.1.4.18-1+cuda9.0_amd64.deb

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

依存関係の問題で、上記の順番でインストールを行わないとエラーが出てしまうのでご注意ください。


TensorFlow-gpuとKerasのインストール


TensorFlow-gpuのインストール

pip install tensorflow-gpu==1.8.0

僕は上記でエラーが出てしまいました。。。

というのもこの記事によると、TensorFlowはpython3.7.xには対応していないらしいです。なのでなくなくpythonのバージョンを3.6.8に変更。変更してからもう一度インストールしてみると無事成功しました。

TensorFlowでGPUが動作しているかをpythonのインタラクティブモードから確認します。

import tensorflow as tf

tf.test.gpu_device_name()

下記のような出力がでればOK

'/device:GPU:0'


Kerasのインストール

pip install keras

importできるかをインタラクティブモードから確認しましょう。

import keras

以下のような出力がでるかと思います。

Using TensorFlow backend.


Keras版YOLOv3のインストールとデモ

いよいよKeras-yolov3のインストールを行いたいと思います。

とりあえずパッケージをクローンします。

git clone  https://github.com/qqwweee/keras-yolo3.git

クローン出来たら、kera-yolo3ディレクトリに移動

cd keras-yolo3

デモのために学習済みモデルをダウンロードします。

これはkera-yolo3ディレクトリ直下に置いておきます。

wget https://pjreddie.com/media/files/yolov3.weights

このままではKerasでは使えないのでKerasで使えるようにコンバートします。

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

これでようやく準備完了!デモを試してみましょう!

python yolo_video.py --image

とすると

Using TensorFlow backend.

model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:

このようになるのであとは画像のパスを入力してください。僕は今回ネットから適当に拾ってきた画像を使ってみました。

Using TensorFlow backend.

model_data/yolo.h5 model, anchors, and classes loaded.
Input image filename:person.jpg
(416, 416, 3)
Found 1 boxes for img
person 1.00 (356, 111) (702, 637)
2.6241899099986767

こんな感じになるはずです!

出力されている画像をみるとしっかりと認識されていることがわかりますね!

out.jpg


最後に

このページで学習済みモデルを使うと何が認識できるのかがわかるので色々試してみたいですね!


参考リンク

以下今回とてもとても参考させていただいたリンクたちです。みなさまありがとうございます。

こんな初心者の僕でも簡単に使えるようになるとは...時代に感謝です。