[chat face=”komatta_man2.png” name=”物体検出してみたい人” align=”left” border=”gray” bg=”none”]Pythonを使って、物体検出をやってみたいな…。簡単にできる方法があると良いんだけど、分かりやすく解説されている記事はないかな…。[/chat]
この記事では、KerasでYOLO-v3を動かして、物体検出の実装をおこなっていきます。
ちゃんというと「機械学習アルゴリズムがYOLO-v3で、Pythonの機械学習ライブラリKerasを使って、物体検出の実装する」です。
機械学習に興味を持って、Pythonを勉強しているので、試しに何か動かしてみたい!という方にとって、とても役に立つ記事になるかと思います。
※参考 : MacbookとWindows、どちらでも実装可能です!
[jin_icon_check color=”#0071BB” size=”20px”] 完成イメージ
こんな感じで、画像に映っている「人」や「バックパック」を検出していきます。検出できる物体の種類に制限はありますが、基本的にどんな画像でも大丈夫です。
物体検出アルゴリズムYOLOv3を動かす7ステップ【Keras版】
Kerasを使って、YOLOv3を動かすまでの手順は、以下のとおりです。
- STEP① : 仮想環境を構築をする
- STEP② : 必要なライブラリを導入する
- STEP③ : YOLOv3をgit cloneする
- STEP④ : 学習済みモデルをダウンロードする
- STEP⑤ : 学習済みモデルをKeras用に変換する
- STEP⑥ : 物体検出に使いたい画像を集める
- STEP⑦ : YOLOv3を実行
順番に確認していきましょう。
STEP① : 仮想環境を構築をする
まずは、今回YOLOv3を動かすための仮想環境を構築していきます。
※注意 : 今回、仮想環境を作成するにあたって、Anacondaがインストールしてあることは前提です。最近Anacondaをインストールした場合は、必要なライブラリのバージョンが違うので注意してください!
Macを使っているならターミナル、Windowsを使っているならAnaconda Promptを開いて、下記のコードを入力しましょう。
$ conda create -n yolov3
上記で、Anacondaを使った”yolov3″という名前の仮想環境を構築しています。
もしくはAnaconda Navigatorを使ってボタンをポチポチしても大丈夫です。
仮想環境が作成できたことを確認したいので、以下のコマンドを追加で入力しましょう。
$ conda info -e
上記を入力して実行すると、いままで作成した仮想環境の一覧を確認できます。
“yolov3″という仮想環境が出力されていたら、このステップは完了です。
STEP② : 必要なライブラリを導入する
以下のコマンドを入力して、仮想環境を使える状態にしましょう。
$ conda activate yolov3
このコマンドを入力しないと、もともと使っていたroot環境で実行することになります。
今回、新しいライブラリをインストールしていくので、忘れずにconda activate yolov3
を実行しましょう。
アクティベートしたら、ライブラリのインストールをしていきます。
[jin_icon_check color=”#0071BB” size=”20px”] YOLOv3を動かすのに必要なライブラリ
- Tensorflow
- Keras
- Matplotlib
- Pillow
上記の4つが必要です。
Anacondaでライブラリのインストールをするには、condaコマンドを使ってあげます。
$ conda install tensorflow==1.14.0 keras==2.2.4 pillow matplotlib
この記事を書いている時点(2020年12月)では、TensorFlowの最新バージョンが2.3になっています。
でもYOLOv3で動作するのは、TensorFlowは1系です。2系では動作しませんので、バージョンを指定してライブラリのインストールをしていきましょう。
TensorFlowのインストールだけ時間がかかるので、焦らずに少しお待ちいただければと思います!
STEP③ : YOLOv3をgit cloneする
ライブラリのインストールが完了したら、ソースコードをダウンロードします。
Macを使っているならターミナルから、Windowsを使っているならコマンドプロンプトから、以下のコマンドを実行しましょう。
$ git clone https://github.com/qqwweee/keras-yolo3.git
そのあとで、以下のコマンドを実行して、git cloneしたディレクトリに移動します。
$ cd ~/keras-yolov3
なお、Gitをインストールしていない場合は、URLにアクセスしてZIPファイルをダウンロードしましょう。
»参考 : qqwweee/keras-yolo3: A Keras implementation of YOLOv3 (Tensorflow backend)
ダウンロードしたら、解凍したフォルダをデスクトップに置いてあげます。
Gitコマンドを実行せずにZIPファイルをダウンロードしたら、フォルダ名がkeras-yolov3-master
になっているはずです。
その場合は、下記のコマンドを入力して、フォルダに移動してあげます。
$ cd Desktop/keras-yolov3-master
※余談 : Windowsを使っていても、Gitはインストールしたほうが良いと思います。以下のURLからぜひ入手しておきましょう。
STEP④ : 学習済みモデルをダウンロードする
YOLOv3を動かすために、学習済みモデルをダウンロードしましょう。
それには、以下のコマンドを実行します。
$ wget https://pjreddie.com/media/files/yolov3.weights
Windowsだとwget
を使えないはずなので、以下のURLから学習済みモデルをダウンロードします。
手動でダウンロードしたら、デスクトップに入れてあげましょう。
STEP⑤ : 学習済みモデルをKeras用に変換する
学習済みモデルのダウンロードが完了したら、Kerasで使える形式に変換していきます。
以下のコマンドを実行しましょう。
$ python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
model_data
ディレクトリの下に、Kerasで使うためのyolo.h5
という学習モデルを作成できました。
これで、学習済みモデルの準備完了です。
STEP⑥ : 物体検出に使いたい画像を集める
あとは今回、物体検出してみたい画像を集めましょう。
僕はGoogle画像検索で「渋谷」とサーチして出てきた、スクランブル交差点の画像を使ってみたいと思います。
取得した画像(shibuya.jpg)は、「keras-yolov3」フォルダに移しておきましょう。
STEP⑦ : YOLO-v3を実行
最後にYOLOv3を実行して、先ほどダウンロードした画像から物体検出していきたいと思います。
下記のコマンドを入力して、YOLOv3を実行しましょう。
$ python yolo_video.py --image
上記コマンドを実行すると、”Input image filename:”と出力されるはずです。
これは「読み込む画像名」を聞かれているので、先ほど入手した画像のファイル名を入力しましょう。
Input image filename:shibuya.jpg
そうすると、下の画像のような検出結果になりました。
画像に映り込んでいた人が、ほとんど検出できていますよね。
さらに、人が背負っているバックパックや、信号機まで検出できています。看板に映っている山Pは、検出できませんでしたが、、、。
それにしても、他の検出率は高めです。
こんな感じで、学習済みモデルを使うと、色々な物体を検出できます。検出できる物体については、以下のURLに載っているので、ぜひ確認してみてください。
»参考 : keras-yolo3/coco_classes.txt at master · qqwweee/keras-yolo3
まとめ : YOLOv3のハンズオンの次は、スキルアップを目指そう!
というわけで、YOLOv3のハンズオンを紹介しました。
実際に機械学習モデルを動かしてみると、直感的に分かるので面白いですよね。
ただ「もう少し踏み込んだことをしたい」と思ったときは、Pythonライブラリの理解や、理論面の学習が大事になってきます。
もし今回のハンズオンで「画像認識とか物体検出って面白いな…」と感じたら、ぜひとも勉強を進めていきましょう。
具体的には、Pythonの基礎が分かっているなら、本や書籍を使った学習がおすすめです。
画像認識とか物体検出だけじゃなくて、もっと色々なAIについて知りたいと思ったら、以下の独学ロードマップが参考になるはず。
「どの教材をどの順番で学習すれば良いのか」を分かりやすく解説しています。初心者でも挫折しないように書いたので、ぜひ参考にしてみてくださいね。
AIはこれからも間違えなく伸びていくスキル。時代に取り残されないよう、今のうちからスキルアップしていきましょう(`・ω・´)!
おしまいっ!
[jin-fusen3 text=”おすすめの関連記事”]