RetinaNetを動かしてみる

前回、EC2を立ち上げて、物体検出っぽいことをしたくなったのでRetinaNetを動かしてみた。

RetinaNet自体はどこかでまとめたい。

目次

Githubでコードをfork

今回はこちらのリポジトリを使わせてもらいます。

すでにサポートされていないリポジトリのようですが、スターの数がえぐいので大丈夫な気がします。

後で色々カスタマイズしたいので、Githubにforkしておきました。(私のリポジトリ

GitCloneでリポジトリをコピー

まだEC2がGithubにssh接続できるようになっていなかったので、こちら等を参考に接続できるようにしました。

こちらのコマンドでforkしてきたリポジトリをEC2の方に入れます。

git clone git@github.com:kazushi-fa/keras-retinanet.git

Python仮想環境の構築

Readmeにあるpip install . –userではよくわからないエラーが出たので、環境を新しく作っていきます。

Readmeにはkeras 2.4とtensorflow 2.3.0で動くみたいなので何とかなるでしょう。

とりあえずTensorflow2系の環境を複製します。

conda create -n kazushi_tensorflow2_p37 --clone tensorflow2_p37

できたらCythonのセットアップをしておきます。

python setup.py build_ext --inplace

MS COCOでとりあえず動かしたいので以下も実行しておきます。

pip install --user git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI

またpython仮想環境にkeras-resnetを入れておきます。

conda activate kazushi_tensorflow2_p37
conda install -c conda-forge keras-resnet

あとちょっとよくわからないのですが、tensorflowのexport_saved_modelが非推奨になった関係で動かない場合があるそうで(私も動かなかった)

何故か再インストールすると動くみたいですのでtensorflowを入れなおします。(参考)

pip uninstall tensorflow
pip install tensorflow

→追記:この時は気が付かなかったのですが、このままインストールするとGPUが使えないTensorflowになってしまいます。Tensoflow-gpuを素直にアップデートしたらちゃんと動きました。

conda activate kazushi_tensorflow2_p37
conda update tensorflow-gpu

MS COCOのダウンロード

近いうちにMS COCOでテストしてみたいのでダウンロードして解凍しておく。

wget -q http://images.cocodataset.org/zips/train2017.zip
wget -q http://images.cocodataset.org/zips/val2017.zip
wget -q http://images.cocodataset.org/annotations/annotations_trainval2017.zip
unzip train2017.zip val2017.zip annotations_trainval2017.zip

学習済ResNetのダウンロード

後でつかうResNetの学習済モデルのWeightsをダウンロードしておきます。

場所はとりあえず/home/ubuntu/work/keras-retinanet/trained_modelsに入れました。

wget https://github.com/fizyr/keras-retinanet/releases/download/0.5.1/resnet101_oid_v1.0.0.h5
wget https://github.com/fizyr/keras-retinanet/releases/download/0.5.1/resnet152_oid_v1.0.0.h5
wget https://github.com/fizyr/keras-retinanet/releases/download/0.5.1/resnet50_coco_best_v2.1.0.h5
wget https://github.com/fizyr/keras-retinanet/releases/download/0.5.1/resnet50_oid_v1.0.0.h5

JupiterNotebookで動作を確認する

examplesディレクトリの下にResNet50RetinaNet.ipynbというサンプルファイルがあるので動作を確認する。

一部コードを変更しないと動かない。

まず

# import keras_retinanet
import sys
sys.path.append("../")

VSCodeで実行する時にライブラリが入らないのでこいつを冒頭にいれる。

そして

# use this to change which GPU to use
gpu = 0

# use this to change which GPU to use
gpu = "0,"

に変更する。

次にダウンロードした重みファイルのパスを入れる。

# adjust this to point to your downloaded/trained model
# models can be downloaded here: https://github.com/fizyr/keras-retinanet/releases
model_path = os.path.join('..', 'snapshots', 'resnet50_coco_best_v2.1.0.h5')

これを

# adjust this to point to your downloaded/trained model
# models can be downloaded here: https://github.com/fizyr/keras-retinanet/releases
model_path = os.path.join('..', 'snapshots', '/home/ubuntu/work/keras-retinanet/trained_models/resnet50_coco_best_v2.1.0.h5')

こうする。

これで一通りNotebookの中身が回った。

サンプルでついている画像ではなく、さきほどダウンロードしたCOCOの画像でも上手く動いた。

image from MS COCO (https://cocodataset.org/#termsofuse)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です