1. HOME
  2. ブログ
  3. IT技術
  4. Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】

Tensorflow2 で YOLOv3 を動かしてみた!【機械学習】

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」という名前の仮想環境を作って行きます。

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

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

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

仮想環境を起動

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

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

conda activate [仮想環境名]

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

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

TensorFlow のインストール

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

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

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

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

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

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

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

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

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

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

「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 をインストールします。

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

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

MNISTで動作確認

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

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

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

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

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

学習時のログの見方

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

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

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

学習の結果

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

正解率などは、学習のたびに若干変わりますが、概ね 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 をコマンドから使える方は、以下でダウンロードできます。

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

学習済みモデルの準備

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

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

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

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

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

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

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

weights を Keras 用に変換

weights を Keras 用に変換します。

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

プログラムを実行

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

ログ

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

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

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

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

物体検出の結果

無事検出できました!

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

さいごに

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

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

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

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

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

機械学習でのシステム開発依頼・お見積もりはこちらまでお願いします。
また、機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

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

関連記事

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア