VGG16で遊ぶ - 画像認識。
学習済みモデル、VGG16を使って簡単に画像認識ができればいいなということでネット上で色々検索して実行できるようになったので記録してきます。
いろんなサイトを見て試してみましたが、どうもうまくいかないということでエラーを検索してみた結果以下がでてきました。(Google Colabでやってます)
これを適応してやってみた結果うまくいきました。
基本的なところは
を参考にさせていただきました。
結果的には、
を
に変えれば実行可能になりました。めでたし、めでたし。
実行コードの説明
必要なライブラリをインポート
keras関係 機械学習のライブラリ。
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.utils import load_img, img_to_array
計算のライブラリ。配列、ベクトル計算などなど機械学習でよく使われます。
import numpy as np
モデル。これが機械学習の本体。画像認識の学習済み。本体 VGG16を変数、modelに代入して使えるようにします。
model = VGG16(weights='imagenet')
調べたい画像を読み込みます。画像は"an.jpg"を読み込みます。画像サイズを(224, 224)に変換します。これでVGG16で認識することができるようになります。画像はColabのデータフォルダに入れておく必要があります。
img = load_img('an.jpg', target_size = (224, 224))
配列に変換、テンソルに変換
x = img_to_array(img)
x = np.expand_dims(x, axis=0)
これで準備はOK。
予測します。
preds = model.predict(preprocess_input(x))
これをわかりやすく表示できるように変換して出力します。
results = decode_predictions(preds, top=5)[0]
for result in results:
print(result)
Colabのインスペクタのデータを保存する部分に調べたい画像ファイルに"an.jpg"というファイル名で保存してやり実行すれば
1/1 [==============================] - 0s 124ms/step
('n07753592', 'banana', 0.92156714)
('n01945685', 'slug', 0.07700058)
('n03532672', 'hook', 0.00021227507)
('n01944390', 'snail', 0.0001744318)
('n07747607', 'orange', 0.0001331388)
という感じで出力されます。この場合はunsplashよりバナナの画像をダウンロードして使ってみた結果です。92%の確率で"banana"とでてきました。正しく認識していることが確認できました。
全コードです。
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.utils import load_img, img_to_array
import numpy as np
model = VGG16(weights='imagenet')
img = load_img('an.jpg', target_size = (224, 224))
x = img_to_array(img)
x = np.expand_dims(x, axis=0)
# Top-5のクラスを予測する
# VGG16の1000クラスはdecode_predictions()で文字列に変換される
preds = model.predict(preprocess_input(x))
results = decode_predictions(preds, top=5)[0]
for result in results:
print(result)
この記事が気に入ったらサポートをしてみませんか?