Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】
IT技術
Tensorflow2 で YOLOv3 を動かし画像から物体検出をしよう
この手の新しいソフトウェアは、バージョンが変わると、ライブラリがアップデートされたり、関連ソフトウェアの対応バージョンが変わったりします。
経験された方ならわかると思いますが…とにかく苦労するのが、安定動作する組み合わせです。
今回は、「TensorFlow 2.1.0」に合わせた環境を整えます。
「YOLOv3」を、2020年3月時点の最新バージョンである「TensorFlow 2.1.0」で動かしましょう。
どんなものができるの?
最終的には、次のようなイメージを目指します。
Tensorflow2 を使い YOLOv3 で物体検出までの流れ
物体検出までの流れは、以下の通りです。
- CUDA のアップデート
- cuDNN のアップデート
- Anaconda 仮想環境の作成
- TensorFlow や Keras など、必要パッケージのインストール
- MNIST で動作確認
- ソースコードの準備
- 学習済みモデルの準備
- 物体検出してみる!
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つのファイルがあります。
- cudnn64_7.dll
- cudnn.h
- 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 2019” for your platform from this URL:
「msvcp140_1.dll」は、以下のパッケージに含まれています。
- Visual Studio 2015
- Visual Studio 2017
- 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」での動作は、上手く行きましたでしょうか?
ディープラーニングに限らず、こういった新しいオープンソースで開発されているものの進歩はとても早いです。
その反面、上位互換や関連ソフトウェアとの整合、ドキュメントの整理などは、ほとんどが追い付いていません。
一度で出来てしまうと何てことはないですが、出来るまでは何度もエラーメッセージと格闘をしていく気構えが必要です。
今回の記事で、みなさんのエラーメッセージとの格闘を少しでも減らせたなら!
こちらの記事もオススメ!
2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
関連記事
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit