An modified version of keras-vggface to compatiable with tf-keras in TensorFlow 2.x with x < 6
Oxford VGGFace Implementation using Keras in TensorFlow v2+
- Original from https://github.com/rcmalli/keras-vggface
- 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.
- TensorFlow 2.0+
from tfkeras_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 tensorflow.keras.engine import Model from tensorflow.keras.layers import Input from tfkeras_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 tensorflow.keras.engine import Model from tensorflow.keras.layers import Input from tfkeras_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 tensorflow.keras.engine import Model from tensorflow.keras.layers import Flatten, Dense, Input from tfkeras_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 tensorflow.keras.engine import Model from tensorflow.keras.layers import Flatten, Dense, Input from tfkeras_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 tensorflow.keras.preprocessing import image from tensorflow.keras_vggface.vggface import VGGFace from tfkeras_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.