Colaboratory 上で事前学習済みモデルを使い、自前画像のラベルを予測する。


最終的なノートブック

Colaboratory 上でノートブックを作る

Colaboratory 上で、

  • ファイル > Python 3 の新しいノートブック

から新しいノートブックを作ります。

  • 編集 > ノートブックの設定

を選択すると次のようなポップアップが表示されるので、ハードウェア アクセラレート のドロップダウンメニューから GPU を選びましょう。

事前学習済みモデルを読み込む

Tensorflow のバージョン設定

!pip list | grep tensorflow

上記を実行すると、バージョンが 1.15.0 であることがわかります。

!pip install -U tensorflow

上記を実行すると次のようなエラーが出ますが、今回の範囲内では問題ありませんでした。

もう一度 pip list でバージョンを確認しておきましょう。

ResNetを読みこむ

たったこれだけです。

import tensorflow as tf

resnet = tf.keras.applications.ResNet50V2(include_top=True, weights="imagenet")

入力と出力の形式を確認します。
入力画像は 224x224 であることがわかります。

resnet.input_shape
resnet.output_shape

入力に使う自前画像をアップロードして、読み込む

左ペインの ファイル から画像をアップロードします。
ここでは、dog.jpg という名前です。

次に、画像を読み込み、ResNetの入力用に変形します。

import numpy as np
from PIL import Image

img = Image.open("dog.jpg")
input = np.array(img.convert("RGB").resize((224, 224)))
input.shape

ラベルを予測します

前処理をする必要があるみたいです。
入力した画像の数xラベル数 になっていることがわかります。

preprocessed = tf.keras.applications.resnet_v2.preprocess_input(np.array([input]))
output = resnet.predict(preprocessed)
output.shape

結果をデコードします。

result = tf.keras.applications.resnet_v2.decode_predictions(output, top=10)[0]
result

  • ワンチャンよりもくまもんが注目されて、 teddy がトップで予測されています。
  • 3番目に toy_poodle が無事予測されています。
  • ケージのおりから shopping_cart が予測されているのでしょうか。
  • pick はわからないですが、ピックと一緒にギターの弦が写っている画像が多いみたいなので、ショッピングカートと同じ理由でしょうか。

入力画像と比較すると、概ね納得できる結果でした。