【Python/Keras】VGG16で画像認識・分類

Pythonの機械学習モジュール「Keras」でCNN(畳み込みニューラルネットワーク)を実装し、VGG16を利用して画像認識・分類する方法をソースコード付きでまとめました。

VGG16で画像認識・分類

VGG16とは、1000種類の膨大な画像データセット「ImageNet」で作成された16層の学習済みCNNモデルです。
2014年のILSVRC(ImageNet Large Scale Visual Recognition Challenge)で登場しました。
VGG16の概要を整理すると以下の通り。

項目 説明
構成 畳み込み13層、全結合3層の計16層
出力層 1000ユニット(1000分類するため)
分類数 1000
関連ページ CIFAR-10公式サイト【Python/Keras】CIFAR-10のデータセットをダウンロード【CNN】畳み込みニューラルネットワークの原理・仕組み

Kerasでは、VGG16の学習済みモデルを「keras.applications.vgg16」で簡単に呼び出して利用できます。

書式

from keras.applications.vgg16 import VGG16

model = VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None)
パラメータ 説明
include_top VGG16の全結合層(FC層)を含むかどうか。(元の1000分類をそのまま利用したいならTrue、カスタマイズして別の用途に使うときはFalse)
weights VGG16の重みの種類。(imagenetならImageNetを使って学習した重み、Noneならランダム重み)
input_tensor VGG16でFine-tuningする際に利用。
input_shape 入力画像の次元数。(NoneならImageNetの標準である(224, 224, 3))

サンプルコード

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import numpy as np
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image

def main():
    # VGG16の学習済みモデルを読み込み
    model = VGG16(weights='imagenet')

    # 入力画像の読み込み(VGG16の標準サイズ(224x224)にリサイズ)
    img = image.load_img("input.jpg", target_size=(224, 224))

    # NumPy配列に変換
    x = image.img_to_array(img)

    # 3次元配列→4次元配列
    x = np.expand_dims(x, axis=0)

    # 予測
    preds = model.predict(preprocess_input(x))

    # 予測結果(第1~5候補)の表示
    results = decode_predictions(preds, top=5)[0] # 出力ベクトルを文字列に変換
    for result in results:
        print(result)


if __name__ == '__main__':
    main()
関連ページ
1 Python入門 基本文法【Python/Keras】ディープラーニング入門・使い方
2 KerasでVGG16を使う
Python機械学習
技術雑記

コメント

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