1
2

More than 3 years have passed since last update.

深層学習ライブラリKerasの学習済みモデルVGG16を使ってみた

Posted at

ディープラーニング(深層学習)の勉強のためモデルを自作してみましたが、残念ながらうまくいきませんでした。学習済みモデルを利用するだけならなんとかできたので、その際知り得た知識をメモとして残します。

プログラム

今回作成したプログラムを下に記載します。このプログラムは与えた画像が何であるかを1000種類の中から識別するものです。

vgg16.py
import sys
import numpy as np
from keras.preprocessing.image import load_img,img_to_array 
from keras.applications.vgg16 import VGG16,preprocess_input,decode_predictions

image_data = load_img(sys.argv[1],target_size=(224,224))
array_data = img_to_array(image_data)
array_data = np.array([array_data])
array_data = preprocess_input(array_data)
model = VGG16()
results = model.predict(array_data)
print(decode_predictions(results))

プログラムの説明

Kerasには学習済みモデルをダウンロードする機能があるので、今回はそれを使い学習済みモデルVGG16をダウンロードして使用します。

  • 画像を読み込む

下の部分で画像を読み込んでいます。VGG16に取り込める画像サイズは224×224のみなので、読み込みの際にリサイズしています。

image_data = load_img(sys.argv[1],target_size=(224,224))
  • 画像をRGB形式に変換する

VGG16が対応しているデータ形式はRGBのため、jpeg画像などはそのままでは取り込めません。そのためimg_to_arrayを使って画像をRGBの配列(224,224,3)に変換しています。また、Kerasの識別プログラムpredictは1枚づつ識別するのではなく複数枚をまとめて識別するため入力データの形式は4階層の配列になっています。今回は1枚しか識別しない仕様なのでnp.arrayを使って4階層に変換しています。

array_data = img_to_array(image_data)
array_data = np.array([array_data])      #(224,224,3) -> (1,224,224,3)
  • 画像を識別する

下の部分で画像を識別しています。preprocess_inputはVGG16に入れるための前処理を行っています。VGG16()で学習済みモデルを読み込み、predictで識別をしています。

array_data = preprocess_input(array_data)
model = VGG16()
results = model.predict(array_data)
  • 識別結果を見やすくする

predictで識別した結果はただの数値の羅列であるため、これを見ても何に識別されたのかわかりません。そのため、文字に変換したり確率の高い順番に並べ替えたりしてから画面出力をしています。

print(decode_predictions(results))

使用方法と実行結果

下のコマンドで実行できます。(学習済みモデルを読み込むのには相当な時間がかかります。)

$ python3 vgg16.py dog.jpg     #dog.jpgという画像を識別させる
...
...
[[('n02113023', 'Pembroke', 0.41220817), ('n02115641', 'dingo', 0.29989296), ('n02113186', 'Cardigan', 0.06258105), ('n02085620', 'Chihuahua', 0.048699833), ('n02094258', 'Norwich_terrier', 0.03338512)]]

結果はリスト形式で出力されます。上の例では41%の確率でpembrokeと識別されています。確率の高い順で5つまでの候補が出ています。

さいごに

ラズパイ上でリアルタイムな画像識別をしたかったのですが、ラズパイにKerasのインストールができていないので成功していません。諦めずに頑張ろうと思います。また自分で学習用データを準備したり、モデルを学習させることができるように、今後も勉強を続けます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2