mirror of
https://github.com/serengil/deepface.git
synced 2025-06-07 03:55:21 +00:00
81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
import os
|
|
from pathlib import Path
|
|
from keras.models import Model, Sequential
|
|
from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation
|
|
import gdown
|
|
|
|
#---------------------------------------
|
|
|
|
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
|
|
|
|
def loadModel():
|
|
|
|
model = baseModel()
|
|
|
|
#-----------------------------------
|
|
|
|
home = str(Path.home())
|
|
|
|
if os.path.isfile(home+'/.deepface/weights/vgg_face_weights.h5') != True:
|
|
print("vgg_face_weights.h5 will be downloaded...")
|
|
|
|
url = 'https://drive.google.com/uc?id=1CPSeum3HpopfomUEK1gybeuIVoeJT_Eo'
|
|
output = home+'/.deepface/weights/vgg_face_weights.h5'
|
|
gdown.download(url, output, quiet=False)
|
|
|
|
#-----------------------------------
|
|
|
|
model.load_weights(home+'/.deepface/weights/vgg_face_weights.h5')
|
|
|
|
#-----------------------------------
|
|
|
|
#TO-DO: why?
|
|
vgg_face_descriptor = Model(inputs=model.layers[0].input, outputs=model.layers[-2].output)
|
|
|
|
return vgg_face_descriptor |