Pytorchによる物体検出 SSD MobileNet Part(2)

colaboratory

はじめに

こんにちわ、swim-loverです。PythonとPytorchで物体検出を行っています。 Pythonを始めたばかりですが、「使いながら覚える」をコンセプトに勉強しています。 前回、Pytorchによる物体検出として、Google Colab環境で物体検出(SSD)を動かしました。今回は、MobileNetという実装サンプルを使って物体検出を行いたいと思います。

物体検出 SSD 実行環境のダウンロード

今回は、MobileNetという実装サンプルを試してみます。モバイル端末でも動作するような実装とのことです。

Colab環境でダウンロードしたファイルなどは、一定の時間が経過すると消えてしまいます。Colab環境がリセットされてしまうことが原因のようですが、ダウントードしたファイル、パッケージ、学習データなどが消えて、最初からやり直しとなると大変です。

そこで、Google DriveのMy DriveをColab環境にマウントして、My Driver上で、ファイルを扱えば消えてしまう問題はなくなります。

まず、colab環境で以下のコマンドを実行します。この際、アクセス許可の確認画面が出てきますので許可をします。

from google.colab import drive
drive.mount('/content/drive')

マウントに成功したかどうか早速、確認してみます。

cd drive
ls

MyDriveがマウントされてることが確認できました。

MyDrive/  Othercomputers/

pytorch-ssd-testというフォルダを作成し、ここで確認を進めたいと思います。

mkdir pytorch-ssd-test
cd pytorch-ssd-test/

次に、以下のgitコマンドにより、SSDの実行サンプルをダウンロードします。なお、colab環境では、Linuxコマンドの前に、エクスクラメーションマーク(“!”)を付ける必要があるようです。

しかし、上に出てきたコマンド(pwd,ls,cdなど)では、つけなくても実行できました。多用するコマンドは、つけなくても実行できるのかもしれません。(この内容は、後日訂正する可能性があります。

!git clone https://github.com/qfgaohao/pytorch-ssd.git
Cloning into 'pytorch-ssd'...
remote: Enumerating objects: 812, done.
remote: Total 812 (delta 0), reused 0 (delta 0), pack-reused 812
Receiving objects: 100% (812/812), 1.05 MiB | 359.00 KiB/s, done.
Resolving deltas: 100% (544/544), done

問題なくダウンロードできているか確認してみます。

cd pytorch-ssd
ls

ちゃんとダウンロードできていることが確認できました。

convert_to_caffe2_models.py  README.md
draw_eval_results.py         readme_ssd_example.jpg
eval_ssd.py                  run_ssd_example.py
extract_tf_weights.py        run_ssd_live_caffe2.py
gun.jpg                      run_ssd_live_demo.py
LICENSE                      train_ssd.py
models/                      translate_tf_mobilenetv1.py
open_images_downloader.py    vision/
prune_alexnet.py             visual_tf_models.py

READMEの確認

ダウンロードしたファイルに含まれているREADMEファイルを確認してみます。

less README.md

lessコマンドを入力すると、ブラウザにヘルプ画面が現れ、READMEの中身が見れるようになりました。なかなか優秀な作りです。

今回は、MobilenetV1 SSDを動かしてみたいと思います。

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

上のgitコマンドでダウンロードしたのは、実行スクリプトのみです。そこで学習モデルをダウンロードします。(modelsの中身はまだ空になっています。)

以下のコマンドで、学習済みモデルとラベルをダウンロードします。コマンドの先頭にエクスクラメーションマークをつけて実行します。

・学習済みモデルデータ

!wget -P models https://storage.googleapis.com/models-hao/mobilenet-v1-ssd-mp-0_675.pth

・ラベルデータ

!wget -P models https://storage.googleapis.com/models-hao/voc-model-labels.txt

サンプルの実行

識別したい画像をpytorch_ssdフォルダに置きます。今回は自転車の画像を使用してみました。

サンプルのスクリプト “run_ssd_example.py”を実行します。

!python3 run_ssd_example.py mb1-ssd models/mobilenet-v1-ssd-mp-0_675.pth models/voc-model-labels.txt sample.jpg

出力ファイルとして、”run_ssd_example_output.jpg”が出力されました。

Inference time:  0.32605862617492676
Found 1 objects. The output image is run_ssd_example_output.jpg

自転車を認識しています。しかし、2台分の自転車を1台分として認識しています。少し難しい画像だったのかもしれません。

別の画像を試してみます。

今回は、4台分の自転車を認識できました。

まとめ

今回、Pytorchで物体検出(SSD)の実装サンプルであるMobile Netを使って、物体認識を行ってみました。次回以降も物体認識をしてみたいと思います。

コメント

タイトルとURLをコピーしました