【Keras】VGG16モデルを使って画像の判別をしてみた

 

Pythonの便利なライブラリであるKerasを使って、画像中の猫の種別を判別するコードを書いてみました。

 

学習済みモデルを使って画像を判別してみます。

 

[toc]

 

準備

 

TensorflowとKerasを使用します。Anaconda等で仮想環境を作成し、以下のコマンドでインストールします。

 

pip install tensorflow
pip install keras

 

jupyter notebook上でコードを書いていきます。

 

VGG16を使った予測

 

学習済みモデルVGG16を使って、予測するコードを記載していきます。

 

%matplotlib inline
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import sys

model = VGG16(weights='imagenet')

def predict(filename, featuresize):
    img = image.load_img(filename,target_size=(224,224))
    x = image.img_to_array(img)
    x = np.expand_dims(x,axis=0)
    preds = model.predict(preprocess_input(x))
    results = decode_predictions(preds,top=featuresize)[0]
    return results

def showim(filename):
    im = Image.open(filename)
    im_list = np.asarray(im)
    plt.figure(figsize=(20,10))
    plt.subplot(2,5,1)
    plt.imshow(im_list)  

 

VGG16()関数を使って、モデルをダウンロードしてきます。モデルサイズが500M程度あるので、初回実行時には3分程度かかります。

 

predict関数のfilenameは画像のファイル名です。featuresizeは予測結果の数です。5と指定した場合には、予測結果の上位5つが表示されます。

 

読み込んだ画像を表示するshowim()関数も作っておきます。

 

画像の判別

 

画像はなんでも良いのですが、適当な猫の画像をネットから拾ってきて判別してみました。

 

import pprint

filename = "data/keras/neko1869.jpg"

showim(filename)

# AIが判別した上位5個を表示する
results = predict(filename,5)

pprint.pprint(results)

 

実行結果は以下の通り。

 

 

「tiger_cat」はその名の通り、「虎猫」ですね。「tabby」は何でしょう。辞書で調べてみると「虎猫、ぶち猫」。

 

とりあえずなんらかの猫と判別されたようです。

 

 

せっかくなので、他の画像もやっています。

 

ケルピーは犬のようです。合ってますね。

オーストラリアン・ケルピーとは、オーストラリア原産の牧羊犬種である。

 

ゾウ

 

これも正解です。

 

おわり。

参考

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog