Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

どうもこんにちは!
最近機械学習やら深層学習やらに興味が出てきて、ぽちぽちと勉強を始めております。今回は物体認識で利用されている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

最後に

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

参考リンク

以下今回とてもとても参考させていただいたリンクたちです。みなさまありがとうございます。
こんな初心者の僕でも簡単に使えるようになるとは...時代に感謝です。

yokoponzoo
なにか勉強する時は少しふざけることから始めるがモットー
https://yokoponzoo.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした