第1回 Kerasでラクショー! ディープラーニング (2/2)

技術特集

1_tensorflow_keras1_tit

tit_tensorflow_keras

2) Kerasでラクショー!ディープラーニング

これからディープラーニングを始めるという場合、Kerasというオープンソースのライブラリを使用することをおすすめします。

理由としては、KerasはDNNの組み方が高度に抽象化されているため、実装する上で理解しやすくバグの入り込む余地が少ないからです。

Kerasがどれぐらい「ラクショー」なのか、実際のコードとともに見ていきましょう!

18行でディープラーニング

以下は、画像の分類に特化したDNNである「VGG16」を用いて画像に何が写っているかを認識するコードです。

from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
import numpy as np
import sys
 
# 認識対象の画像を読み込み
input_filename = sys.argv[1] #コマンドライン引数で画像のファイルパスを指定
input_image = image.load_img(input_filename, target_size=(224, 224))
input = np.expand_dims(image.img_to_array(input_image), axis=0)
 
# モデルの定義と認識処理を実行
model = VGG16(weights='imagenet')
results = model.predict(preprocess_input(input))
 
# Kerasが提供するdecode_predictionsを用いて結果を出力
decoded_results = decode_predictions(results, top=5)[0]
for decoded_result in decoded_results:
    print(decoded_result)

なんと、空行とコメント行を含めて、たったの18行でディープラーニングによる画像認識ができてしまうのです。

どうでしょう、ラクショーな気がしてきませんか?

もちろん、これにはタネと仕掛けがあります。VGG16は、とても有名なDNNなので、予め構造の定義と学習を済ませたもの(学習済みモデルと呼びます)、さらにデータの下処理と評価結果の可読化のための処理がKerasの一部として提供されています。

これにより、上記コードでは複雑な部分を全てKeras任せにして、画像認識が可能になっています。

画像認識を実行してみる

実際に上記コードを実行して、結果を確認してみましょう。

実行には、Kerasの他にh5pyというライブラリのインストールが必要です。MacやLinuxでは、例えば下記のコマンドでインストール可能です。

$ pip install keras h5py

実行時には、コマンドライン引数で画像のファイルパスを指定する必要があります。

例えば、~/pictures/target_picture.jpgを認識対象の画像とする場合は、以下のようなコマンドになります

$ python vgg16_keras.py ~/pictures/target_picture.jpg

実行すると画像認識処理が行われますが、初回のみ自動でVGG16の学習済みモデルのダウンロードが始まります。ダウンロードには時間がかかりますので気長にお待ち下さい。

例として、筆者が撮影した以下の画像を分析させた結果を示します。

ベーグルの画像

Ess-a-Bagelのロクス・クリームチーズ・ベーグル

結果出力:

('n07693725', 'bagel', 0.98136467)
('n02776631', 'bakery', 0.0082983598)
('n07697313', 'cheeseburger', 0.0076147486)
('n07684084', 'French_loaf', 0.0010651621)
('n07695742', 'pretzel', 0.00057881989)

出力として可能性の高いものが5個表示されています。末尾の数字は確信度の高さを示し、1.0が確信度100%を表します。

最上位はベーグルで確信度も98%となっており、正しく画像認識ができていることがわかります。

その他の結果も、パン屋、チーズバーガー、フランスパン、プレッツェルなど「ありうるな」というものが並んでいます。

おわりに

今回は、ディープラーニングの概要についてご紹介した上で、既製の学習済みモデルを使って、まずはKerasでディープラーニングが動くというところをご覧いただきました。

次回は、Kerasを用いて正面から画像認識処理を実装していきます。