[vgg] Update to official vgg16 model
authorParichay Kapoor <pk.kapoor@samsung.com>
Tue, 8 Dec 2020 04:32:41 +0000 (13:32 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Thu, 10 Dec 2020 10:15:32 +0000 (19:15 +0900)
Update the nntrainer and tensorflow to use official VGG16 model architecture
The FC layers setup is different as the cifar100 dataset has just 100 output classes
than 1000 classes of the imagenet.
Further, the number of epochs are reduced to 1.
When training, this can be increased appropriately.

**Self evaluation:**
1. Build test: [x]Passed [ ]Failed [ ]Skipped
2. Run test: [x]Passed [ ]Failed [ ]Skipped

Signed-off-by: Parichay Kapoor <pk.kapoor@samsung.com>
Applications/VGG/Tensorflow/vgg_keras.py
Applications/VGG/res/vgg.ini

index 7c48355..d5357ad 100755 (executable)
@@ -5,7 +5,7 @@
 #
 # @file        vgg_keras.py
 # @date        08 Oct 2020
-# @brief       This is VGG Example using Keras
+# @brief       This is VGG16 Example using Keras
 # @see         https://github.com/nnstreamer/nntrainer
 # @author      Jijoong Moon <jijoong.moon@samsung.com>
 # @bug         No known bugs except for NYI items
@@ -41,9 +41,9 @@ np.random.seed(SEED)
 batch_size =128
 Learning = True
 Test = False
-num_epoch = 1500
+num_epoch = 1
 DEBUG = True
-USE_FIT = False
+USE_FIT = True
 
 def save(filename, *data):
     with open(filename, 'ab+') as outfile:
@@ -74,31 +74,27 @@ def datagen(x_data, y_data, batch_size):
 def create_model():
     model = models.Sequential()
     model.add(tf.keras.Input(shape=(32, 32, 3)))
-    model.add(Conv2D(16, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(Conv2D(16, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(MaxPooling2D(pool_size=(2,2)))
-    model.add(Conv2D(32, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(Conv2D(32, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(MaxPooling2D(pool_size=(2,2)))
-    model.add(Conv2D(64, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
     model.add(Conv2D(64, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
     model.add(Conv2D(64, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
     model.add(MaxPooling2D(pool_size=(2,2)))
     model.add(Conv2D(128, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
     model.add(Conv2D(128, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(Conv2D(128, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
     model.add(MaxPooling2D(pool_size=(2,2)))
-    model.add(Conv2D(128, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(Conv2D(128, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
-    model.add(Conv2D(128, (3,3), padding='same', bias_initializer=initializers.Zeros()))
-    model.add(BatchNormalization())
-    model.add(Activation('relu'))
+    model.add(Conv2D(256, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(Conv2D(256, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(Conv2D(256, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(MaxPooling2D(pool_size=(2,2)))
+    model.add(Conv2D(512, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(Conv2D(512, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(Conv2D(512, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(MaxPooling2D(pool_size=(2,2)))
+    model.add(Conv2D(512, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(Conv2D(512, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
+    model.add(Conv2D(512, (3,3), padding='same', activation='relu', bias_initializer=initializers.Zeros()))
     model.add(MaxPooling2D(pool_size=(2,2)))
+
     model.add(Flatten())
-    model.add(layers.Dense(128, bias_initializer=initializers.Zeros()))
-    model.add(BatchNormalization())
-    model.add(Activation('relu'))
-    model.add(layers.Dense(128, bias_initializer=initializers.Zeros()))
+    model.add(layers.Dense(256, bias_initializer=initializers.Zeros()))
     model.add(BatchNormalization())
     model.add(Activation('relu'))
     model.add(layers.Dense(100, bias_initializer=initializers.Zeros()))
index 85bb2b3..6966e6c 100644 (file)
@@ -9,7 +9,7 @@
 [Model]
 Type = NeuralNetwork   # Network Type : Regression, KNN, NeuralNetwork
 Learning_rate = 1e-4   # Learning Rate
-Epochs = 1500          # Epochs
+Epochs = 1             # Epochs
 Optimizer = adam       # Optimizer : sgd (stochastic gradien decent),
                        #             adam (Adamtive Moment Estimation)
 Loss = cross           # Loss function : mse (mean squared error)
@@ -195,25 +195,15 @@ Type = conv2d
 input_layers = conv2d_c12_layer
 kernel_size = 3,3
 bias_initializer=zeros
+Activation=relu
 weight_initializer = xavier_uniform
 filters = 512
 stride = 1,1
 padding = 1,1
 
-[bn_normalization_b1_layer]
-Type = batch_normalization
-input_layers = conv2d_c13_layer
-epsilon = 1.0e-6
-momentum = 0.9
-Activation=relu
-beta_initializer = zeros
-gamma_initializer = ones
-moving_mean_initializer = zeros
-moving_variance_initializer = ones
-
 [pooling2d_p5_layer]
 Type=pooling2d
-input_layers = bn_normalization_b1_layer
+input_layers = conv2d_c13_layer
 pool_size = 2,2
 stride =2,2
 padding = 0,0
@@ -241,27 +231,9 @@ gamma_initializer = ones
 moving_mean_initializer = zeros
 moving_variance_initializer = ones
 
-[fc_f2_layer]
-Type = fully_connected
-input_layers = bn_normalization_b2_layer
-Unit = 256
-weight_initializer = xavier_uniform
-bias_initializer = zeros
-
-[bn_normalization_b3_layer]
-Type = batch_normalization
-input_layers = fc_f2_layer
-epsilon = 1.0e-6
-momentum = 0.9
-Activation = relu
-beta_initializer = zeros
-gamma_initializer = ones
-moving_mean_initializer = zeros
-moving_variance_initializer = ones
-
 [fc_f3_layer]
 Type = fully_connected
-input_layers = bn_normalization_b3_layer
+input_layers = bn_normalization_b2_layer
 Unit = 100             # Output Layer Dimension ( = Weight Width )
 weight_initializer = xavier_uniform
 bias_initializer = zeros