Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

VGG16を用いた画像分類

 画像のディープラーニング学習済みモデルVGG16を用いて画像の分類を行います。VGG16は140万個のラベル付き画像と1000種類のクラスからなるImageNetデータセットを用いたCNN(畳み込みニューラルネットワーク)学習済みモデルです。自分でディープラーニング学習済みモデルを作成するには大量の画像データと多くの時間が必要ですが、既存の学習済みモデルを用いることで簡単に画像分類が可能になります。
 ライブラリKeras上でVGG16モデルを用いて画像分類を行います。Kerasはディープラーニングのライブラリであるtensorflowのラッパーです。tensorflowの記述は難易度が高いですがKerasを用いると簡単な記述でディープラーニングを実行できます。
 tf.kerasの事前学習済VGG16モデルのカテゴリ名を日本語で表示する。にVGG16の1000カテゴリの日本語一覧があります。この中からオレンジ、新幹線について画像分類可能か試します。

準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリに、ディレクトリ'keras_classification'を作成しそこに保存しました。
f:id:T_A_T:20190714112831j:plain
orange.jpg

f:id:T_A_T:20190714112841j:plain
Shinkansen.jpg

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • Keras 2.2.4
  • tensorflow 1.13.1

orange.jpgの分類


コード

人工知能に関する断創録>>KerasでVGG16を使う記載のコードをほぼそのまま使用させていただいています。

from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
import requests
import numpy as np

model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)

# 画像読み込みと整形
filename='keras_classification/Shinkansen.jpg'
img = image.load_img(filename, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

# Top-5のクラスを予測する
preds = model.predict(preprocess_input(x))
results = decode_predictions(preds, top=5)[0]
for result in results:
    print(result)
実行結果

98.5%orangeとなり、ちゃんと分類されています。

('n07747607', 'orange', 0.98519367)
('n07749582', 'lemon', 0.0067060054)
('n03942813', 'ping-pong_ball', 0.0049978397)
('n02802426', 'basketball', 0.00036838316)
('n07753592', 'banana', 0.0003540767)


Shinkansen.jpgの分類


コード
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
import requests
import numpy as np

model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)

# 画像読み込みと整形
filename='keras_classification/Shinkansen.jpg'
img = image.load_img(filename, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

# Top-5のクラスを予測する
preds = model.predict(preprocess_input(x))
results = decode_predictions(preds, top=5)[0]
for result in results:
    print(result)
実行結果

98.8%bullet_train(新幹線)となりました。

('n02917067', 'bullet_train', 0.9875678)
('n03272562', 'electric_locomotive', 0.0052489303)
('n04252077', 'snowmobile', 0.0017137165)
('n03895866', 'passenger_car', 0.0012335283)
('n04335435', 'streetcar', 0.0010455378)

以下のサイトを参考にさせていただきました

人工知能に関する断創録>>KerasでVGG16を使う
tf.kerasの事前学習済VGG16モデルのカテゴリ名を日本語で表示する。

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村