Sign up to take part
Registered users can ask their own questions, contribute to discussions, and be part of the Community!
Registered users can ask their own questions, contribute to discussions, and be part of the Community!
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):
model.compile(
optimizer="adam",
loss="categorical_crossentropy"
)
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!