シーン分類モデル#
インストールファイルの github アドレス: https://github.com/metalbubble/places365
ダウンロード後、解凍します。
直接実行することもできます:
git clone https://github.com/metalbubble/places365
上記のアドレスから使用する pre_trained model を選択してダウンロードしてください。
1. docker のインストール#
ダウンロードアドレス: here
Ubuntu インストールマニュアルのアドレス:
まず、リポジトリをインストールします:
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
Docker CE をインストールします:
sudo apt-get -y install docker-ce
最後に、インストールが成功したかテストします:
sudo docker run hello-world
テスト後、テストイメージを削除します:
sudo su
docker images
docker rmi -f iamge_name or image ID
2. places365_container の作成#
cd places365/docker
README.md を開きます。
このコンテナには Ubuntu 14.04 システム、Caffe、およびその関連依存関係が含まれていることがわかります。
実行します:
docker build -t places365_container .
ダウンロードとインストールには少し時間がかかります。合計で 3.5G 以上です。
選択したネットワーク prototxt と対応する model を docker/models_places ディレクトリにコピーします。
完了したら、実行します:
docker run places365_container python run_scene.py images/mountains.jpg
ここで注意が必要です。どこかで間違えたかもしれません。上記のコマンドを実行すると places365_container が見つからないと言われました。その後、少し変更しました。以下のコマンドを実行すると結果が得られました。
docker run places365_contrainer python run_scene.py images/mountains.jpg
3. ローカル caffe の呼び出し#
ローカル caffe ディレクトリを $ROOT と定義します。
Places365 フォルダを $ROOT ディレクトリにコピーします。
ここには 2 つのバージョンがあります。1 つは caffe に付属の classfy.py を使用するもので、もう 1 つは Places365 の run_scene.py を使用するものです。両方について説明します。
3.1. classfier.py の使用#
まず、classfy.py を少し修正します。
デフォルトのこのプログラムは結果を npy ファイルに保存し、ターミナルには表示しないため、結果をターミナルに表示するようにさらに修正する必要があります。
この行を見つけます:
mean = np.load(args.mean_file)
その下に追加します:
mean=mean.mean(1).mean(1)
次に、次の位置に移動します:
# Classify
start = time.time()
predictions = classifier.predict(inputs, not args.center_only)
print("Done in %.2f s." % (time.time() - start))
その下に追加します:
imagenet_labels_filename = '../places365/docker/resources/labels.txt' #ここは自分のlabels.txtのパスに変更する必要があります
labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')
top_k = predictions.flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
print labels[top_k[i]]
最後に 132 行目のパスを自分のファイルパスに変更します。
imagenet_labels_filename = '$ROOT/places365/docker/resources/labels.txt'
3.1.1. labels.txt の生成#
比較すると、caffe が必要とするファイルは各行にカテゴリ名だけで良いことが簡単にわかります。places365/docker/resources の labels.pkl を変更します。
以下のスクリプトを書きました。実行すると自動的に labels.txt が生成されます。
#!/bin/sh
cp labels.pkl labels.txt
sed -i 1d labels.txt
sed -i 731d labels.txt
for num in {1..365};
do
sed -i "/p${num}/d" labels.txt
done
sed -i 's/aS//g' labels.txt
sed -i 's/S//g' labels.txt
sed -i 's/^.//g' labels.txt
sed -i 's/.$//g' labels.txt
3.1.2. 実行#
以下のコマンドを使用して実行します。
cd $ROOT/python
python classify.py $ROOT/places365/docker/images/mountains.jpg result.npy \
--model_def $ROOT/places365/docker/models_places/deploy_alexnet_places365.prototxt \
--pretrained_model $ROOT/places365/docker/models_places/alexnet_places365.caffemodel
ここで result.npy は出力ファイルです。
3.2 run_scene.py の使用#
このファイルを $ROOT/python フォルダにコピーします。
その後、直接実行します:
python run_scene.py $ROOT/places365/docker/images/mountains.jpg
完了です!