VGG16を用いた画像分類
画像のディープラーニング学習済みモデルVGG16を用いて画像の分類を行います。VGG16は140万個のラベル付き画像と1000種類のクラスからなるImageNetデータセットを用いたCNN(畳み込みニューラルネットワーク)学習済みモデルです。自分でディープラーニング学習済みモデルを作成するには大量の画像データと多くの時間が必要ですが、既存の学習済みモデルを用いることで簡単に画像分類が可能になります。
ライブラリKeras上でVGG16モデルを用いて画像分類を行います。Kerasはディープラーニングのライブラリであるtensorflowのラッパーです。tensorflowの記述は難易度が高いですがKerasを用いると簡単な記述でディープラーニングを実行できます。
tf.kerasの事前学習済VGG16モデルのカテゴリ名を日本語で表示する。にVGG16の1000カテゴリの日本語一覧があります。この中からオレンジ、新幹線について画像分類可能か試します。
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリに、ディレクトリ'keras_classification'を作成しそこに保存しました。
orange.jpg
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モデルのカテゴリ名を日本語で表示する。