├── README.md ├── code ├── create_db.sh ├── extract.py ├── freeze.py ├── montage.pl ├── mr_bean.jpg ├── result.jpg ├── run.sh ├── step1.py ├── step2.py └── vggface.py ├── download_images.sh └── vggface ├── conv1_1_bias.npy ├── conv1_1_filter.npy ├── conv1_2_bias.npy ├── conv1_2_filter.npy ├── conv2_1_bias.npy ├── conv2_1_filter.npy ├── conv2_2_bias.npy ├── conv2_2_filter.npy ├── conv3_1_bias.npy ├── conv3_1_filter.npy ├── conv3_2_bias.npy ├── conv3_2_filter.npy ├── conv3_3_bias.npy ├── conv3_3_filter.npy ├── conv4_1_bias.npy ├── conv4_1_filter.npy ├── conv4_2_bias.npy ├── conv4_2_filter.npy ├── conv4_3_bias.npy ├── conv4_3_filter.npy ├── conv5_1_bias.npy ├── conv5_1_filter.npy ├── conv5_2_bias.npy ├── conv5_2_filter.npy ├── conv5_3_bias.npy ├── conv5_3_filter.npy ├── fc6_bias.npy ├── fc6_weight.npy ├── fc7_bias.npy ├── fc7_weight.npy ├── fc8_bias.npy └── fc8_weight.npy /README.md: -------------------------------------------------------------------------------- 1 | # face-search 2 | Face search engine 3 | 4 | Download demo dataset (Gary B. Huang, Manu Ramesh, Tamara Berg, and Erik Learned-Miller. 5 | Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments. 6 | University of Massachusetts, Amherst, Technical Report 07-49, October, 2007.) or/and add your own images 7 | 8 | ``` 9 | ./download_images.sh 10 | ``` 11 | 12 | Generate db: 13 | ``` 14 | cd code 15 | ./create_db.sh 16 | ``` 17 | 18 | Search by face: 19 | ``` 20 | # csv output 21 | ./run.sh URL 0 22 | # image output 23 | ./run.sh URL 1 24 | ``` 25 | Query: 26 | ----- 27 | ![mr_bean](code/mr_bean.jpg?raw=true "mr_bean.jpg") 28 | Results: 29 | ------- 30 | ![result](code/result.jpg?raw=true "result.jpg") 31 | 32 | requirements: 33 | ``` 34 | sudo apt-get install imagemagick 35 | sudo pip install awscli 36 | sudo pip install click 37 | ``` 38 | -------------------------------------------------------------------------------- /code/create_db.sh: -------------------------------------------------------------------------------- 1 | python extract.py 2 | #split -d -l 20000 ../data/features.csv ../data/features.csv. 3 | split -d -l 7000 ../data/features.csv ../data/features.csv. 4 | python freeze.py 5 | -------------------------------------------------------------------------------- /code/extract.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | from tensorflow.python.framework import ops, dtypes 3 | import numpy as np 4 | import glob 5 | import sys 6 | import csv 7 | from vggface import Model as vggface 8 | 9 | filenames = sorted(glob.glob("../images/*/*/*.jpg")) 10 | print("%s images found" % len(filenames)) 11 | 12 | batch_size = 1 13 | num_epochs = 1 14 | 15 | 16 | def read_my_file_format(filename_queue, randomize=True): 17 | reader = tf.WholeFileReader() 18 | file_contents = tf.read_file(filename_queue[0]) 19 | uint8image = tf.image.decode_jpeg(file_contents, channels=3) 20 | uint8image = tf.expand_dims(uint8image, 0) 21 | uint8image = tf.image.resize_bilinear(uint8image, (224, 224)) 22 | uint8image = tf.reshape(uint8image, (224, 224, 3)) 23 | uint8image = tf.random_crop(uint8image, (224, 224, 3)) 24 | 25 | if randomize: 26 | uint8image = tf.image.random_brightness(uint8image, max_delta=0.4) 27 | uint8image = tf.image.random_contrast(uint8image, lower=0.6, upper=1.4) 28 | uint8image = tf.image.random_hue(uint8image, max_delta=0.04) 29 | uint8image = tf.image.random_saturation( 30 | uint8image, lower=0.6, upper=1.4) 31 | 32 | float_image = tf.div(tf.cast(uint8image, tf.float32), 255) 33 | return float_image, filename_queue[1] 34 | 35 | 36 | def input_pipeline(filenames, batch_size, num_epochs=None): 37 | filenames_tensor = ops.convert_to_tensor(filenames, dtype=dtypes.string) 38 | labels_tensor = ops.convert_to_tensor(filenames, dtype=dtypes.string) 39 | 40 | filename_queue = tf.train.slice_input_producer([filenames_tensor, labels_tensor], 41 | num_epochs=num_epochs, 42 | shuffle=False) 43 | example, label = read_my_file_format(filename_queue, randomize=True) 44 | example_batch, label_batch = tf.train.batch( 45 | [example, label], batch_size=batch_size, capacity=batch_size) 46 | 47 | return example_batch, label_batch 48 | 49 | 50 | images, labels = input_pipeline(filenames, batch_size, num_epochs=num_epochs) 51 | 52 | m = vggface() 53 | m.build(images) 54 | fc7 = m.relu7 55 | 56 | init_op = tf.group(tf.initialize_all_variables(), 57 | tf.initialize_local_variables()) 58 | 59 | sess = tf.Session() 60 | 61 | sess.run(init_op) 62 | 63 | coord = tf.train.Coordinator() 64 | threads = tf.train.start_queue_runners(sess=sess, coord=coord) 65 | 66 | try: 67 | while not coord.should_stop(): 68 | fc7_, labels_ = sess.run([fc7, labels]) 69 | 70 | for i in range(batch_size): 71 | row = [str(labels_[i])] + list(fc7_[i]) 72 | with open('../data/features.csv', 'ab') as f: 73 | writer = csv.writer(f) 74 | writer.writerow(row) 75 | 76 | except tf.errors.OutOfRangeError: 77 | print('Done') 78 | finally: 79 | coord.request_stop() 80 | 81 | coord.join(threads) 82 | sess.close() 83 | -------------------------------------------------------------------------------- /code/freeze.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import glob 3 | 4 | filenames = sorted(glob.glob("../data/features.csv.*")) 5 | 6 | for file in filenames: 7 | data_labels = np.genfromtxt(file, delimiter=',', usecols=(0), dtype='str') 8 | 9 | np.save('../db/' + file.split('/') 10 | [-1].replace('features', 'labels') + '.npy', data_labels) 11 | 12 | data_features = np.genfromtxt(file, delimiter=',') 13 | data_features = np.delete(data_features, [0], 1) 14 | 15 | np.save('../db/' + file.split('/')[-1] + '.npy', data_features) 16 | -------------------------------------------------------------------------------- /code/montage.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | use strict; 3 | use warnings; 4 | use Data::Dumper; 5 | 6 | my @images = (); 7 | while (my $line = <>) { 8 | $line =~ s/\s//gsm; 9 | my ($file, $score) = split /,/, $line; 10 | my ($name) = $file =~ /\/([^\/]+)_\d+\.jpg$/; 11 | my $tmp = "/tmp/${score}-$name"; 12 | `cp $file $tmp`; 13 | `convert $tmp -resize !224x!224 $tmp.jpg`; 14 | push @images, $tmp . ".jpg"; 15 | last if $#images == 19; 16 | } 17 | my $imagelist = join " ", @images; 18 | my $rnd = rand(); 19 | `montage -label %f -size 896x1120 -tile 4x5 -coalesce -quality 100 -geometry 224x224+0+0 $imagelist /tmp/montage-$rnd.jpg`; 20 | #`aws s3 cp /tmp/montage-$rnd.jpg s3://pg-image-search/montages/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers`; 21 | 22 | #print "https://s3-us-west-2.amazonaws.com/pg-image-search/montages/montage-$rnd.jpg\n"; 23 | print "/tmp/montage-$rnd.jpg\n"; 24 | exit; 25 | -------------------------------------------------------------------------------- /code/mr_bean.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pavelgonchar/face-search/b333879d9353b24ed689cd5c9e8685d087493708/code/mr_bean.jpg -------------------------------------------------------------------------------- /code/result.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pavelgonchar/face-search/b333879d9353b24ed689cd5c9e8685d087493708/code/result.jpg -------------------------------------------------------------------------------- /code/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DEFAULT_FACE="mr_bean.jpg" 4 | INPUT=${1:-$DEFAULT_FACE} 5 | MONTAGE=1 6 | MONTAGE=${2:-$MONTAGE} 7 | 8 | if [[ $INPUT =~ .*http.* ]] 9 | then 10 | IMAGE=${INPUT##*/} 11 | wget $INPUT -O /tmp/$IMAGE 12 | INPUT="/tmp/$IMAGE" 13 | fi 14 | 15 | OUTPUT=`CUDA_VISIBLE_DEVICES=0 python step1.py --input $INPUT 2>/dev/null` 16 | 17 | if [[ $MONTAGE == 1 ]] 18 | then 19 | RESULT=`echo $OUTPUT | CUDA_VISIBLE_DEVICES=0 python step2.py | perl montage.pl` 20 | else 21 | RESULT=`echo $OUTPUT | CUDA_VISIBLE_DEVICES=0 python step2.py` 22 | fi 23 | 24 | echo "$RESULT" 25 | -------------------------------------------------------------------------------- /code/step1.py: -------------------------------------------------------------------------------- 1 | import skimage.io 2 | from skimage.transform import resize 3 | import tensorflow as tf 4 | import numpy as np 5 | import sys 6 | import csv 7 | import argparse 8 | writer = csv.writer(sys.stdout) 9 | from vggface import Model as vggface 10 | 11 | def run(args): 12 | images = tf.placeholder("float", [None, 224, 224, 3]) 13 | 14 | m = vggface() 15 | m.build(images) 16 | fc7 = m.relu7 17 | 18 | init_op = tf.group(tf.initialize_all_variables(), 19 | tf.initialize_local_variables()) 20 | 21 | with tf.Session() as sess: 22 | sess.run(init_op) 23 | 24 | input = skimage.io.imread(args.input) / 255.0 25 | input = resize(input, (224, 224)) 26 | input = np.expand_dims(input, 0) 27 | 28 | output = sess.run(fc7, feed_dict={images: input}) 29 | 30 | writer.writerow(output[0]) 31 | 32 | 33 | def parse_args(): 34 | parser = argparse.ArgumentParser(description='Options ') 35 | parser.add_argument('--input', type=str, default='mr_bean.jpg') 36 | args = parser.parse_args() 37 | return args 38 | 39 | if __name__ == '__main__': 40 | args = parse_args() 41 | run(args) 42 | -------------------------------------------------------------------------------- /code/step2.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import tensorflow as tf 3 | import sys 4 | import csv 5 | import glob 6 | import math 7 | import click 8 | writer = csv.writer(sys.stdout) 9 | 10 | input_csv = np.array(sys.stdin.readline().split(',')).astype('float32') 11 | input_csv = input_csv[0:1000] 12 | 13 | input_features = tf.placeholder( 14 | tf.float32, shape=[None, 1000], name="input_features") 15 | features_batch = tf.placeholder( 16 | tf.float32, shape=[None, 1000], name="features_batch") 17 | 18 | similarity = tf.reduce_sum(tf.square(tf.nn.l2_normalize( 19 | input_features, 1) - tf.nn.l2_normalize(features_batch, 1)), reduction_indices=1, keep_dims=False) 20 | 21 | with tf.Session() as sess: 22 | 23 | labels_filenames = sorted(glob.glob("../db/labels*.npy")) 24 | features_filenames = sorted(glob.glob("../db/features*.npy")) 25 | 26 | results = [] 27 | with click.progressbar(range(len(labels_filenames)), file=sys.stderr) as bar: 28 | for c in bar: 29 | data_labels = np.load(labels_filenames[c]) 30 | data_features = np.load(features_filenames[c])[:,0:1000] 31 | 32 | tile_input_csv = np.tile(input_csv, (len(data_features), 1)) 33 | similarity_ = sess.run(similarity, feed_dict={ 34 | input_features: tile_input_csv, features_batch: data_features}) 35 | for i in range(len(data_features)): 36 | row = [str(data_labels[i])] + [str(similarity_[i])] 37 | results.append(row) 38 | 39 | results = sorted(results, key=lambda results: float(results[1]))[0:20] 40 | writer.writerows(results) 41 | -------------------------------------------------------------------------------- /code/vggface.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | import numpy as np 3 | 4 | VGG_MEAN = [103.939, 116.779, 123.68] 5 | 6 | class Model(): 7 | def __init__(self, name=''): 8 | self.name = name 9 | 10 | def get_conv_filter(self, name): 11 | w = np.load("../vggface/" + str(name) + "_filter.npy") 12 | return tf.Variable(w, dtype=tf.float32, name="filter") 13 | 14 | def get_bias(self, name): 15 | b = np.load("../vggface/" + str(name) + "_bias.npy") 16 | return tf.Variable(b, dtype=tf.float32, name="bias") 17 | 18 | def get_fc_weight(self, name): 19 | cw = np.load("../vggface/" + str(name) + "_weight.npy") 20 | return tf.Variable(cw, dtype=tf.float32, name="weight") 21 | 22 | def _max_pool(self, bottom, name): 23 | return tf.nn.max_pool(bottom, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], 24 | padding='SAME', name=name) 25 | 26 | def _conv_layer(self, bottom, name): 27 | with tf.variable_scope(name) as scope: 28 | filt = self.get_conv_filter(name) 29 | conv = tf.nn.conv2d(bottom, filt, [1, 1, 1, 1], padding='SAME') 30 | 31 | conv_biases = self.get_bias(name) 32 | bias = tf.nn.bias_add(conv, conv_biases) 33 | 34 | relu = tf.nn.relu(bias) 35 | return relu 36 | 37 | def _fc_layer(self, bottom, name): 38 | with tf.variable_scope(name) as scope: 39 | shape = bottom.get_shape().as_list() 40 | dim = 1 41 | for d in shape[1:]: 42 | dim *= d 43 | x = tf.reshape(bottom, [-1, dim]) 44 | 45 | weights = self.get_fc_weight(name) 46 | biases = self.get_bias(name) 47 | 48 | # Fully connected layer. Note that the '+' operation automatically 49 | # broadcasts the biases. 50 | fc = tf.nn.bias_add(tf.matmul(x, weights), biases) 51 | 52 | return fc 53 | 54 | # Input should be an rgb image [batch, height, width, 3] 55 | # values scaled [0, 1] 56 | def build(self, rgb, train=False): 57 | rgb_scaled = rgb * 255.0 58 | 59 | # Convert RGB to BGR 60 | red, green, blue = tf.split(3, 3, rgb_scaled) 61 | 62 | bgr = tf.concat(3, [ 63 | blue - VGG_MEAN[0], 64 | green - VGG_MEAN[1], 65 | red - VGG_MEAN[2], 66 | ]) 67 | 68 | with tf.variable_scope('vggface_' + self.name): 69 | self.relu1_1 = self._conv_layer(bgr, "conv1_1") 70 | self.relu1_2 = self._conv_layer(self.relu1_1, "conv1_2") 71 | self.pool1 = self._max_pool(self.relu1_2, 'pool1') 72 | 73 | self.relu2_1 = self._conv_layer(self.pool1, "conv2_1") 74 | self.relu2_2 = self._conv_layer(self.relu2_1, "conv2_2") 75 | self.pool2 = self._max_pool(self.relu2_2, 'pool2') 76 | 77 | self.relu3_1 = self._conv_layer(self.pool2, "conv3_1") 78 | self.relu3_2 = self._conv_layer(self.relu3_1, "conv3_2") 79 | self.relu3_3 = self._conv_layer(self.relu3_2, "conv3_3") 80 | self.pool3 = self._max_pool(self.relu3_3, 'pool3') 81 | 82 | self.relu4_1 = self._conv_layer(self.pool3, "conv4_1") 83 | self.relu4_2 = self._conv_layer(self.relu4_1, "conv4_2") 84 | self.relu4_3 = self._conv_layer(self.relu4_2, "conv4_3") 85 | self.pool4 = self._max_pool(self.relu4_3, 'pool4') 86 | 87 | self.relu5_1 = self._conv_layer(self.pool4, "conv5_1") 88 | self.relu5_2 = self._conv_layer(self.relu5_1, "conv5_2") 89 | self.relu5_3 = self._conv_layer(self.relu5_2, "conv5_3") 90 | self.pool5 = self._max_pool(self.relu5_3, 'pool5') 91 | 92 | self.fc6 = self._fc_layer(self.pool5, "fc6") 93 | assert self.fc6.get_shape().as_list()[1:] == [4096] 94 | 95 | self.relu6 = tf.nn.relu(self.fc6) 96 | if train: 97 | self.relu6 = tf.nn.dropout(self.relu6, 0.5) 98 | 99 | self.fc7 = self._fc_layer(self.relu6, "fc7") 100 | self.relu7 = tf.nn.relu(self.fc7) 101 | if train: 102 | self.relu7 = tf.nn.dropout(self.relu7, 0.5) 103 | 104 | self.fc8 = self._fc_layer(self.relu7, "fc8") 105 | self.prob = tf.nn.softmax(self.fc8, name="prob") 106 | 107 | -------------------------------------------------------------------------------- /download_images.sh: -------------------------------------------------------------------------------- 1 | wget -q http://vis-www.cs.umass.edu/lfw/lfw.tgz -O lfw.tgz 2 | mkdir -p images 3 | tar -xvf lfw.tgz -C images/ 4 | rm -fr lfw.tgz 5 | mkdir -p data 6 | mkdir -p db 7 | 8 | -------------------------------------------------------------------------------- /vggface/conv1_1_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:777300d4b73afc9f71e3eeed06f0fc74dbeb9a888d0cf7ef2a6fde1586b77f1e 3 | size 336 4 | -------------------------------------------------------------------------------- /vggface/conv1_1_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2c39d640012a5061fa47b0034f0105784d9a6608e1a3e39964f08f031f0e1ca5 3 | size 6992 4 | -------------------------------------------------------------------------------- /vggface/conv1_2_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:777300d4b73afc9f71e3eeed06f0fc74dbeb9a888d0cf7ef2a6fde1586b77f1e 3 | size 336 4 | -------------------------------------------------------------------------------- /vggface/conv1_2_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1e453f045906a8f090bdf14da412d0c50c22a2a65f4568e277140a7603ba482f 3 | size 147536 4 | -------------------------------------------------------------------------------- /vggface/conv2_1_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:73d169a8839449b621b3b51812b66901ade0688c7a56ce189d5bf7e6295b01c4 3 | size 592 4 | -------------------------------------------------------------------------------- /vggface/conv2_1_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f703675f6ca1b8e55ffdff46b7330693c03db9cdb7c274763b757b07a8f49526 3 | size 294992 4 | -------------------------------------------------------------------------------- /vggface/conv2_2_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:73d169a8839449b621b3b51812b66901ade0688c7a56ce189d5bf7e6295b01c4 3 | size 592 4 | -------------------------------------------------------------------------------- /vggface/conv2_2_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4e249f3422f412cbebe415daea68768602b262e484a73cdf393a384ec574ef4d 3 | size 589920 4 | -------------------------------------------------------------------------------- /vggface/conv3_1_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5592ced065ec8469c30aafbf1ca9058bdafff843cf9f1898c004cfb1ee8d2b70 3 | size 1104 4 | -------------------------------------------------------------------------------- /vggface/conv3_1_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:cd106662d98006007e432ce31761e0d3387b2a8a84f2fe76f4f301e2013dbe86 3 | size 1179744 4 | -------------------------------------------------------------------------------- /vggface/conv3_2_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5592ced065ec8469c30aafbf1ca9058bdafff843cf9f1898c004cfb1ee8d2b70 3 | size 1104 4 | -------------------------------------------------------------------------------- /vggface/conv3_2_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:cb7fb575e18a44c1bcf5f14d1502afb55bae91dafcabb8c2f72ba029e0d420d4 3 | size 2359392 4 | -------------------------------------------------------------------------------- /vggface/conv3_3_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5592ced065ec8469c30aafbf1ca9058bdafff843cf9f1898c004cfb1ee8d2b70 3 | size 1104 4 | -------------------------------------------------------------------------------- /vggface/conv3_3_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5bda9a4c196d8b99687aabb4f1f8b1b3b70b71005c3c83c14072e1f431f1c52f 3 | size 2359392 4 | -------------------------------------------------------------------------------- /vggface/conv4_1_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e62f1c51a215818e554cdc0505eb00837535701ef25aefe12d8a835ef3bbd023 3 | size 2128 4 | -------------------------------------------------------------------------------- /vggface/conv4_1_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:8512c5676e87d8d3fd3b37556b9ef35741b370089f40d9e5dbcea52ccc304af4 3 | size 4718688 4 | -------------------------------------------------------------------------------- /vggface/conv4_2_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e62f1c51a215818e554cdc0505eb00837535701ef25aefe12d8a835ef3bbd023 3 | size 2128 4 | -------------------------------------------------------------------------------- /vggface/conv4_2_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f12721ca791c5494e43d34488923cecb37028cec3afa152a34161cbe62e078f8 3 | size 9437280 4 | -------------------------------------------------------------------------------- /vggface/conv4_3_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e62f1c51a215818e554cdc0505eb00837535701ef25aefe12d8a835ef3bbd023 3 | size 2128 4 | -------------------------------------------------------------------------------- /vggface/conv4_3_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:58ff35654d36e0fcaf823f4344a55fd83703314f6f131d0b3057d19ed894b328 3 | size 9437280 4 | -------------------------------------------------------------------------------- /vggface/conv5_1_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e62f1c51a215818e554cdc0505eb00837535701ef25aefe12d8a835ef3bbd023 3 | size 2128 4 | -------------------------------------------------------------------------------- /vggface/conv5_1_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4dded276bc1f91eb9055cbd30396ad087b93e2366e8fe94e13582dd2eafedd25 3 | size 9437280 4 | -------------------------------------------------------------------------------- /vggface/conv5_2_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e62f1c51a215818e554cdc0505eb00837535701ef25aefe12d8a835ef3bbd023 3 | size 2128 4 | -------------------------------------------------------------------------------- /vggface/conv5_2_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1be4dd687de78b7753dd5f8229f5c999d94341b653edd2eed20ff45c06dbd070 3 | size 9437280 4 | -------------------------------------------------------------------------------- /vggface/conv5_3_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e62f1c51a215818e554cdc0505eb00837535701ef25aefe12d8a835ef3bbd023 3 | size 2128 4 | -------------------------------------------------------------------------------- /vggface/conv5_3_filter.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:de1d4488d24f651c10809f1b970d187ca61f6198fce7f478ebe1166c5d872b4e 3 | size 9437280 4 | -------------------------------------------------------------------------------- /vggface/fc6_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4a51dbe64ecdaf2e659c2b1a674c61502ee5f61a7e9723d1b02e1512876718e5 3 | size 16464 4 | -------------------------------------------------------------------------------- /vggface/fc6_weight.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:85c0de4c8493653be89acdcae9dfb026ad47b6b2520992a0346db36fdf662501 3 | size 411041872 4 | -------------------------------------------------------------------------------- /vggface/fc7_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4a51dbe64ecdaf2e659c2b1a674c61502ee5f61a7e9723d1b02e1512876718e5 3 | size 16464 4 | -------------------------------------------------------------------------------- /vggface/fc7_weight.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2f8db963d623deb22cff637b5a920ab9f625724bb33f86c6b97515e1a41dd562 3 | size 67108944 4 | -------------------------------------------------------------------------------- /vggface/fc8_bias.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d8bcfe6d1f1a695506aaa47f89a7864aa69dc8581db3f4c9980cc9650893c7bb 3 | size 10568 4 | -------------------------------------------------------------------------------- /vggface/fc8_weight.npy: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a4321d0dbeb0382d02d081645f10bfea408865332c455090a0d221bc54a44e19 3 | size 42958928 4 | --------------------------------------------------------------------------------