画像分類モデルVGGで始める、深層学習の第一歩

深層学習実践編

深層学習の勉強を進めていると結局何ができるのかよくわからなくなってくることがあります
そんなときは途中の理論をすっ飛ばしてまずはできることを試してみましょう
深層学習の実力を体感することが理論を勉強するモチベーションにもつながります

おすすめの方法は深層学習による画像分類を自分自身でやってみることです
深層学習を勉強しているとテンソルや確率的勾配降下法、畳み込み層など難しい用語が出てきて敷居が高く感じます
ただし、今は深層学習を扱うライブラリ類が非常に充実しているのでコードを一行書くだけで
世界中の天才が開発した技術を手元で扱うことができます
意味の解釈や細かいチューニングには理論の勉強も必要ですが、試すだけであればとても手軽にできるようになりました
自身が深層学習の勉強を始めて、非常にオープンないい世界だなと感じたところです

TensorFlow開発入門という書籍で紹介されていた方法をベースに画像分類の簡単な試し方を紹介します

例として犬と猫の画像を準備しそれらを識別するテストを行います

ILVSRCという国際的な画像認識コンペティションが開催されており、
そこで優秀な成績をおさめたモデルはTensorflowやkerasなどのライブラリに実装されています
そのおかげでそれらのモデルはコード一行で呼び出すことができます

これらのモデルはImageNetというラベル付けされた画像データベースをすでに学習しています
通常画像の学習には相当なマシンパワーを必要としますがその部分をスキップすることができます

ImageNetは犬と猫という大まかな分類ではなく、ポメラニアンとかパピオンとか品種まで細かく指定して分類されています

以下が画像分類テストのスクリプトです

from tensorflow.python.keras.applications.vgg16 import VGG16

model = VGG16()

from tensorflow.python.keras.preprocessing.image import load_img

img_dog = load_img('img/dog.jpg', target_size=(224, 224))
img_cat = load_img('img/cat.jpg', target_size=(224, 224))

from tensorflow.python.keras.preprocessing.image import img_to_array

arr_dog = img_to_array(img_dog)
arr_cat = img_to_array(img_cat)

from tensorflow.python.keras.applications.vgg16 import preprocess_input

arr_cat = preprocess_input(arr_cat)
arr_dog = preprocess_input(arr_dog)

import numpy as np

arr_input = np.stack([arr_dog, arr_cat])

probs = model.predict(arr_input)

print('shape of probs:', probs.shape)

probs

from tensorflow.python.keras.applications.vgg16 import decode_predictions

results = decode_predictions(probs)

results[0]
print(results[0])

results[1]
print(results[1])

スクリプトをJupyter Notebookで実行した場合以下のように表示されます

コメント

タイトルとURLをコピーしました