import os import gdown import tensorflow as tf from deepface.commons import functions # --------------------------------------- tf_version = int(tf.__version__.split(".", maxsplit=1)[0]) if tf_version == 1: from keras.models import Model, Sequential from keras.layers import ( Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dropout, Activation, ) else: from tensorflow.keras.models import Model, Sequential from tensorflow.keras.layers import ( Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dropout, Activation, ) # --------------------------------------- def baseModel(): model = Sequential() model.add(ZeroPadding2D((1, 1), input_shape=(224, 224, 3))) model.add(Convolution2D(64, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(64, (3, 3), activation="relu")) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(128, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(128, (3, 3), activation="relu")) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(256, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(256, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(256, (3, 3), activation="relu")) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(512, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(512, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(512, (3, 3), activation="relu")) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(512, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(512, (3, 3), activation="relu")) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(512, (3, 3), activation="relu")) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(Convolution2D(4096, (7, 7), activation="relu")) model.add(Dropout(0.5)) model.add(Convolution2D(4096, (1, 1), activation="relu")) model.add(Dropout(0.5)) model.add(Convolution2D(2622, (1, 1))) model.add(Flatten()) model.add(Activation("softmax")) return model # url = 'https://drive.google.com/uc?id=1CPSeum3HpopfomUEK1gybeuIVoeJT_Eo' def loadModel( url="https://github.com/serengil/deepface_models/releases/download/v1.0/vgg_face_weights.h5", ): model = baseModel() # ----------------------------------- home = functions.get_deepface_home() output = home + "/.deepface/weights/vgg_face_weights.h5" if os.path.isfile(output) != True: print("vgg_face_weights.h5 will be downloaded...") gdown.download(url, output, quiet=False) # ----------------------------------- model.load_weights(output) # ----------------------------------- # TO-DO: why? vgg_face_descriptor = Model(inputs=model.layers[0].input, outputs=model.layers[-2].output) return vgg_face_descriptor