def build_model(): home = functions.get_deepface_home() import dlib #this requirement is not a must that's why imported here #check required file exists in the home/.deepface/weights folder if os.path.isfile( home + '/.deepface/weights/shape_predictor_5_face_landmarks.dat') != True: print( "shape_predictor_5_face_landmarks.dat.bz2 is going to be downloaded" ) url = "http://dlib.net/files/shape_predictor_5_face_landmarks.dat.bz2" output = home + '/.deepface/weights/' + url.split("/")[-1] gdown.download(url, output, quiet=False) zipfile = bz2.BZ2File(output) data = zipfile.read() newfilepath = output[:-4] #discard .bz2 extension open(newfilepath, 'wb').write(data) face_detector = dlib.get_frontal_face_detector() sp = dlib.shape_predictor( home + "/.deepface/weights/shape_predictor_5_face_landmarks.dat") detector = {} detector["face_detector"] = face_detector detector["sp"] = sp return detector
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
def loadModel(url = 'https://github.com/serengil/deepface_models/releases/download/v1.0/age_model_weights.h5'): model = VGGFace.baseModel() #-------------------------- classes = 101 base_model_output = Sequential() base_model_output = Convolution2D(classes, (1, 1), name='predictions')(model.layers[-4].output) base_model_output = Flatten()(base_model_output) base_model_output = Activation('softmax')(base_model_output) #-------------------------- age_model = Model(inputs=model.input, outputs=base_model_output) #-------------------------- #load weights home = functions.get_deepface_home() if os.path.isfile(home+'/.deepface/weights/age_model_weights.h5') != True: print("age_model_weights.h5 will be downloaded...") output = home+'/.deepface/weights/age_model_weights.h5' gdown.download(url, output, quiet=False) age_model.load_weights(home+'/.deepface/weights/age_model_weights.h5') return age_model
def __init__(self): #this is not a must dependency import dlib #19.20.0 self.layers = [DlibMetaData()] #--------------------- home = functions.get_deepface_home() weight_file = home+'/.deepface/weights/dlib_face_recognition_resnet_model_v1.dat' #--------------------- #download pre-trained model if it does not exist if os.path.isfile(weight_file) != True: print("dlib_face_recognition_resnet_model_v1.dat is going to be downloaded") url = "http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2" output = home+'/.deepface/weights/'+url.split("/")[-1] gdown.download(url, output, quiet=False) zipfile = bz2.BZ2File(output) data = zipfile.read() newfilepath = output[:-4] #discard .bz2 extension open(newfilepath, 'wb').write(data) #--------------------- model = dlib.face_recognition_model_v1(weight_file) self.__model = model #--------------------- return None #classes must return None
def loadModel(url = 'https://github.com/serengil/deepface_models/releases/download/v1.0/facial_expression_model_weights.h5'): num_classes = 7 model = Sequential() #1st convolution layer model.add(Conv2D(64, (5, 5), activation='relu', input_shape=(48,48,1))) model.add(MaxPooling2D(pool_size=(5,5), strides=(2, 2))) #2nd convolution layer model.add(Conv2D(64, (3, 3), activation='relu')) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(AveragePooling2D(pool_size=(3,3), strides=(2, 2))) #3rd convolution layer model.add(Conv2D(128, (3, 3), activation='relu')) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(AveragePooling2D(pool_size=(3,3), strides=(2, 2))) model.add(Flatten()) #fully connected neural networks model.add(Dense(1024, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(1024, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(num_classes, activation='softmax')) #---------------------------- home = functions.get_deepface_home() if os.path.isfile(home+'/.deepface/weights/facial_expression_model_weights.h5') != True: print("facial_expression_model_weights.h5 will be downloaded...") output = home+'/.deepface/weights/facial_expression_model_weights.h5' gdown.download(url, output, quiet=False) """ #google drive source downloads zip output = home+'/.deepface/weights/facial_expression_model_weights.zip' gdown.download(url, output, quiet=False) #unzip facial_expression_model_weights.zip with zipfile.ZipFile(output, 'r') as zip_ref: zip_ref.extractall(home+'/.deepface/weights/') """ model.load_weights(home+'/.deepface/weights/facial_expression_model_weights.h5') return model
def loadModel( url='https://github.com/swghosh/DeepFace/releases/download/weights-vggface2-2d-aligned/VGGFace2_DeepFace_weights_val-0.9034.h5.zip' ): base_model = Sequential() base_model.add( Convolution2D(32, (11, 11), activation='relu', name='C1', input_shape=(152, 152, 3))) base_model.add( MaxPooling2D(pool_size=3, strides=2, padding='same', name='M2')) base_model.add(Convolution2D(16, (9, 9), activation='relu', name='C3')) base_model.add(LocallyConnected2D(16, (9, 9), activation='relu', name='L4')) base_model.add( LocallyConnected2D(16, (7, 7), strides=2, activation='relu', name='L5')) base_model.add(LocallyConnected2D(16, (5, 5), activation='relu', name='L6')) base_model.add(Flatten(name='F0')) base_model.add(Dense(4096, activation='relu', name='F7')) base_model.add(Dropout(rate=0.5, name='D0')) base_model.add(Dense(8631, activation='softmax', name='F8')) #--------------------------------- home = functions.get_deepface_home() if os.path.isfile( home + '/.deepface/weights/VGGFace2_DeepFace_weights_val-0.9034.h5' ) != True: print("VGGFace2_DeepFace_weights_val-0.9034.h5 will be downloaded...") output = home + '/.deepface/weights/VGGFace2_DeepFace_weights_val-0.9034.h5.zip' gdown.download(url, output, quiet=False) #unzip VGGFace2_DeepFace_weights_val-0.9034.h5.zip with zipfile.ZipFile(output, 'r') as zip_ref: zip_ref.extractall(home + '/.deepface/weights/') base_model.load_weights( home + '/.deepface/weights/VGGFace2_DeepFace_weights_val-0.9034.h5') #drop F8 and D0. F7 is the representation layer. deepface_model = Model(inputs=base_model.layers[0].input, outputs=base_model.layers[-3].output) return deepface_model
def loadModel( url='https://github.com/serengil/deepface_models/releases/download/v1.0/deepid_keras_weights.h5' ): myInput = Input(shape=(55, 47, 3)) x = Conv2D(20, (4, 4), name='Conv1', activation='relu', input_shape=(55, 47, 3))(myInput) x = MaxPooling2D(pool_size=2, strides=2, name='Pool1')(x) x = Dropout(rate=0.99, name='D1')(x) x = Conv2D(40, (3, 3), name='Conv2', activation='relu')(x) x = MaxPooling2D(pool_size=2, strides=2, name='Pool2')(x) x = Dropout(rate=0.99, name='D2')(x) x = Conv2D(60, (3, 3), name='Conv3', activation='relu')(x) x = MaxPooling2D(pool_size=2, strides=2, name='Pool3')(x) x = Dropout(rate=0.99, name='D3')(x) x1 = Flatten()(x) fc11 = Dense(160, name='fc11')(x1) x2 = Conv2D(80, (2, 2), name='Conv4', activation='relu')(x) x2 = Flatten()(x2) fc12 = Dense(160, name='fc12')(x2) y = Add()([fc11, fc12]) y = Activation('relu', name='deepid')(y) model = Model(inputs=[myInput], outputs=y) #--------------------------------- home = functions.get_deepface_home() if os.path.isfile(home + '/.deepface/weights/deepid_keras_weights.h5') != True: print("deepid_keras_weights.h5 will be downloaded...") output = home + '/.deepface/weights/deepid_keras_weights.h5' gdown.download(url, output, quiet=False) model.load_weights(home + '/.deepface/weights/deepid_keras_weights.h5') return model
def load_model( url="https://github.com/opencv/opencv_zoo/raw/master/models/face_recognition_sface/face_recognition_sface_2021dec.onnx" ): home = functions.get_deepface_home() file_name = home + '/.deepface/weights/face_recognition_sface_2021dec.onnx' if not os.path.isfile(file_name): print("sface weights will be downloaded...") gdown.download(url, file_name, quiet=False) model = SFaceModel(model_path=file_name) return model
def loadModel( url='https://github.com/serengil/deepface_models/releases/download/v1.0/race_model_single_batch.h5' ): model = VGGFace.baseModel() #-------------------------- classes = 6 base_model_output = Sequential() base_model_output = Convolution2D(classes, (1, 1), name='predictions')( model.layers[-4].output) base_model_output = Flatten()(base_model_output) base_model_output = Activation('softmax')(base_model_output) #-------------------------- race_model = Model(inputs=model.input, outputs=base_model_output) #-------------------------- #load weights home = functions.get_deepface_home() if os.path.isfile(home + '/.deepface/weights/race_model_single_batch.h5') != True: print("race_model_single_batch.h5 will be downloaded...") output = home + '/.deepface/weights/race_model_single_batch.h5' gdown.download(url, output, quiet=False) """ #google drive source downloads zip output = home+'/.deepface/weights/race_model_single_batch.zip' gdown.download(url, output, quiet=False) #unzip race_model_single_batch.zip with zipfile.ZipFile(output, 'r') as zip_ref: zip_ref.extractall(home+'/.deepface/weights/') """ race_model.load_weights(home + '/.deepface/weights/race_model_single_batch.h5') return race_model
def build_gbm(): #this is not a must dependency import lightgbm as lgb #lightgbm==2.3.1 home = functions.get_deepface_home() if os.path.isfile(home+'/.deepface/weights/face-recognition-ensemble-model.txt') != True: print("face-recognition-ensemble-model.txt will be downloaded...") url = 'https://raw.githubusercontent.com/serengil/deepface/master/deepface/models/face-recognition-ensemble-model.txt' output = home+'/.deepface/weights/face-recognition-ensemble-model.txt' gdown.download(url, output, quiet=False) ensemble_model_path = home+'/.deepface/weights/face-recognition-ensemble-model.txt' deepface_ensemble = lgb.Booster(model_file = ensemble_model_path) return deepface_ensemble
def build_model(): home = functions.get_deepface_home() #model structure if os.path.isfile(home + '/.deepface/weights/deploy.prototxt') != True: print("deploy.prototxt will be downloaded...") url = "https://github.com/opencv/opencv/raw/3.4.0/samples/dnn/face_detector/deploy.prototxt" output = home + '/.deepface/weights/deploy.prototxt' gdown.download(url, output, quiet=False) #pre-trained weights if os.path.isfile( home + '/.deepface/weights/res10_300x300_ssd_iter_140000.caffemodel' ) != True: print("res10_300x300_ssd_iter_140000.caffemodel will be downloaded...") url = "https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel" output = home + '/.deepface/weights/res10_300x300_ssd_iter_140000.caffemodel' gdown.download(url, output, quiet=False) face_detector = cv2.dnn.readNetFromCaffe( home + "/.deepface/weights/deploy.prototxt", home + "/.deepface/weights/res10_300x300_ssd_iter_140000.caffemodel") eye_detector = OpenCvWrapper.build_cascade("haarcascade_eye") detector = {} detector["face_detector"] = face_detector detector["eye_detector"] = eye_detector return detector
def loadModel( url='https://github.com/serengil/deepface_models/releases/download/v1.0/arcface_weights.h5' ): base_model = ResNet34() inputs = base_model.inputs[0] arcface_model = base_model.outputs[0] arcface_model = keras.layers.BatchNormalization( momentum=0.9, epsilon=2e-5)(arcface_model) arcface_model = keras.layers.Dropout(0.4)(arcface_model) arcface_model = keras.layers.Flatten()(arcface_model) arcface_model = keras.layers.Dense( 512, activation=None, use_bias=True, kernel_initializer="glorot_normal")(arcface_model) embedding = keras.layers.BatchNormalization(momentum=0.9, epsilon=2e-5, name="embedding", scale=True)(arcface_model) model = keras.models.Model(inputs, embedding, name=base_model.name) #--------------------------------------- #check the availability of pre-trained weights home = functions.get_deepface_home() file_name = "arcface_weights.h5" output = home + '/.deepface/weights/' + file_name if os.path.isfile(output) != True: print(file_name, " will be downloaded to ", output) gdown.download(url, output, quiet=False) #--------------------------------------- model.load_weights(output) return model
def loadModel( url='https://github.com/serengil/deepface_models/releases/download/v1.0/facenet512_weights.h5' ): model = Facenet.InceptionResNetV2(dimension=512) #------------------------- home = functions.get_deepface_home() if os.path.isfile(home + '/.deepface/weights/facenet512_weights.h5') != True: print("facenet512_weights.h5 will be downloaded...") output = home + '/.deepface/weights/facenet512_weights.h5' gdown.download(url, output, quiet=False) #------------------------- model.load_weights(home + '/.deepface/weights/facenet512_weights.h5') #------------------------- return model
def loadModel(url = 'https://github.com/serengil/deepface_models/releases/download/v1.0/openface_weights.h5'): myInput = Input(shape=(96, 96, 3)) x = ZeroPadding2D(padding=(3, 3), input_shape=(96, 96, 3))(myInput) x = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(x) x = BatchNormalization(axis=3, epsilon=0.00001, name='bn1')(x) x = Activation('relu')(x) x = ZeroPadding2D(padding=(1, 1))(x) x = MaxPooling2D(pool_size=3, strides=2)(x) x = Lambda(lambda x: tf.nn.lrn(x, alpha=1e-4, beta=0.75), name='lrn_1')(x) x = Conv2D(64, (1, 1), name='conv2')(x) x = BatchNormalization(axis=3, epsilon=0.00001, name='bn2')(x) x = Activation('relu')(x) x = ZeroPadding2D(padding=(1, 1))(x) x = Conv2D(192, (3, 3), name='conv3')(x) x = BatchNormalization(axis=3, epsilon=0.00001, name='bn3')(x) x = Activation('relu')(x) x = Lambda(lambda x: tf.nn.lrn(x, alpha=1e-4, beta=0.75), name='lrn_2')(x) #x is equal added x = ZeroPadding2D(padding=(1, 1))(x) x = MaxPooling2D(pool_size=3, strides=2)(x) # Inception3a inception_3a_3x3 = Conv2D(96, (1, 1), name='inception_3a_3x3_conv1')(x) inception_3a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_3x3_bn1')(inception_3a_3x3) inception_3a_3x3 = Activation('relu')(inception_3a_3x3) inception_3a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3a_3x3) inception_3a_3x3 = Conv2D(128, (3, 3), name='inception_3a_3x3_conv2')(inception_3a_3x3) inception_3a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_3x3_bn2')(inception_3a_3x3) inception_3a_3x3 = Activation('relu')(inception_3a_3x3) inception_3a_5x5 = Conv2D(16, (1, 1), name='inception_3a_5x5_conv1')(x) inception_3a_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_5x5_bn1')(inception_3a_5x5) inception_3a_5x5 = Activation('relu')(inception_3a_5x5) inception_3a_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3a_5x5) inception_3a_5x5 = Conv2D(32, (5, 5), name='inception_3a_5x5_conv2')(inception_3a_5x5) inception_3a_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_5x5_bn2')(inception_3a_5x5) inception_3a_5x5 = Activation('relu')(inception_3a_5x5) inception_3a_pool = MaxPooling2D(pool_size=3, strides=2)(x) inception_3a_pool = Conv2D(32, (1, 1), name='inception_3a_pool_conv')(inception_3a_pool) inception_3a_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_pool_bn')(inception_3a_pool) inception_3a_pool = Activation('relu')(inception_3a_pool) inception_3a_pool = ZeroPadding2D(padding=((3, 4), (3, 4)))(inception_3a_pool) inception_3a_1x1 = Conv2D(64, (1, 1), name='inception_3a_1x1_conv')(x) inception_3a_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_1x1_bn')(inception_3a_1x1) inception_3a_1x1 = Activation('relu')(inception_3a_1x1) inception_3a = concatenate([inception_3a_3x3, inception_3a_5x5, inception_3a_pool, inception_3a_1x1], axis=3) # Inception3b inception_3b_3x3 = Conv2D(96, (1, 1), name='inception_3b_3x3_conv1')(inception_3a) inception_3b_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_3x3_bn1')(inception_3b_3x3) inception_3b_3x3 = Activation('relu')(inception_3b_3x3) inception_3b_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3b_3x3) inception_3b_3x3 = Conv2D(128, (3, 3), name='inception_3b_3x3_conv2')(inception_3b_3x3) inception_3b_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_3x3_bn2')(inception_3b_3x3) inception_3b_3x3 = Activation('relu')(inception_3b_3x3) inception_3b_5x5 = Conv2D(32, (1, 1), name='inception_3b_5x5_conv1')(inception_3a) inception_3b_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_5x5_bn1')(inception_3b_5x5) inception_3b_5x5 = Activation('relu')(inception_3b_5x5) inception_3b_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3b_5x5) inception_3b_5x5 = Conv2D(64, (5, 5), name='inception_3b_5x5_conv2')(inception_3b_5x5) inception_3b_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_5x5_bn2')(inception_3b_5x5) inception_3b_5x5 = Activation('relu')(inception_3b_5x5) inception_3b_pool = Lambda(lambda x: x**2, name='power2_3b')(inception_3a) inception_3b_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3))(inception_3b_pool) inception_3b_pool = Lambda(lambda x: x*9, name='mult9_3b')(inception_3b_pool) inception_3b_pool = Lambda(lambda x: K.sqrt(x), name='sqrt_3b')(inception_3b_pool) inception_3b_pool = Conv2D(64, (1, 1), name='inception_3b_pool_conv')(inception_3b_pool) inception_3b_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_pool_bn')(inception_3b_pool) inception_3b_pool = Activation('relu')(inception_3b_pool) inception_3b_pool = ZeroPadding2D(padding=(4, 4))(inception_3b_pool) inception_3b_1x1 = Conv2D(64, (1, 1), name='inception_3b_1x1_conv')(inception_3a) inception_3b_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_1x1_bn')(inception_3b_1x1) inception_3b_1x1 = Activation('relu')(inception_3b_1x1) inception_3b = concatenate([inception_3b_3x3, inception_3b_5x5, inception_3b_pool, inception_3b_1x1], axis=3) # Inception3c inception_3c_3x3 = Conv2D(128, (1, 1), strides=(1, 1), name='inception_3c_3x3_conv1')(inception_3b) inception_3c_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3c_3x3_bn1')(inception_3c_3x3) inception_3c_3x3 = Activation('relu')(inception_3c_3x3) inception_3c_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3c_3x3) inception_3c_3x3 = Conv2D(256, (3, 3), strides=(2, 2), name='inception_3c_3x3_conv'+'2')(inception_3c_3x3) inception_3c_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3c_3x3_bn'+'2')(inception_3c_3x3) inception_3c_3x3 = Activation('relu')(inception_3c_3x3) inception_3c_5x5 = Conv2D(32, (1, 1), strides=(1, 1), name='inception_3c_5x5_conv1')(inception_3b) inception_3c_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3c_5x5_bn1')(inception_3c_5x5) inception_3c_5x5 = Activation('relu')(inception_3c_5x5) inception_3c_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3c_5x5) inception_3c_5x5 = Conv2D(64, (5, 5), strides=(2, 2), name='inception_3c_5x5_conv'+'2')(inception_3c_5x5) inception_3c_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3c_5x5_bn'+'2')(inception_3c_5x5) inception_3c_5x5 = Activation('relu')(inception_3c_5x5) inception_3c_pool = MaxPooling2D(pool_size=3, strides=2)(inception_3b) inception_3c_pool = ZeroPadding2D(padding=((0, 1), (0, 1)))(inception_3c_pool) inception_3c = concatenate([inception_3c_3x3, inception_3c_5x5, inception_3c_pool], axis=3) #inception 4a inception_4a_3x3 = Conv2D(96, (1, 1), strides=(1, 1), name='inception_4a_3x3_conv'+'1')(inception_3c) inception_4a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4a_3x3_bn'+'1')(inception_4a_3x3) inception_4a_3x3 = Activation('relu')(inception_4a_3x3) inception_4a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_4a_3x3) inception_4a_3x3 = Conv2D(192, (3, 3), strides=(1, 1), name='inception_4a_3x3_conv'+'2')(inception_4a_3x3) inception_4a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4a_3x3_bn'+'2')(inception_4a_3x3) inception_4a_3x3 = Activation('relu')(inception_4a_3x3) inception_4a_5x5 = Conv2D(32, (1,1), strides=(1,1), name='inception_4a_5x5_conv1')(inception_3c) inception_4a_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4a_5x5_bn1')(inception_4a_5x5) inception_4a_5x5 = Activation('relu')(inception_4a_5x5) inception_4a_5x5 = ZeroPadding2D(padding=(2,2))(inception_4a_5x5) inception_4a_5x5 = Conv2D(64, (5,5), strides=(1,1), name='inception_4a_5x5_conv'+'2')(inception_4a_5x5) inception_4a_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4a_5x5_bn'+'2')(inception_4a_5x5) inception_4a_5x5 = Activation('relu')(inception_4a_5x5) inception_4a_pool = Lambda(lambda x: x**2, name='power2_4a')(inception_3c) inception_4a_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3))(inception_4a_pool) inception_4a_pool = Lambda(lambda x: x*9, name='mult9_4a')(inception_4a_pool) inception_4a_pool = Lambda(lambda x: K.sqrt(x), name='sqrt_4a')(inception_4a_pool) inception_4a_pool = Conv2D(128, (1,1), strides=(1,1), name='inception_4a_pool_conv'+'')(inception_4a_pool) inception_4a_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4a_pool_bn'+'')(inception_4a_pool) inception_4a_pool = Activation('relu')(inception_4a_pool) inception_4a_pool = ZeroPadding2D(padding=(2, 2))(inception_4a_pool) inception_4a_1x1 = Conv2D(256, (1, 1), strides=(1, 1), name='inception_4a_1x1_conv'+'')(inception_3c) inception_4a_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4a_1x1_bn'+'')(inception_4a_1x1) inception_4a_1x1 = Activation('relu')(inception_4a_1x1) inception_4a = concatenate([inception_4a_3x3, inception_4a_5x5, inception_4a_pool, inception_4a_1x1], axis=3) #inception4e inception_4e_3x3 = Conv2D(160, (1,1), strides=(1,1), name='inception_4e_3x3_conv'+'1')(inception_4a) inception_4e_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4e_3x3_bn'+'1')(inception_4e_3x3) inception_4e_3x3 = Activation('relu')(inception_4e_3x3) inception_4e_3x3 = ZeroPadding2D(padding=(1, 1))(inception_4e_3x3) inception_4e_3x3 = Conv2D(256, (3,3), strides=(2,2), name='inception_4e_3x3_conv'+'2')(inception_4e_3x3) inception_4e_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4e_3x3_bn'+'2')(inception_4e_3x3) inception_4e_3x3 = Activation('relu')(inception_4e_3x3) inception_4e_5x5 = Conv2D(64, (1,1), strides=(1,1), name='inception_4e_5x5_conv'+'1')(inception_4a) inception_4e_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4e_5x5_bn'+'1')(inception_4e_5x5) inception_4e_5x5 = Activation('relu')(inception_4e_5x5) inception_4e_5x5 = ZeroPadding2D(padding=(2, 2))(inception_4e_5x5) inception_4e_5x5 = Conv2D(128, (5,5), strides=(2,2), name='inception_4e_5x5_conv'+'2')(inception_4e_5x5) inception_4e_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_4e_5x5_bn'+'2')(inception_4e_5x5) inception_4e_5x5 = Activation('relu')(inception_4e_5x5) inception_4e_pool = MaxPooling2D(pool_size=3, strides=2)(inception_4a) inception_4e_pool = ZeroPadding2D(padding=((0, 1), (0, 1)))(inception_4e_pool) inception_4e = concatenate([inception_4e_3x3, inception_4e_5x5, inception_4e_pool], axis=3) #inception5a inception_5a_3x3 = Conv2D(96, (1,1), strides=(1,1), name='inception_5a_3x3_conv'+'1')(inception_4e) inception_5a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5a_3x3_bn'+'1')(inception_5a_3x3) inception_5a_3x3 = Activation('relu')(inception_5a_3x3) inception_5a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_5a_3x3) inception_5a_3x3 = Conv2D(384, (3,3), strides=(1,1), name='inception_5a_3x3_conv'+'2')(inception_5a_3x3) inception_5a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5a_3x3_bn'+'2')(inception_5a_3x3) inception_5a_3x3 = Activation('relu')(inception_5a_3x3) inception_5a_pool = Lambda(lambda x: x**2, name='power2_5a')(inception_4e) inception_5a_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3))(inception_5a_pool) inception_5a_pool = Lambda(lambda x: x*9, name='mult9_5a')(inception_5a_pool) inception_5a_pool = Lambda(lambda x: K.sqrt(x), name='sqrt_5a')(inception_5a_pool) inception_5a_pool = Conv2D(96, (1,1), strides=(1,1), name='inception_5a_pool_conv'+'')(inception_5a_pool) inception_5a_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5a_pool_bn'+'')(inception_5a_pool) inception_5a_pool = Activation('relu')(inception_5a_pool) inception_5a_pool = ZeroPadding2D(padding=(1,1))(inception_5a_pool) inception_5a_1x1 = Conv2D(256, (1,1), strides=(1,1), name='inception_5a_1x1_conv'+'')(inception_4e) inception_5a_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5a_1x1_bn'+'')(inception_5a_1x1) inception_5a_1x1 = Activation('relu')(inception_5a_1x1) inception_5a = concatenate([inception_5a_3x3, inception_5a_pool, inception_5a_1x1], axis=3) #inception_5b inception_5b_3x3 = Conv2D(96, (1,1), strides=(1,1), name='inception_5b_3x3_conv'+'1')(inception_5a) inception_5b_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5b_3x3_bn'+'1')(inception_5b_3x3) inception_5b_3x3 = Activation('relu')(inception_5b_3x3) inception_5b_3x3 = ZeroPadding2D(padding=(1,1))(inception_5b_3x3) inception_5b_3x3 = Conv2D(384, (3,3), strides=(1,1), name='inception_5b_3x3_conv'+'2')(inception_5b_3x3) inception_5b_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5b_3x3_bn'+'2')(inception_5b_3x3) inception_5b_3x3 = Activation('relu')(inception_5b_3x3) inception_5b_pool = MaxPooling2D(pool_size=3, strides=2)(inception_5a) inception_5b_pool = Conv2D(96, (1,1), strides=(1,1), name='inception_5b_pool_conv'+'')(inception_5b_pool) inception_5b_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5b_pool_bn'+'')(inception_5b_pool) inception_5b_pool = Activation('relu')(inception_5b_pool) inception_5b_pool = ZeroPadding2D(padding=(1, 1))(inception_5b_pool) inception_5b_1x1 = Conv2D(256, (1,1), strides=(1,1), name='inception_5b_1x1_conv'+'')(inception_5a) inception_5b_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_5b_1x1_bn'+'')(inception_5b_1x1) inception_5b_1x1 = Activation('relu')(inception_5b_1x1) inception_5b = concatenate([inception_5b_3x3, inception_5b_pool, inception_5b_1x1], axis=3) av_pool = AveragePooling2D(pool_size=(3, 3), strides=(1, 1))(inception_5b) reshape_layer = Flatten()(av_pool) dense_layer = Dense(128, name='dense_layer')(reshape_layer) norm_layer = Lambda(lambda x: K.l2_normalize(x, axis=1), name='norm_layer')(dense_layer) # Final Model model = Model(inputs=[myInput], outputs=norm_layer) #----------------------------------- home = functions.get_deepface_home() if os.path.isfile(home+'/.deepface/weights/openface_weights.h5') != True: print("openface_weights.h5 will be downloaded...") output = home+'/.deepface/weights/openface_weights.h5' gdown.download(url, output, quiet=False) #----------------------------------- model.load_weights(home+'/.deepface/weights/openface_weights.h5') #----------------------------------- return model