|
from keras.models import Model |
|
from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dropout, Activation |
|
from PIL import Image |
|
import numpy as np |
|
|
|
def vgg_face(weights_path=None): |
|
img = Input(shape=(3, 224, 224)) |
|
|
|
pad1_1 = ZeroPadding2D(padding=(1, 1))(img) |
|
conv1_1 = Convolution2D(64, 3, 3, activation='relu', name='conv1_1')(pad1_1) |
|
pad1_2 = ZeroPadding2D(padding=(1, 1))(conv1_1) |
|
conv1_2 = Convolution2D(64, 3, 3, activation='relu', name='conv1_2')(pad1_2) |
|
pool1 = MaxPooling2D((2, 2), strides=(2, 2))(conv1_2) |
|
|
|
pad2_1 = ZeroPadding2D((1, 1))(pool1) |
|
conv2_1 = Convolution2D(128, 3, 3, activation='relu', name='conv2_1')(pad2_1) |
|
pad2_2 = ZeroPadding2D((1, 1))(conv2_1) |
|
conv2_2 = Convolution2D(128, 3, 3, activation='relu', name='conv2_2')(pad2_2) |
|
pool2 = MaxPooling2D((2, 2), strides=(2, 2))(conv2_2) |
|
|
|
pad3_1 = ZeroPadding2D((1, 1))(pool2) |
|
conv3_1 = Convolution2D(256, 3, 3, activation='relu', name='conv3_1')(pad3_1) |
|
pad3_2 = ZeroPadding2D((1, 1))(conv3_1) |
|
conv3_2 = Convolution2D(256, 3, 3, activation='relu', name='conv3_2')(pad3_2) |
|
pad3_3 = ZeroPadding2D((1, 1))(conv3_2) |
|
conv3_3 = Convolution2D(256, 3, 3, activation='relu', name='conv3_3')(pad3_3) |
|
pool3 = MaxPooling2D((2, 2), strides=(2, 2))(conv3_3) |
|
|
|
pad4_1 = ZeroPadding2D((1, 1))(pool3) |
|
conv4_1 = Convolution2D(512, 3, 3, activation='relu', name='conv4_1')(pad4_1) |
|
pad4_2 = ZeroPadding2D((1, 1))(conv4_1) |
|
conv4_2 = Convolution2D(512, 3, 3, activation='relu', name='conv4_2')(pad4_2) |
|
pad4_3 = ZeroPadding2D((1, 1))(conv4_2) |
|
conv4_3 = Convolution2D(512, 3, 3, activation='relu', name='conv4_3')(pad4_3) |
|
pool4 = MaxPooling2D((2, 2), strides=(2, 2))(conv4_3) |
|
|
|
pad5_1 = ZeroPadding2D((1, 1))(pool4) |
|
conv5_1 = Convolution2D(512, 3, 3, activation='relu', name='conv5_1')(pad5_1) |
|
pad5_2 = ZeroPadding2D((1, 1))(conv5_1) |
|
conv5_2 = Convolution2D(512, 3, 3, activation='relu', name='conv5_2')(pad5_2) |
|
pad5_3 = ZeroPadding2D((1, 1))(conv5_2) |
|
conv5_3 = Convolution2D(512, 3, 3, activation='relu', name='conv5_3')(pad5_3) |
|
pool5 = MaxPooling2D((2, 2), strides=(2, 2))(conv5_3) |
|
|
|
fc6 = Convolution2D(4096, 7, 7, activation='relu', name='fc6')(pool5) |
|
fc6_drop = Dropout(0.5)(fc6) |
|
fc7 = Convolution2D(4096, 1, 1, activation='relu', name='fc7')(fc6_drop) |
|
fc7_drop = Dropout(0.5)(fc7) |
|
fc8 = Convolution2D(2622, 1, 1, name='fc8')(fc7_drop) |
|
flat = Flatten()(fc8) |
|
out = Activation('softmax')(flat) |
|
|
|
model = Model(input=img, output=out) |
|
|
|
if weights_path: |
|
model.load_weights(weights_path) |
|
|
|
return model |
|
|
|
if __name__ == "__main__": |
|
im = Image.open('A.J._Buckley.jpg') |
|
im = im.resize((224,224)) |
|
im = np.array(im).astype(np.float32) |
|
# im[:,:,0] -= 129.1863 |
|
# im[:,:,1] -= 104.7624 |
|
# im[:,:,2] -= 93.5940 |
|
im = im.transpose((2,0,1)) |
|
im = np.expand_dims(im, axis=0) |
|
|
|
# Test pretrained model |
|
model = vgg_face('vgg-face-keras.h5') |
|
out = model.predict(im) |
|
print(out[0][0]) |
|
|
@monktastic This works with tensorflow as backend when you change the configuration. Could you specify the error message that you are getting?