Keras : 画像分類 : AlexNet

Keras : 画像分類 : AlexNet

作成 : (株)クラスキャット セールスインフォメーション
日時 : 05/09/2017

 

AlexNet in Keras

先に Lenet を試したので、AlexNet も簡単に試しておきます。AlexNet の詳細は ImageNet Classification with Deep Convolutional Neural Networks を参照してください。

メモがわりの実装は以下 :

model = Sequential()

model.add(Conv2D(48, 11, strides=3, activation='relu', padding='same'))
model.add(MaxPooling2D(3, strides=2))
model.add(BatchNormalization())

model.add(Conv2D(128, 5, strides=3, activation='relu', padding='same'))
model.add(MaxPooling2D(3, strides=2))
model.add(BatchNormalization())

model.add(Conv2D(192, 3, strides=1, activation='relu', padding='same'))
model.add(Conv2D(192, 3, strides=1, activation='relu', padding='same'))
model.add(Conv2D(128, 3, strides=1, activation='relu', padding='same'))
model.add(MaxPooling2D(3, strides=2))
model.add(BatchNormalization())

model.add(Flatten())
model.add(Dense(2048, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2048, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

モデルの summary() レポートです :

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1 (Conv2D)               (None, 75, 75, 48)        17472     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 37, 37, 48)        0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 37, 37, 48)        192       
_________________________________________________________________
conv2 (Conv2D)               (None, 13, 13, 128)       153728    
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 6, 6, 128)         0         
_________________________________________________________________
batch_normalization_2 (Batch (None, 6, 6, 128)         512       
_________________________________________________________________
conv3 (Conv2D)               (None, 6, 6, 192)         221376    
_________________________________________________________________
conv4 (Conv2D)               (None, 6, 6, 192)         331968    
_________________________________________________________________
conv5 (Conv2D)               (None, 6, 6, 128)         221312    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 2, 2, 128)         0         
_________________________________________________________________
batch_normalization_3 (Batch (None, 2, 2, 128)         512       
_________________________________________________________________
flatten_1 (Flatten)          (None, 512)               0         
_________________________________________________________________
dense1 (Dense)               (None, 2048)              1050624   
_________________________________________________________________
dropout_1 (Dropout)          (None, 2048)              0         
_________________________________________________________________
dense2 (Dense)               (None, 2048)              4196352   
_________________________________________________________________
dropout_2 (Dropout)          (None, 2048)              0         
_________________________________________________________________
dense3 (Dense)               (None, 17)                34833     
=================================================================
Total params: 6,228,881
Trainable params: 6,228,273
Non-trainable params: 608
_________________________________________________________________

 

ImageNet : 5 flowers synsets

TensorFlow と一緒に提供されている、ImageNet の5つの flowers synsets – daisy, dandelion, roses, sunflowers, tulips – を題材として訓練してみました。まずは 500 epochs :

更に 300 epochs 再調整 :

 

University of Oxford: 17 Category Flower Dataset

University of Oxford が提供してくれている、古典的な題材です。データセットの詳細は 17 Category Flower Dataset を参照してください。500 epochs トレーニング :

最後は over-fitting の傾向が見られます。

 

以上