場面分類モデル#
インストールファイルの GitHub アドレス: https://github.com/metalbubble/places365
ダウンロードして解凍します。
または、次のコマンドを実行します。
git clone https://github.com/metalbubble/places365
同じアドレスから使用する pre_trained モデルを選択してダウンロードします。
1. Docker のインストール#
ダウンロードリンク: こちら
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 と対応するモデルを 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
完了です!