TensorFlowとKerasで画像認識する方法

Data Science

2017.12.6

Topics

 こんにちは。データサイエンスチーム tmtkです。
 この記事では、ディープラーニングを使ってみる手順を紹介します。
 この記事は、DataScience Advent Calendar 6日目の記事です。

この記事でやること

 この記事では、次の写真に何が写っているのかディープラーニングで判定し、
tmtk愛用のボールペン

ボールペン:73%
万年筆:20%
マイク:2%

と出力させてみる手順を紹介します。

環境構築

 まず、Ubuntu 16.04をインストールしたコンピュータを用意します。高性能のコンピュータは必要ないので、VirtualBoxなどで仮想マシンを立てるか、Amazon EC2などのクラウドサービスでt2.micro程度のものを立てれば十分です。
 ターミナルを立ち上げ、環境構築を行います。

# パッケージ情報を更新
sudo apt-get update
# Python3, virtualenvなどのインストール
sudo apt-get -y install python3-pip python3-dev python-virtualenv ipython3
# viartualenv環境を作成
virtualenv --system-site-packages -p python3 ~/tensorflow
# virtualenv環境を有効化
source ~/tensorflow/bin/activate
# pipを更新
easy_install -U pip
# TensorFlow, Keras, h5py, Pillowをインストール
pip3 install --upgrade tensorflow keras h5py pillow

 これでディープラーニングのための環境が整いました。

ディープラーニングで分類をやってみる

 いよいよディープラーニングで写真に写っているものを判定します。
 上のボールペンの写真を保存します。

wget https://image.techblog.nhn-techorus.com/wp-content/uploads/2017/11/ballpoint.jpg

 IPythonを起動します。

ipython3

 IPythonに以下のプログラムを入力して、ボールペンを識別させます。

# 必要なモジュールをインポート
from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np
# ResNet50のモデルをImageNet用の重みで取得
model = ResNet50(weights='imagenet')
# 画像をロード
img_path = 'ballpoint.jpg'
img = image.load_img(img_path, target_size=(224, 224))
# モデルに読み込める用に前処理
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
# 推論
preds = model.predict(x)
# 結果を表示
for name, description, score in decode_predictions(preds, top=3)[0]:
    print(description + ": " + str(int(score * 100)) + "%")

 すると出力として

ballpoint: 73%
fountain_pen: 20%
microphone: 2%

が得られます。73%の確率でボールペン、20%の確率で万年筆が写っていると予測されていることがわかります。

他の画像の例

 他の画像でも試してみましょう。
いす
いすの写真です。

dining_table: 41%
patio: 30%
folding_chair: 24%

ダイニングテーブル、中庭、折りたたみいす。微妙に外れてます。
東京タワー
夜の東京タワーの写真です。

drilling_platform: 35%
lampshade: 8%
stupa: 6%

油田海上基地。いわれてみれば見た目は近いですね。
ソファー
ソファーの写真です。

patio: 11%
quilt: 8%
velvet: 8%

中庭、キルト、ベルベット。微妙な結果です。
マイク
マイクの写真です。

microphone: 99%
thimble: 0%
radio: 0%

完璧です。
観葉植物
観葉植物の写真です。

pot: 75%
patio: 12%
greenhouse: 5%

鉢、中庭、温室。だいたいあってます。

まとめ

  • 学習済みのディープラーニングモデルを用いて、写真に何が写っているのかを予測してみました。
  • 学習済みのモデルで推論を行うだけなら、このようにt2.micro程度のコンピュータでも十分可能です。

参考

Installing TensorFlow on Ubuntu | TensorFlow
Keras Documentation
Applications – Keras Documentation

tmtk

データ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら