Oxford VGGFace Implementation using Keras Functional Framework v2+
- Models are converted from original caffe networks.
- It supports only Tensorflow backend.
- You can also load only feature extraction layers with VGGFace(include_top=False) initiation.
- When you use it for the first time , weights are downloaded and stored in ~/.keras/models/vggface folder.
- If you don't know where to start check the blog posts that are using this library.
# Most Recent One (Suggested)
pip install git+https://github.com/rcmalli/keras-vggface.git
# Release Version
pip install keras_vggface
- Keras v2.2.4
- Tensorflow v1.14.0
- Warning: Theano backend is not supported/tested for now.
from keras_vggface.vggface import VGGFace
# Based on VGG16 architecture -> old paper(2015)
vggface = VGGFace(model='vgg16') # or VGGFace() as default
# Based on RESNET50 architecture -> new paper(2017)
vggface = VGGFace(model='resnet50')
# Based on SENET50 architecture -> new paper(2017)
vggface = VGGFace(model='senet50')
-
Convolution Features
from keras.engine import Model from keras.layers import Input from keras_vggface.vggface import VGGFace # Convolution Features vgg_features = VGGFace(include_top=False, input_shape=(224, 224, 3), pooling='avg') # pooling: None, avg or max # After this point you can use your model to predict. # ...
-
Specific Layer Features
from keras.engine import Model from keras.layers import Input from keras_vggface.vggface import VGGFace # Layer Features layer_name = 'layer_name' # edit this line vgg_model = VGGFace() # pooling: None, avg or max out = vgg_model.get_layer(layer_name).output vgg_model_new = Model(vgg_model.input, out) # After this point you can use your model to predict. # ...
-
VGG16
from keras.engine import Model from keras.layers import Flatten, Dense, Input from keras_vggface.vggface import VGGFace #custom parameters nb_class = 2 hidden_dim = 512 vgg_model = VGGFace(include_top=False, input_shape=(224, 224, 3)) last_layer = vgg_model.get_layer('pool5').output x = Flatten(name='flatten')(last_layer) x = Dense(hidden_dim, activation='relu', name='fc6')(x) x = Dense(hidden_dim, activation='relu', name='fc7')(x) out = Dense(nb_class, activation='softmax', name='fc8')(x) custom_vgg_model = Model(vgg_model.input, out) # Train your model as usual. # ...
-
RESNET50 or SENET50
from keras.engine import Model from keras.layers import Flatten, Dense, Input from keras_vggface.vggface import VGGFace #custom parameters nb_class = 2 vgg_model = VGGFace(include_top=False, input_shape=(224, 224, 3)) last_layer = vgg_model.get_layer('avg_pool').output x = Flatten(name='flatten')(last_layer) out = Dense(nb_class, activation='softmax', name='classifier')(x) custom_vgg_model = Model(vgg_model.input, out) # Train your model as usual. # ...
-
Use
utils.preprocess_input(x, version=1)
for VGG16 -
Use
utils.preprocess_input(x, version=2)
for RESNET50 or SENET50import numpy as np from keras.preprocessing import image from keras_vggface.vggface import VGGFace from keras_vggface import utils # tensorflow model = VGGFace() # default : VGG16 , you can use model='resnet50' or 'senet50' # Change the image path with yours. img = image.load_img('../image/ajb.jpg', target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = utils.preprocess_input(x, version=1) # or version=2 preds = model.predict(x) print('Predicted:', utils.decode_predictions(preds))
-
Check Oxford Webpage for the license of the original models.
-
The code that provided in this project is under MIT License.
If you find this project useful, please include reference link in your work. You can create PR's to this document with your project/blog link.