Using VGGface to transfer learning, check my deep learning code please? :-)

Benoni Registered Posts: 23 ✭✭✭✭

Hey there.

I want to train a model that given an image can predict the gender and eye color (Green/Blue) of the subject. So i have database full of 224x224 face photographs. They were extracted using MTCNN from online photographs. These photos are categorized to Blue-eyed Males, Blue-eyed Females, Green-eyed Males and Green-eyed Females. I have split the images 70/30 for Train/Test. Since i don't want to train the entire network from zero, i want to use VGGface.

Here's my preprocessing code:

from keras.preprocessing.image import img_to_array, load_img
def preprocess_image(image_file):
img = load_img(image_file,target_size=(224, 224, 3))
array = img_to_array(img)
array /= 255
return array

Here's my architecture code:

from keras.layers import Input, Dense, Flatten
from keras.models import Model
import os
import dataiku
from keras_vggface.vggface import VGGFace
from keras_vggface import utils

def build_model(input_shapes, n_classes=None):
image_shape = (224, 224, 3)
image_input_name = "path_preprocessed"
image_input = Input(shape=image_shape, name=image_input_name)
base_model = VGGFace(model='resnet50', include_top=False, weights=None, input_tensor=image_input)
folder = dataiku.Folder("VGG_model")
weights_path = "rcmalli_vggface_tf_notop_resnet50.h5"
base_model.load_weights(os.path.join(folder.get_path(), weights_path), by_name=True)
x = base_model.layers[-1].output
x = Flatten()(x)
predictions = Dense(n_classes, activation="softmax")(x)
model = Model(input=base_model.input, output=predictions)
return model

def compile_model(model):
return model

So 2 questions here.

1) Should i add this snippet to architecture? Why/Why not?

for layer in base_model.layers:
layer.trainable = False

2) Does this look OK?

base_model = VGGFace(model='resnet50', include_top=False, weights=None, input_tensor=image_input)

Thanks in advance and any input is welcome! laugh


Setup Info
      Help me…