はじめに
Kerasに用意されている学習済みモデルを使って画像認識をしてみます。 利用するモデルはInception-v3です。VGG16を使う例が [1, 2] にあったので、それを参考にしました。コード
ImageNetで学習済みの重みを自動でダウンロードしてくれるので、とても簡単に作れます。1 2 3 4 5 6 7 8 9 10 11 12 | # -*- coding: utf-8 -*-
from keras.applications.inception_v3 import InceptionV3, preprocess_input
from keras.applications.imagenet_utils import decode_predictions
from keras.preprocessing import image
import numpy as np
model = InceptionV3() # Load a model and its weights
img = image.load_img('images/jerryfish001.jpg', target_size=(299, 299))
x = image.img_to_array(img) # x.shape=(299, 299, 3)
x = np.expand_dims(x, axis=0) # Add an axis of batch-size. x.shape=(1, 299, 299, 3)
r = model.predict(preprocess_input(x)) # r has the probabilities for all classes
print(decode_predictions(r)) # Show the labels of the top-5 classes
|
結果
例として入力したimages/jerryfish001.jpg はこんな画像です(CC0(パブリックドメイン)で公開されていたものを利用)。 認識結果は、[[('n01910747', 'jellyfish', 0.97032261), ('n04330267', 'stove', 0.00067266426), ('n03729826', 'matchstick', 0.00045158088), ('n01914609', 'sea_anemone', 0.00038042956), ('n01930112', 'nematode', 0.00034168496)]]となりました(改行をいれて見やすくしています)。1列目がクラスのラベル、2列目がクラスの説明(人が読んで分かる名前)、3列目が事後確率です。この場合、事後確率97.03%でクラゲだと出力されています。正解ですね。
参考
[1] https://qiita.com/agumon/items/91f897b7f260f6aeca95[2] http://aidiary.hatenablog.com/entry/20170104/1483535144
0 件のコメント :
コメントを投稿