• トップ
  • ブログ一覧
  • Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】
  • Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】

    広告メディア事業部広告メディア事業部
    2020.05.19

    IT技術

    Tensorflow2 で YOLOv3 を動かし画像から物体検出をしよう

    この手の新しいソフトウェアは、バージョンが変わると、ライブラリがアップデートされたり、関連ソフトウェアの対応バージョンが変わったりします。

    経験された方ならわかると思いますが…とにかく苦労するのが、安定動作する組み合わせです。

    今回は、「TensorFlow 2.1.0」に合わせた環境を整えます。

    YOLOv3」を、2020年3月時点の最新バージョンである「TensorFlow 2.1.0」で動かしましょう。

    どんなものができるの?

    最終的には、次のようなイメージを目指します。

    Tensorflow2 を使い YOLOv3 で物体検出までの流れ

    物体検出までの流れは、以下の通りです。

    1. CUDA のアップデート
    2. cuDNN のアップデート
    3. Anaconda 仮想環境の作成
    4. TensorFlow や Keras など、必要パッケージのインストール
    5. MNIST で動作確認
    6. ソースコードの準備
    7. 学習済みモデルの準備
    8. 物体検出してみる!

    TensorFlow 2.1.0 に対応する CUDA にアップデート

    「TensorFlow 1.14.0」の時は、「CUDA 10.0」を使いました。

    今回は、「TensorFlow 2.1.0」に対応する「CUDA 10.1」をインストールします。

    CUDA 10.1 のインストール

    まずは、以下のサイトから CUDA Toolkit をダウンロードしていきます。

    【CUDA Toolkit】
    CUDA Toolkit Archive | NVIDIA Developer

    アップデートデータのダウンロード

    今回は、「TensoeFlow 2.1.0」を使いますので、「CUDA は、10.1」を使います。

    インストーラの起動

    ダウンロードが完了したら、インストーラを起動。

    繰り返し「次へ」をクリックしていけば、インストールは完了します。

    TensorFlow 2.1.0 に対応する cuDNN のインストール

    cuDNN (CUDA Deep Neural Network library) は、ニューラルネットワーク計算用のライブラリーです。

    今回は、「CUDA 10.1」に対応する「cuDNN 7.6.5」を使います

    cuDNN のダウンロード

    以下のサイトから、cuDNN をダウンロードしていきます。

    【cuDNN】
    NVIDIA cuDNN | NVIDIA Developer

    cuDNN v7.6.5 をダウンロード

    「Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1」から「CUDA 10.1」対応の「cuDNN v7.6.5」をダウンロードします。

    cuDNN のインストール

    次は、インストールです。

    ダウンロードした zip ファイルの中に、以下の3つのファイルがあります。

    1. cudnn64_7.dll
    2. cudnn.h
    3. cudnn.lib

    CUDA をインストールしたフォルダに、コピーしてください。

    インストール先を変えてなければ、「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1」になります。

    Anaconda 仮想環境の作成

    Anaconda で仮想環境を作っていきます。

    スタートメニューから「Anaconda3」を選択し、「Anaconda Prompt」を開きます。

    仮想環境の作成

    「tf210」という名前の仮想環境を作って行きます。

    この場合、以下のように記述します。

    1conda create -n tf210 python=3.7

    conda create -n [仮想環境名] python=3.7

    次のように表示されますので、「y」と入力してください。

    1Proceed ([y]/n)? y

    仮想環境を起動

    インストールが終わったら、早速、仮想環境を起動してみます。

    次のように入力してください。

    1conda activate tf210

    conda activate [仮想環境名]

    TensorFlow、Keras などの必要パッケージのインストール

    pip コマンドで、必要パッケージをインストールしていきます。

    TensorFlow のインストール

    現在の最新バージョンは「2.1.0」ですが、大きな変更があったため、これまでのバージョン1系のプログラム、そのままでは動きません。

    今回は、「TensorFlow 2.1.0」と「Keras 2.3.1」を使っていきます

    まずは、TensorFlow (GPU版)をインストールします

    1(tf210)>pip install tensorflow-gpu

    ただし、GPU が無い場合は「pip install tensorflow」と入力してください。

    インストール済みパッケージの確認

    インストール済みのパッケージを確認すると、次のように表示されます。

    1(tf210)>pip list
    2:
    3:
    4tensorboard              2.1.1
    5tensorflow-gpu           2.1.0
    6tensorflow-gpu-estimator 2.1.0
    7:

    インストール済みパッケージの動作確認

    正常にインストールされている場合、動作確認コマンドの入力によって TensorFlow のバージョンが表示されます。

    1(tf210)>python -c "import tensorflow as tf;print(tf.__version__)"
    2:
    3:
    42.1.0

    エラーメッセージが出た場合

    次のようなエラーメッセージが出る場合があります

    1ImportError: Could not find the DLL(s) ‘msvcp140_1.dll’. TensorFlow requires that these DLLs be installed in a directory that is named in your %PATH% environment variable. You may install these DLLs by downloading “Microsoft C++ Redistributable for Visual Studio 2015, 2017 and 2019for your platform from this URL:

    「msvcp140_1.dll」は、以下のパッケージに含まれています。

    1. Visual Studio 2015
    2. Visual Studio 2017
    3. Visual Studio 2019 用 Microsoft Visual C++ 再頒布可能パッケージ

    パッケージのインストール

    Microsoft の以下のサイトからダウンロードし、インストールすることで解決できます。

    【Microsoft サポート】
    最新のサポートされる Visual C++ のダウンロード

    x86 か x64、ご自身の環境に合った方をインストールしてください。

    Kerasのインストール

    同じように、Keras をインストールします。

    1(tf210)>pip install keras
    1(tf210)>pip list
    2:
    3:
    4Keras                    2.3.1
    5Keras-Applications       1.0.8
    6Keras-Preprocessing      1.1.0
    7:
    1(tf210)>python -c "import keras;print(keras.__version__)"
    2:
    3:
    42.3.1

    その他のパッケージのインストール

    その他のパッケージは、次のように入力し、インストールします。

    1pip install lxml tqdm opencv-python

    MNISTで動作確認

    ここまでで、いったん動作テストをしておきましょう

    おなじみの MNIST(手書き文字)を学習させ、動作テストをします。

    以下のページに、Keras 用の MNIST 学習 Python サンプルプログラムがあります。

    【GitHub】
    keras/mnist_cnn.py at master · keras-team/keras · GitHub

    「mnist_cnn.py」という名前で保存して、「Python コマンド」で実行します。

    1(tf210)>python mnist_cnn.py

    学習時のログの見方

    実行したときに出力されるログから、ポイント抜粋します。

    トレーニングデータが60,000個、評価用データが10,000個入力として扱われます。

    1Train on 60000 samples, validate on 10000 samples

    GPU として「Geforce GTX 1060 6GB」が認識されました。

    1name: GeForce GTX 1060 6GB major: 6 minor: 1 memoryClockRate(GHz): 1.759

    学習の結果

    60,000個のトレーニングデータで12回目の学習が終了した結果、正解率は 0.9926 (99.26%)となりました

    1Epoch 12/12
    260000/60000 [==============================] - 6s 96us/step - loss: 0.0243 - acc: 0.9925 - val_loss: 0.0267 - val_acc: 0.9926
    3Test loss: 0.026658646806161413
    4Test accuracy: 0.9926

    正解率などは、学習のたびに若干変わりますが、概ね 0.99xx になって終わります。

    TensorFlow 2.0で動作する YOLOv3 のソースコードを準備

    次に、「YOLOv3」のソースコードを準備しましょう。

    TensorFlow 2.0 で動作する、Keras 版の YOLOv3 のコードを、以下のサイトからダウンロードします。

    【GitHub】
    GitHub - zzh8829/yolov3-tf2: YoloV3 Implemented in Tensorflow 2.0

    ファイルを展開

    「yolov3-tf2-master.zip」というファイルがダウンロードされたら、「yolov3-tf2」として適当な場所に展開しましょう。

    github をコマンドから使える方は、以下でダウンロードできます。

    1git clone https://github.com/zzh8829/yolov3-tf2.git

    今回は、「F:\dl\yolov3-tf2」に展開したので、今後はこの想定で進めます

    学習済みモデルの準備

    自前画像で学習させてモデルを作る前に、「YOLOv3」の学習済みモデルを使って動作の確認をしていきます。

    YOLOv3 の学習済みモデルのダウンロード

    学習済みモデルを、以下の URL からダウンロードし、data フォルダに保存します。

    【pjreddie.com】
    https://pjreddie.com/media/files/yolov3.weights

    フォルダは、「keras-tf2/data」に作成してください。

    wget コマンドを使える方は、以下でダウンロードできます。

    1wget https://pjreddie.com/media/files/yolov3.weights -O data/yolov3.weights

    ダウンロードしたファイルは、先ほどの「keras-tf2」フォルダに保存してください。

    weights を Keras 用に変換

    weights を Keras 用に変換します。

    「Anaconda プロンプト」を起動し、以前の記事で作成した仮想環境を起動します。

    1activate conda tf210

    プログラムを実行

    「keras-tf2」ディレクトリに移動し、以下のプログラムを実行します。

    1(tf210)>python convert.py

    ログ

    以下は、実行時のログの最後です。

    1:
    2:
    3ader.cc:44] Successfully opened dynamic library cublas64_10.dll
    4I0312 08:22:42.044879 15424 convert.py:26] sanity check passed
    5I0312 08:22:49.101243 15424 convert.py:29] weights saved

    TensorFlow 2.0で YOLOv3 を動作させ物体検出してみる!

    それでは、画像から物体検出をしてみます!

    1(tf210)>python detect.py --image dog.jpg
    2:
    3:
    4I0312 08:27:27.900119 16144 detect.py:55] time: 2.0288009643554688
    5I0312 08:27:27.900119 16144 detect.py:57] detections:
    6I0312 08:27:27.903125 16144 detect.py:61]       dog, 0.99891197681427, [0.1561732  0.39262596 0.42356393 0.92979777]
    7I0312 08:27:27.905113 16144 detect.py:61]       bicycle, 0.989403247833252, [0.20754492 0.23168331 0.7383292  0.7405487 ]
    8I0312 08:27:27.906111 16144 detect.py:61]       truck, 0.9285403490066528, [0.6140853  0.14844784 0.9029926  0.28906396]
    9I0312 08:27:27.940296 16144 detect.py:66] output saved to: ./output.jpg

    画像は、あらかじめネットからダウンロードして保存しておきます。

    物体検出の結果

    無事検出できました!

    検出結果の画像は、「output.jpg」に出力されます。

    さいごに

    「TensorFlow 2.1」での動作は、上手く行きましたでしょうか?

    ディープラーニングに限らず、こういった新しいオープンソースで開発されているものの進歩はとても早いです。

    その反面、上位互換や関連ソフトウェアとの整合、ドキュメントの整理などは、ほとんどが追い付いていません。

    一度で出来てしまうと何てことはないですが、出来るまでは何度もエラーメッセージと格闘をしていく気構えが必要です。

    今回の記事で、みなさんのエラーメッセージとの格闘を少しでも減らせたなら!

    こちらの記事もオススメ!

    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    関連記事

    featureImg2020.05.15Windows 10 で YOLOv3 を自前画像で学習させる(環境構築編)【機械学習】物体検出モデル YOLOv3 を自前画像で学習させよう「YOLOv3」とは、物体検出(画像から物体の位置と種類を検出)...

    featureImg2020.05.18Windows 10 で YOLOv3 を自前画像で学習させる(物体検出編)【機械学習】後編:物体検出モデル YOLOv3 を自前画像で学習させようこの記事では、物体検出する機械学習モデル「YOLOv3」を...

    featureImg2020.05.19Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】Tensorflow2 で YOLOv3 を動かし画像から物体検出をしようこの手の新しいソフトウェアは、バージョンが変...

    featureImg2020.06.23Pytorchを使ってYOLOv3で物体検出をしてみた!【機械学習】Pytorch(パイトーチ)とは?今回は、Pytorch(パイトーチ) を使って、YOLOv3で物体検出してみたいと思...

    広告メディア事業部

    広告メディア事業部

    おすすめ記事