Web Application: 第6回 VGG16を構築する

Contents

VGG16をやってみます。

オックスフォード大学のVisual Geometry Groupが作った、畳み込み13層+全結合3層の 合計16層のニューラルネットワークです。

VGG16用の入力データを作成

VGG16の入力データの画像サイズは 224 x 224 である必要がありますので generate_inputdata.pyを改造して224×224のnpyデータを生成するgenerate_inputdata_224.pyを作りましょう。

また、それだと元々150角サイズが224角サイズになるわけですから、容量が増えてしまいます。(実際に600MBから1300MBに増えました。)

そこで、このスクリプトでは正規化するのをやめて、浮動小数点が発生するのを防ぎ容量を落とします。

代わりに、VGG16をやる直前に正規化を行う方針でいきます。

スクリプト:generate_inputdata_224.py

変更した部分は

  • 入力サイズ変更:image_size = 224
  • 保存名を変更:np.save(‘./image_files_224.npy’, xy)
  • 標準化中止 :data = data / 255.0 の行をコメントアウト

転移学習のモデル作成

では、データができたところでVGG16モデルを作成しましょう。

モジュール追加:from keras.applications import VGG16

ロードデータ名変更;

  • X_train, X_test, y_train, y_test = np.load(‘./image_files_224.npy’, allow_pickle=True)

正規化操作の追加:

  • X_train = X_train.astype(‘float’) / 255.0
  • X_test = X_train.astype(‘float’) / 255.0

モデル定義の変更

  •  model = VGG16( weights=’imagenet’, include_top=False, input_shape=(image_size,image_size, 3) )
  • print(‘Model loaded’)
  • model.summary()

結果

input_1 (InputLayer) (None, 224, 224, 3)について

1枚の224 x 224 サイズの画像データにつき、 RGBの3枚に分解されたデータが入力データとし入ります。

まだ何枚のデータが入ってくるかわかりませんのでNoneになっています。

畳み込み2回 プーリング1回 畳み込み2回 プーリング1回 畳み込み3回・・・、で 16層あるのだそうですがどういう数え方をしたら16になるかは理解できていません・・・。

ひとまず、できていました。このあと、全結合層を後ろに追加していくことになります。それは次回!

次回

Web Application: 第7回 VGG16を使った転移学習