This commit is contained in:
nttstar
2018-02-19 19:13:27 +08:00
11 changed files with 1969 additions and 476 deletions

View File

@@ -5,7 +5,11 @@
### Recent Update
 **`2018.02.07`**: We evaluate LFW,CFP,AgeDB-30 again after removing training set overlaps, the results almost stay the same. See [Results](#results) for detail.
**`2018.02.16`**: We put the MegaFace noise list in this repo. Please refer to [https://github.com/deepinsight/insightface/blob/master/src/megaface] for detail.
**`2018.02.13`**: We achieved state-of-the-art performance on [MegaFace-Challenge-1](http://megaface.cs.washington.edu/results/facescrub.html), at `98.06%`. Also note that the training set we used has NO identities overlap with facescrub, please check our paper for detail.
**`2018.02.07`**: We evaluate LFW,CFP,AgeDB-30 again after removing training set overlaps, the results almost stay the same. See [Results](#results) for detail.
**`2018.01.30`**: We provide a *LResNet50E-IR* model which can achieve **`99.80@LFW`** and **`97.64%`** at MegaFace 1M Acc. See [Pretrained-Models](#pretrained-models) for detail.

38
src/common/noise_sgd.py Normal file
View File

@@ -0,0 +1,38 @@
import mxnet.optimizer as optimizer
from mxnet import ndarray as nd
class NoiseSGD(optimizer.SGD):
"""Noise SGD.
This optimizer accepts the same arguments as :class:`.SGD`.
"""
def __init__(self, scale, **kwargs):
super(NoiseSGD, self).__init__(**kwargs)
print('init noise sgd with', scale)
self.scale = scale
def update(self, index, weight, grad, state):
assert(isinstance(weight, NDArray))
assert(isinstance(grad, NDArray))
self._update_count(index)
lr = self._get_lr(index)
wd = self._get_wd(index)
grad = grad * self.rescale_grad
if self.clip_gradient is not None:
grad = clip(grad, -self.clip_gradient, self.clip_gradient)
noise = nd.random.normal(scale = self.scale, shape = grad.shape, dtype=grad.dtype, ctx = grad.context)
grad += noise
if state is not None:
mom = state
mom[:] *= self.momentum
grad += wd * weight
mom[:] += grad
grad[:] += self.momentum * mom
weight[:] += -lr * grad
else:
assert self.momentum == 0.0
weight[:] += -lr * (grad + wd * weight)

302
src/eval/ytf.py Normal file
View File

@@ -0,0 +1,302 @@
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import cv2
import argparse
import sys
import numpy as np
from scipy import misc
from sklearn.model_selection import KFold
from scipy import interpolate
import sklearn
from sklearn.metrics.pairwise import euclidean_distances
import datetime
import pickle
from sklearn.decomposition import PCA
import mxnet as mx
from mxnet import ndarray as nd
from verification import evaluate
from verification import calculate_accuracy
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import face_image
model = None
feature_cache = {}
image_size = [112,112]
def get_feature(name, vid, args):
global feature_cache
key = (name,vid)
if key in feature_cache:
return feature_cache[key]
input_dir = os.path.join(args.image_dir, name, str(vid))
data = nd.zeros( (1 ,3, image_size[0], image_size[1]) )
F = []
for img in os.listdir(input_dir):
img = os.path.join(input_dir, img)
img = cv2.imread(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = np.transpose(img, (2,0,1))
data[0][:] = img
db = mx.io.DataBatch(data=(data,))
model.forward(db, is_train=False)
net_out = model.get_outputs()[0].asnumpy().flatten()
F.append(net_out)
F = np.array(F)
F = sklearn.preprocessing.normalize(F)
feature = np.mean(F, axis=0, keepdims=True)
feature = sklearn.preprocessing.normalize(feature).flatten()
feature_cache[key] = feature
return feature
def get_feature_set(name, vid, args):
global feature_cache
key = (name,vid)
if key in feature_cache:
return feature_cache[key]
input_dir = os.path.join(args.image_dir, name, str(vid))
data = nd.zeros( (1 ,3, image_size[0], image_size[1]) )
F = []
for img in os.listdir(input_dir):
img = os.path.join(input_dir, img)
img = cv2.imread(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = np.transpose(img, (2,0,1))
data[0][:] = img
db = mx.io.DataBatch(data=(data,))
model.forward(db, is_train=False)
net_out = model.get_outputs()[0].asnumpy().flatten()
F.append(net_out)
F = np.array(F)
F = sklearn.preprocessing.normalize(F)
feature_cache[key] = F
return F
def main(args):
global model
ctx = mx.gpu(args.gpu)
args.ctx_num = 1
print('image_size', image_size)
vec = args.model.split(',')
prefix = vec[0]
epoch = int(vec[1])
print('loading',prefix, epoch)
sym, arg_params, aux_params = mx.model.load_checkpoint(prefix, epoch)
all_layers = sym.get_internals()
sym = all_layers['fc1_output']
model = mx.mod.Module(symbol=sym, context=ctx, label_names = None)
model.bind(data_shapes=[('data', (args.batch_size, 3, image_size[0], image_size[1]))])
model.set_params(arg_params, aux_params)
args.image_dir = os.path.join(args.data_dir, 'images')
pairs_file = os.path.join(args.data_dir, 'splits2.txt')
embeddings = []
issame_list = []
data = []
pp = 0
for line in open(pairs_file, 'r'):
line = line.strip()
if line.startswith('split'):
continue
pp+=1
if pp%10==0:
print('processing', pp)
vec = line.split(',')
assert len(vec)>=5
issame_list.append(int(vec[-1]))
for i in [2,3]:
_str = vec[i].strip()
_vec = _str.split('/')
assert len(_vec)==2
name = _vec[0]
vid = int(_vec[1])
feature = get_feature(name, vid, args)
print('feature', feature.shape)
embeddings.append(feature)
data.append( (name, vid) )
#if len(issame_list)==20:
# break
embeddings = np.array(embeddings)
print(embeddings.shape)
thresholds = np.arange(0, 4, 0.01)
actual_issame = np.asarray(issame_list)
nrof_folds = 10
embeddings1 = embeddings[0::2]
embeddings2 = embeddings[1::2]
assert(embeddings1.shape[0] == embeddings2.shape[0])
assert(embeddings1.shape[1] == embeddings2.shape[1])
nrof_pairs = min(len(actual_issame), embeddings1.shape[0])
nrof_thresholds = len(thresholds)
k_fold = KFold(n_splits=nrof_folds, shuffle=False)
tprs = np.zeros((nrof_folds,nrof_thresholds))
fprs = np.zeros((nrof_folds,nrof_thresholds))
accuracy = np.zeros((nrof_folds))
indices = np.arange(nrof_pairs)
diff = np.subtract(embeddings1, embeddings2)
dist = np.sum(np.square(diff),1)
pouts = []
nouts = []
for fold_idx, (train_set, test_set) in enumerate(k_fold.split(indices)):
# Find the best threshold for the fold
acc_train = np.zeros((nrof_thresholds))
#print(train_set)
#print(train_set.__class__)
for threshold_idx, threshold in enumerate(thresholds):
p2 = dist[train_set]
p3 = actual_issame[train_set]
_, _, acc_train[threshold_idx] = calculate_accuracy(threshold, p2, p3)
best_threshold_index = np.argmax(acc_train)
for threshold_idx, threshold in enumerate(thresholds):
tprs[fold_idx,threshold_idx], fprs[fold_idx,threshold_idx], _ = calculate_accuracy(threshold, dist[test_set], actual_issame[test_set])
_, _, accuracy[fold_idx] = calculate_accuracy(thresholds[best_threshold_index], dist[test_set], actual_issame[test_set])
best_threshold = thresholds[best_threshold_index]
for iid in test_set:
ida = iid*2
idb = ida+1
asame = actual_issame[iid]
_dist = dist[iid]
violate = _dist - best_threshold
if not asame:
violate *= -1.0
if violate>0.0:
dataa = data[ida]
datab = data[idb]
#print(imga.shape, imgb.shape, violate, asame, _dist)
if asame:
pouts.append( (dataa, datab, _dist, best_threshold, ida) )
else:
nouts.append( (dataa, datab, _dist, best_threshold, ida) )
tpr = np.mean(tprs,0)
fpr = np.mean(fprs,0)
acc = np.mean(accuracy)
pouts = sorted(pouts, key = lambda x: x[2], reverse=True)
nouts = sorted(nouts, key = lambda x: x[2], reverse=False)
print(len(pouts), len(nouts))
print('acc', acc)
if len(nouts)>0:
threshold = nouts[0][3]
else:
threshold = pouts[-1][3]
#print('threshold', threshold)
print('positive(false negative):')
for out in pouts:
print("\t%s\t%s\t(distance:%f, threshold:%f)"%(out[0], out[1], out[2], out[3]))
print('negative(false positive):')
for out in nouts:
print("\t%s\t%s\t(distance:%f, threshold:%f)"%(out[0], out[1], out[2], out[3]))
#_, _, accuracy, val, val_std, far = evaluate(embeddings, issame_list, nrof_folds=10)
#acc2, std2 = np.mean(accuracy), np.std(accuracy)
#print('acc', acc2)
def main2(args):
global model
ctx = mx.gpu(args.gpu)
args.ctx_num = 1
print('image_size', image_size)
vec = args.model.split(',')
prefix = vec[0]
epoch = int(vec[1])
print('loading',prefix, epoch)
sym, arg_params, aux_params = mx.model.load_checkpoint(prefix, epoch)
all_layers = sym.get_internals()
sym = all_layers['fc1_output']
model = mx.mod.Module(symbol=sym, context=ctx, label_names = None)
model.bind(data_shapes=[('data', (args.batch_size, 3, image_size[0], image_size[1]))])
model.set_params(arg_params, aux_params)
args.image_dir = os.path.join(args.data_dir, 'images')
pairs_file = os.path.join(args.data_dir, 'splits2.txt')
issame_list = []
dist = []
pp = 0
for line in open(pairs_file, 'r'):
line = line.strip()
if line.startswith('split'):
continue
pp+=1
if pp%10==0:
print('processing', pp)
vec = line.split(',')
assert len(vec)>=5
issame_list.append(int(vec[-1]))
feature_sets = []
for i in [2,3]:
_str = vec[i].strip()
_vec = _str.split('/')
assert len(_vec)==2
name = _vec[0]
vid = int(_vec[1])
feature = get_feature_set(name, vid, args)
print('feature', len(feature))
feature_sets.append(feature)
X = feature_sets[0]
Y = feature_sets[1]
_dist = euclidean_distances(X, Y)
_dist = _dist*_dist
#_tmp = np.eye(_dist.shape[0], dtype=np.float32)
#_dist += _tmp
if args.mode==2:
_dist = np.amin(_dist)
elif args.mode==3:
_dist = np.mean(_dist)
else:
_dist = np.amax(_dist)
print(_dist)
dist.append(_dist)
#if len(dist)==10:
# break
dist = np.array(dist)
nrof_folds = 10
thresholds = np.arange(0, 4, 0.01)
actual_issame = np.array(issame_list)
nrof_pairs = len(actual_issame)
nrof_thresholds = len(thresholds)
k_fold = KFold(n_splits=nrof_folds, shuffle=False)
tprs = np.zeros((nrof_folds,nrof_thresholds))
fprs = np.zeros((nrof_folds,nrof_thresholds))
accuracy = np.zeros((nrof_folds))
indices = np.arange(nrof_pairs)
for fold_idx, (train_set, test_set) in enumerate(k_fold.split(indices)):
# Find the best threshold for the fold
acc_train = np.zeros((nrof_thresholds))
for threshold_idx, threshold in enumerate(thresholds):
_, _, acc_train[threshold_idx] = calculate_accuracy(threshold, dist[train_set], actual_issame[train_set])
best_threshold_index = np.argmax(acc_train)
for threshold_idx, threshold in enumerate(thresholds):
tprs[fold_idx,threshold_idx], fprs[fold_idx,threshold_idx], _ = calculate_accuracy(threshold, dist[test_set], actual_issame[test_set])
_, _, accuracy[fold_idx] = calculate_accuracy(thresholds[best_threshold_index], dist[test_set], actual_issame[test_set])
acc2, std2 = np.mean(accuracy), np.std(accuracy)
print('acc', acc2)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='do verification')
# general
parser.add_argument('--data-dir', default='/raid5data/dplearn/YTF', help='')
parser.add_argument('--model', default='../model/softmax,50', help='path to load model.')
parser.add_argument('--gpu', default=0, type=int, help='gpu id')
parser.add_argument('--batch-size', default=32, type=int, help='')
parser.add_argument('--mode', default=1, type=int, help='')
args = parser.parse_args()
if args.mode>=2:
main2(args)
else:
main(args)

75
src/eval/ytf_badcases.py Normal file
View File

@@ -0,0 +1,75 @@
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import sys
import os
import numpy as np
import cv2
pairs_file = '/raid5data/dplearn/YTF/splits2.txt'
stat = [0,0]
for line in open(pairs_file, 'r'):
line = line.strip()
if line.startswith('split'):
continue
vec = line.split(',')
issame = int(vec[-1])
if issame:
stat[0]+=1
else:
stat[1]+=1
print('stat', stat)
image_dir = '/raid5data/dplearn/YTF/images'
def get_img(name, vid):
input_dir = os.path.join(image_dir, name, str(vid))
paths = []
for img in os.listdir(input_dir):
path = os.path.join(input_dir, img)
paths.append(path)
paths = sorted(paths)
parts = 8
assert len(paths)>=parts
gap = len(paths)//parts
img = None
for i in xrange(parts):
idx = gap*i
path = paths[idx]
_img = cv2.imread(path)
#print(_img.shape)
if img is None:
img = _img
else:
img = np.concatenate( (img, _img), axis=1)
return img
text_color = (153,255,51)
for input in ['ytf_false_positive', 'ytf_false_negative']:
all_img = None
pp = 0
for line in open(input+".log", 'r'):
if line.startswith("\t"):
break
vec = line.strip().split(',')
img1 = get_img(vec[0], int(vec[1]))
img2 = get_img(vec[2], int(vec[3]))
img = np.concatenate( (img1, img2), axis=0)
if all_img is None:
all_img = img
else:
all_img = np.concatenate( (all_img, img), axis=0)
blank_img = np.zeros( (20, 112*8,3), dtype=np.uint8)
blank_img[:,:,:] = 255
font = cv2.FONT_HERSHEY_SIMPLEX
k = "centre-distance:%.3f"%(float(vec[4]))
#print(k)
cv2.putText(blank_img,k,(350,blank_img.shape[0]-4), font, 0.6, text_color, 2)
all_img = np.concatenate( (all_img, blank_img), axis=0)
pp+=1
filename = os.path.join('badcases', input+".png")
cv2.imwrite(filename, all_img)

6
src/megaface/README.md Normal file
View File

@@ -0,0 +1,6 @@
Please strictly follow these rules if you want to use our MegaFace noises list.
* Please cite our paper and git repo if you want to use this list in your paper.
* Please include the information like `We used the noises list proposed by InsightFace, at https://github.com/deepinsight/insightface/tree/master/src/megaface` if you want to submit the result to MegaFace challenge.
* To be fair, if you want to submit MegaFace result, please ensure there's no training set overlaps with FaceScrub identities. You can do this by removing identities from your training set whose cosine similarity is larger than 0.4 with any FaceScrub identity by comparing their centre feature vectors.
* If you find more overlaps noise, please open an issue at InsightFace.

View File

@@ -0,0 +1,606 @@
#Please strictly follow the rules in https://github.com/deepinsight/insightface/tree/master/src/megaface/README.md if you want to use this list.
Aaron_Eckhart_136.png
Aaron_Eckhart_221.png
Adam_McKay_468.png
Adam_McKay_478.png
Adam_Sandler_558.png
Adrienne_Barbeau_4259.png
Adrienne_Frantz_27683.png
Adrienne_Frantz_27693.png
Adrienne_Frantz_27699.png
Adrienne_Frantz_27701.png
Adrienne_Frantz_27829.png
Aisha_Hinds_35768.png
Alec_Baldwin_2121.png
Alice_Krige_40717.png
Alley_Mills_52029.png
Alley_Mills_52039.png
Alley_Mills_52044.png
Allison_Janney_37357.png
Allison_Janney_37447.png
Alyson_Hannigan_32288.png
Alyssa_Milano_51641.png
America_Ferrera_25859.png
America_Ferrera_25870.png
Amy_Davidson_18553.png
Andrea_Bogart_8427.png
Andrea_Bowen_8992.png
Andrea_Bowen_9090.png
Andy_Richter_3141.png
Angell_Conwell_15508.png
Anne_Hathaway_33648.png
Anne_Hathaway_33685.png
Annie_Ilonzeh_37123.png
Anthony_Hopkins_3562.png
Anthony_Hopkins_3595.png
Anthony_Hopkins_3694.png
Antonio_Banderas_4016.png
Arnold_Vosloo_4287.png
Ashley_Benson_4144.png
Ashley_Johnson_37631.png
Ashley_Johnson_37649.png
Audra_McDonald_49657.png
Audrey_Landers_42201.png
Audrey_Landers_42246.png
Barbara_Carrera_11961.png
Ben_Affleck_4700.png
Ben_Affleck_4706.png
Ben_Affleck_4762.png
Ben_Affleck_4885.png
Ben_Kingsley_5146.png
Ben_McKenzie_5219.png
Ben_Stiller_5419.png
Ben_Stiller_5432.png
Bernard_Hill_5869.png
Bernard_Hill_5969.png
Bernie_Mac_6083.png
Billy_Bob_Thornton_7010.png
Billy_Bob_Thornton_7016.png
Billy_Bob_Thornton_7028.png
Billy_Bob_Thornton_7047.png
Billy_Bob_Thornton_7069.png
Billy_Bob_Thornton_7093.png
Billy_Bob_Thornton_7106.png
Billy_Bob_Thornton_7140.png
Billy_Bob_Thornton_7161.png
Billy_Boyd_7281.png
Billy_Boyd_7334.png
Billy_Burke_7418.png
Billy_Burke_7556.png
Billy_Burke_7558.png
Billy_Zane_7799.png
Billy_Zane_7821.png
Bobbie_Eakes_23690.png
Bobbie_Eakes_23702.png
Brad_Pitt_8285.png
Bradley_Cooper_8416.png
Brianna_Brown_10455.png
Brianna_Brown_10482.png
Brooke_Langton_42515.png
Brooke_Langton_42603.png
Brooke_Langton_42604.png
Brooke_Langton_42628.png
Brooke_Langton_42634.png
Brooke_Langton_42643.png
Bruce_Greenwood_8831.png
Candice_Bergen_6028.png
Candice_Bergen_6055.png
Candice_Bergen_6080.png
Carla_Gallo_28085.png
Carla_Gallo_28139.png
Carmen_Electra_24315.png
Caroline_Dhavernas_21720.png
Cary_Elwes_9746.png
Casey_Affleck_9925.png
Cathy_Lee_Crosby_16548.png
Cathy_Lee_Crosby_16564.png
Chase_Masterson_48256.png
Chazz_Palminteri_10758.png
Cheryl_Hines_35834.png
Chris_Evans_10942.png
Chris_Evans_10943.png
Chris_Evans_10990.png
Chris_Evans_11000.png
Chris_Evans_11039.png
Chris_Kattan_11206.png
Chris_Klein_11329.png
Chris_Klein_11346.png
Chris_Klein_11471.png
Christa_Miller_51872.png
Christian_Bale_11961.png
Christina_Applegate_2776.png
Christopher_Lloyd_12504.png
Christopher_Reeve_12692.png
Christopher_Reeve_12737.png
Chyler_Leigh_43366.png
Chyler_Leigh_43374.png
Ciara_Bravo_10094.png
Ciara_Bravo_10161.png
Ciara_Bravo_10214.png
Clint_Eastwood_12918.png
Colin_Farrell_13196.png
Colin_Farrell_13268.png
Colin_Farrell_13282.png
Colin_Firth_13455.png
Colin_Firth_13566.png
Courteney_Cox_16360.png
Crystal_Chappell_13859.png
Crystal_Chappell_13921.png
Crystal_Chappell_13932.png
Crystal_Chappell_13949.png
Crystal_Chappell_13961.png
Dan_Lauria_13992.png
Dan_Lauria_14073.png
Dana_Delany_20425.png
Dana_Delany_20561.png
Dana_Delany_20621.png
Dana_Delany_20632.png
Daniel_Day-Lewis_14356.png
Daniel_Day-Lewis_14361.png
Daniel_Day-Lewis_14397.png
Daniel_Day-Lewis_14545.png
Daniel_Radcliffe_14770.png
David_Schwimmer_15942.png
David_Wenham_16210.png
David_Wenham_16221.png
David_Wenham_16224.png
David_Wenham_16235.png
David_Wenham_16241.png
David_Wenham_16261.png
David_Wenham_16295.png
David_Wenham_16300.png
David_Wenham_16327.png
Dean_Cain_16435.png
Debra_Messing_50555.png
Debra_Messing_50597.png
Debra_Messing_50703.png
Debra_Messing_50746.png
Delta_Burke_11111.png
Delta_Burke_11176.png
Denzel_Washington_16698.png
Desmond_Harrington_17178.png
Diahann_Carroll_12351.png
Diahann_Carroll_12397.png
Dianna_Agron_269.png
Dianna_Agron_363.png
Dianna_Agron_375.png
Dianna_Agron_396.png
Dustin_Hoffman_17932.png
Elizabeth_Berkley_6214.png
Elizabeth_Berkley_6259.png
Elizabeth_Hendrickson_34413.png
Ellen_Greene_30978.png
Ellen_Greene_31003.png
Ellen_Greene_31005.png
Emily_Deschanel_20666.png
Erin_Cummings_17368.png
Erin_Cummings_17400.png
Erin_Cummings_17457.png
Ethan_Hawke_19548.png
Eva_Longoria_45027.png
Farah_Fath_25299.png
Farah_Fath_25343.png
Farah_Fath_25365.png
Farah_Fath_25401.png
Farrah_Fawcett_25594.png
Florencia_Lozano_45592.png
Florencia_Lozano_45594.png
Florencia_Lozano_45606.png
Florencia_Lozano_45632.png
Florencia_Lozano_45640.png
Fran_Drescher_22955.png
Fran_Drescher_23030.png
Gabrielle_Carteris_12657.png
Gates_McFadden_49864.png
Gates_McFadden_49868.png
Glenn_Close_14672.png
Glenn_Close_14739.png
Harrison_Ford_22656.png
Hayden_Christensen_23089.png
Heather_Locklear_44410.png
Heather_Locklear_44498.png
Heather_Locklear_44504.png
Heather_Locklear_44527.png
Holly_Marie_Combs_15225.png
Ian_Holm_24214.png
Jackee_Harry_32964.png
Jackee_Harry_33011.png
James_Brolin_26065.png
James_Frain_26352.png
James_Franco_26574.png
James_Marsden_26731.png
James_Marsden_26756.png
James_McAvoy_26932.png
Jamie_Lee_Curtis_17869.png
Jamie_Lee_Curtis_18018.png
Jamie_Lee_Curtis_18056.png
Jamie_Luner_46356.png
Jamie_Luner_46423.png
Jane_Curtin_17787.png
Jane_Curtin_17820.png
Jane_Leeves_42833.png
Jane_Lynch_46639.png
Jane_Lynch_46743.png
January_Jones_38213.png
January_Jones_38384.png
January_Jones_38414.png
Jasmine_Guy_31496.png
Jasmine_Guy_31562.png
Jasmine_Guy_31594.png
Jasmine_Guy_31618.png
Jasmine_Guy_31678.png
Jason_Biggs_28339.png
Jason_Lee_55690.png
Jason_Lee_55703.png
Jeanne_Cooper_15551.png
Jeanne_Cooper_15652.png
Jeanne_Cooper_15696.png
Jenilee_Harrison_32833.png
Jenilee_Harrison_32864.png
Jenilee_Harrison_32895.png
Jennette_McCurdy_49314.png
Jennie_Garth_28672.png
Jennie_Garth_28686.png
Jeremy_Sisto_29948.png
Jessica_Biel_7413.png
Jessica_Capshaw_11891.png
Jessica_Capshaw_11909.png
Jessica_Leccia_42714.png
Jessica_Leccia_42719.png
Jill_Eikenberry_24108.png
Jill_Eikenberry_24159.png
Jill_Eikenberry_24166.png
Jill_Eikenberry_24179.png
Jill_Eikenberry_24188.png
Jill_Hennessy_35087.png
Jim_Carrey_30976.png
Jim_Carrey_31137.png
Jim_Carrey_31150.png
Joan_Collins_14963.png
Joanna_Kerns_40119.png
Joanna_Kerns_40127.png
Joanna_Kerns_40145.png
Joanna_Kerns_40162.png
Joanna_Kerns_40170.png
Joanna_Kerns_40177.png
John_Malkovich_32908.png
John_Malkovich_32934.png
Jon_Hamm_33859.png
Jonathan_Rhys_Meyers_34545.png
Jonathan_Sadowski_55304.png
Josh_Brolin_34866.png
Josh_Duhamel_35073.png
Josie_Bissett_7155.png
Josie_Bissett_7222.png
Josie_Bissett_7243.png
Joyce_DeWitt_20190.png
Julia_Louis-Dreyfus_45687.png
Julia_Louis-Dreyfus_45785.png
Julie_Marie_Berman_6437.png
Justin_Long_35979.png
Justin_Long_35983.png
Justine_Bateman_4879.png
Kassie_DePaiva_19841.png
Katherine_Helmond_34045.png
Kathy_Baker_3934.png
Kathy_Baker_3984.png
Kathy_Griffin_31087.png
Kathy_Griffin_31113.png
Kellan_Lutz_36883.png
Kevin_Costner_37976.png
Kim_Cattrall_13087.png
Kim_Delaney_20329.png
Kim_Delaney_20363.png
Kim_Fields_26573.png
Kimberlin_Brown_10564.png
Kimberly_McCullough_49225.png
Kirstie_Alley_1565.png
Kit_Harington_38601.png
Kit_Harington_38638.png
Kristen_Alderson_615.png
Kristen_Alderson_714.png
Kristen_Johnston_37751.png
Kristin_Chenoweth_14161.png
Kristin_Chenoweth_14220.png
Kristin_Chenoweth_14242.png
Kristy_McNichol_50183.png
Kristy_McNichol_50205.png
Kristy_McNichol_50256.png
Kristy_McNichol_50272.png
Kristy_McNichol_50295.png
Kristy_McNichol_50304.png
Kristy_McNichol_50314.png
Lacey_Chabert_13239.png
Lacey_Chabert_13291.png
Laura_Innes_37302.png
Laura_Innes_37329.png
Laura_Leighton_43101.png
Laura_Leighton_43169.png
Lauralee_Bell_5169.png
Lauralee_Bell_5206.png
Lauralee_Bell_5272.png
Lauren_Holly_36179.png
Lauren_Holly_36191.png
Lauren_Holly_36211.png
Lauren_Koslow_40373.png
Lauren_Koslow_40426.png
Lauren_Koslow_40428.png
Lauren_Koslow_40434.png
Lauren_Koslow_40453.png
Laurie_Metcalf_50846.png
Laurie_Metcalf_50878.png
Laurie_Metcalf_50883.png
Laurie_Metcalf_50897.png
Laurie_Metcalf_50916.png
Laurie_Metcalf_50917.png
Laurie_Metcalf_50920.png
Laurie_Metcalf_50946.png
Laurie_Metcalf_50973.png
Laurie_Metcalf_50984.png
Laurie_Metcalf_50986.png
Laurie_Metcalf_50989.png
Laurie_Metcalf_51019.png
Lea_Michele_51327.png
Lea_Michele_51337.png
Lea_Michele_51362.png
Lea_Michele_51363.png
Lea_Michele_51427.png
Lecy_Goranson_30511.png
Lecy_Goranson_30538.png
Lecy_Goranson_30539.png
Lesley-Anne_Down_22118.png
Lesley-Anne_Down_22144.png
Lesley-Anne_Down_22249.png
Lexi_Ainsworth_126.png
Lexi_Ainsworth_129.png
Lexi_Ainsworth_150.png
Lexi_Ainsworth_28.png
Lexi_Ainsworth_47.png
Lexi_Ainsworth_54.png
Liev_Schreiber_39673.png
Linda_Evans_24646.png
Linda_Evans_24670.png
Linda_Gray_30789.png
Linda_Gray_30823.png
Linda_Gray_30895.png
Lindsay_Hartley_33089.png
Lindsay_Hartley_33091.png
Lindsay_Hartley_33182.png
Lindsay_Hartley_33188.png
Lindsay_Hartley_33192.png
Lisa_Bonet_8489.png
Lisa_Bonet_8547.png
Lisa_Kudrow_40922.png
Lisa_LoCicero_44328.png
Lisa_LoCicero_44334.png
Loni_Anderson_2152.png
Loni_Anderson_2190.png
Lorraine_Bracco_9632.png
Lorraine_Bracco_9746.png
Lourdes_Benedicto_5324.png
Lourdes_Benedicto_5360.png
Mary_Beth_Evans_24742.png
Mary_Crosby_16814.png
Mary_Crosby_16826.png
Mary_Crosby_16827.png
Mary_Crosby_16835.png
Mary_Crosby_16856.png
Mary_Crosby_16867.png
Mary_Crosby_16876.png
Matt_Czuchry_41100.png
Matt_Dillon_41441.png
Matt_Dillon_41584.png
Melina_Kanakaredes_39464.png
Melissa_Archer_3127.png
Melissa_Archer_3169.png
Melissa_Benoist_5425.png
Melissa_Benoist_5490.png
Melissa_Benoist_5507.png
Melissa_Benoist_5523.png
Melissa_Benoist_5538.png
Michael_Douglas_43514.png
Michael_Douglas_43520.png
Michael_Douglas_43593.png
Michael_Landes_43643.png
Michael_Landes_43712.png
Michael_Vartan_43752.png
Michael_Vartan_43873.png
Mila_Kunis_41190.png
Miranda_Cosgrove_15892.png
Molly_Burnett_11287.png
Molly_Burnett_11323.png
Morena_Baccarin_3662.png
Natalia_Livingston_44183.png
Natalie_Hall_31866.png
Natalie_Hall_31875.png
Natalie_Hall_31898.png
Natalie_Hall_31914.png
Natalie_Martinez_48106.png
Natalie_Martinez_48117.png
Natalie_Martinez_48191.png
Neve_Campbell_11584.png
Nicole_Eggert_23928.png
Nicole_Eggert_24088.png
Nicole_de_Boer_19422.png
Nicole_de_Boer_19448.png
Olivia_d'Abo_18077.png
Olivia_d'Abo_18126.png
Olivia_d'Abo_18133.png
Olivia_d'Abo_18166.png
Olivia_d'Abo_18188.png
Olivia_d'Abo_18202.png
Olivia_d'Abo_18224.png
Olivia_d'Abo_18228.png
Olivia_d'Abo_18229.png
Pamela_Sue_Martin_47876.png
Pamela_Sue_Martin_48018.png
Pamela_Sue_Martin_48027.png
Patricia_Arquette_3360.png
Patricia_Kalember_39346.png
Patricia_Kalember_39361.png
Patricia_Kalember_39365.png
Patricia_Kalember_39366.png
Patricia_Kalember_39367.png
Patricia_Kalember_39369.png
Peggy_Lipton_43900.png
Peggy_Lipton_43935.png
Peggy_Lipton_43962.png
Peggy_Lipton_44032.png
Peggy_Lipton_44070.png
Peggy_Lipton_44071.png
Peggy_McCay_48867.png
Peggy_McCay_48870.png
Peggy_McCay_48883.png
Peggy_McCay_48897.png
Peri_Gilpin_29456.png
Philip_Seymour_Hoffman_47737.png
Philip_Seymour_Hoffman_47778.png
Portia_Doubleday_22036.png
Portia_Doubleday_22101.png
Portia_de_Rossi_19903.png
Portia_de_Rossi_19908.png
Portia_de_Rossi_19957.png
Portia_de_Rossi_19963.png
Portia_de_Rossi_19997.png
Portia_de_Rossi_20036.png
Portia_de_Rossi_20069.png
Rachel_Dratch_22646.png
Rachel_Dratch_22751.png
Rebecca_Budig_10668.png
Rebecca_Budig_10714.png
Rebecca_Budig_10756.png
Rebecca_Budig_10785.png
Rebecca_Budig_10792.png
Rebecca_Budig_10805.png
Rebecca_Herbst_35381.png
Rebecca_Herbst_35391.png
Rebecca_Herbst_35407.png
Rebecca_Herbst_35454.png
Richard_E._Grant_48348.png
Richard_Gere_48555.png
Richard_Gere_48559.png
Richard_Madden_48806.png
Robert_Di_Niro_49242.png
Robert_Downey_Jr._49395.png
Robert_Downey_Jr._49485.png
Robert_Duvall_49683.png
Robert_Duvall_49684.png
Robert_Duvall_49744.png
Robert_Knepper_49865.png
Roma_Downey_22357.png
Roma_Downey_22378.png
Roseanne_Barr_4520.png
Roseanne_Barr_4546.png
Roseanne_Barr_4622.png
Rue_McClanahan_48968.png
Rue_McClanahan_49092.png
Rue_McClanahan_49151.png
Rupert_Friend_50825.png
Ryan_Gosling_51576.png
S._Epatha_Merkerson_50436.png
S._Epatha_Merkerson_50464.png
Sara_Gilbert_29260.png
Sara_Gilbert_29333.png
Sarah_Drew_23164.png
Sarah_Drew_23166.png
Sarah_Drew_23174.png
Sarah_Drew_23209.png
Sarah_Drew_23245.png
Sarah_Drew_23272.png
Sarah_Drew_23286.png
Sarah_Hyland_36867.png
Sean_Bean_52769.png
Selena_Gomez_30458.png
Selena_Gomez_30471.png
Seth_Rogen_52915.png
Seth_Rogen_53117.png
Seth_Rogen_53123.png
Shannen_Doherty_21826.png
Shannon_Kane_39638.png
Shannon_Kane_39729.png
Shannon_Kane_39732.png
Sharon_Case_12719.png
Sharon_Case_12779.png
Sharon_Case_12889.png
Sharon_Gless_29936.png
Sharon_Gless_29976.png
Sharon_Gless_29987.png
Sharon_Gless_29989.png
Shelley_Hack_31728.png
Shelley_Hack_31736.png
Shelley_Hack_31826.png
Sherilyn_Fenn_25694.png
Shirley_Jones_38512.png
Shirley_Jones_38556.png
Staci_Keanan_39993.png
Staci_Keanan_40018.png
Staci_Keanan_40038.png
Staci_Keanan_40068.png
Stana_Katic_39947.png
Susan_Flannery_27075.png
Susan_Flannery_27095.png
Susan_Flannery_27128.png
Swoosie_Kurtz_41518.png
Swoosie_Kurtz_41605.png
Tamala_Jones_38648.png
Tamara_Braun_9874.png
Tatyana_M._Ali_1228.png
Tatyana_M._Ali_1266.png
Tatyana_M._Ali_1290.png
Tatyana_M._Ali_1349.png
Taylor_Atelian_3507.png
Taylor_Atelian_3517.png
Taylor_Atelian_3526.png
Taylor_Atelian_3532.png
Taylor_Atelian_3533.png
Taylor_Atelian_3553.png
Taylor_Atelian_3559.png
Taylor_Atelian_3566.png
Taylor_Atelian_3581.png
Taylor_Lautner_54170.png
Taylor_Lautner_54238.png
Taylor_Lautner_54258.png
Taylor_Lautner_54279.png
Taylor_Lautner_54292.png
Taylor_Lautner_54296.png
Taylor_Lautner_54328.png
Tempestt_Bledsoe_8014.png
Tempestt_Bledsoe_8062.png
Tempestt_Bledsoe_8063.png
Teri_Hatcher_33393.png
Teri_Hatcher_33395.png
Teri_Hatcher_33401.png
Terry_Farrell_25136.png
Terry_Farrell_25203.png
Tia_Carrere_12136.png
Tia_Carrere_12240.png
Tobey_Maguire_54398.png
Tom_Hanks_54730.png
Tyne_Daly_18276.png
Tyne_Daly_18293.png
Tyne_Daly_18322.png
Tyne_Daly_18362.png
Tyne_Daly_18370.png
Tyne_Daly_18399.png
Tyne_Daly_18420.png
Valerie_Cruz_17158.png
Valerie_Harper_32638.png
Valerie_Harper_32705.png
Valerie_Harper_32771.png
Vanessa_Marcil_47131.png
Vanessa_Marcil_47158.png
Vanessa_Marcil_47182.png
Veronica_Hamel_32010.png
Veronica_Hamel_32016.png
Veronica_Hamel_32020.png
Veronica_Hamel_32030.png
Victor_Garber_54809.png
Victor_Garber_54894.png
Victoria_Justice_39219.png
Wanda_De_Jesus_19687.png
Wendie_Malick_46848.png
Yasmine_Bleeth_8219.png
Yasmine_Bleeth_8238.png
Yasmine_Bleeth_8259.png
Yasmine_Bleeth_8350.png
Zooey_Deschanel_20937.png

View File

@@ -0,0 +1,720 @@
#Please strictly follow the rules in https://github.com/deepinsight/insightface/tree/master/src/megaface/README.md if you want to use this list.
375/37531198@N00/4174611825_0.jpg
375/37531198@N00/4174611825_1.jpg
925/92596048@N00/3910487430_2.jpg
587/58736276@N00/3023685783_2.jpg
905/90553008@N00/824787574_0.jpg
350/35034345966@N01/3086429616_0.jpg
388/38847947@N03/4351812234_0.jpg
788/78865207@N05/8267101710_0.jpg
495/49503172960@N01/2674784671_0.jpg
481/48122140@N00/3488870947_0.jpg
770/77029195@N00/490108118_3.jpg
566/56692742@N05/8202697602_1.jpg
546/54613470@N00/6155519468_0.jpg
486/48600102544@N01/206574155_6.jpg
857/85705006@N00/2052818739_0.jpg
345/34531071@N07/3374444062_1.jpg
714/71490499@N06/6460912773_0.jpg
790/79045485@N00/8312851597_9.jpg
497/49703429@N00/487110767_5.jpg
588/58819758@N00/502852994_0.jpg
603/60370779@N07/12733436605_1.jpg
351/35197415@N06/3392955585_0.jpg
414/41464693@N02/4431128027_1.jpg
745/74536253@N07/7744893278_0.jpg
745/74536253@N07/7744893278_1.jpg
745/74536253@N07/7744893278_2.jpg
745/74536253@N07/7746445288_0.jpg
720/72093892@N00/8394540214_0.jpg
943/94306126@N05/8585087758_0.jpg
316/31635293@N06/10300923803_0.jpg
316/31635293@N06/10300923803_1.jpg
461/46151867@N00/1361048872_0.jpg
316/31658559@N04/11248071845_2.jpg
510/51035763730@N01/3487351916_0.jpg
381/38176611@N04/6845223441_1.jpg
812/8127814@N07/1169159373_0.jpg
596/59689442@N00/397368405_0.jpg
457/45702277@N04/4404748345_2.jpg
457/45702277@N04/4405512456_0.jpg
315/31557769@N04/5183029470_0.jpg
105/105042823@N05/10224905845_1.jpg
233/23302147@N08/6717536683_0.jpg
943/94324445@N02/8585299005_5.jpg
865/86525452@N06/9026905203_1.jpg
575/57593906@N00/183103326_0.jpg
575/57593906@N00/183103326_1.jpg
513/51313580@N08/6077728920_10.jpg
794/79447530@N00/2646557330_3.jpg
838/8385182@N06/8791791352_2.jpg
834/83452322@N00/1379291226_0.jpg
299/29932833@N06/4605882096_0.jpg
125/12523672@N02/1368391674_0.jpg
251/25193498@N00/4015722351_2.jpg
207/20741443@N00/5045852254_2.jpg
313/31369133@N04/5050193084_3.jpg
313/31369133@N04/5050193084_5.jpg
504/50440126@N03/8061480293_0.jpg
353/35336901@N00/4353383267_0.jpg
102/10249456@N08/839447586_7.jpg
621/62158648@N07/5765099754_0.jpg
779/77991982@N00/3351774300_0.jpg
779/77991982@N00/3351774300_2.jpg
207/20741443@N00/5045852254_0.jpg
579/57954142@N07/6082189380_0.jpg
210/21091679@N08/5811404199_1.jpg
555/55530018@N04/5481680731_1.jpg
830/8302818@N06/7180492423_4.jpg
108/108788939@N08/11207124956_0.jpg
358/35803015@N03/5571012744_5.jpg
125/12508217@N08/3458308016_3.jpg
526/52617239@N07/9550573423_3.jpg
760/7600622@N07/442516245_2.jpg
838/83855583@N00/139393859_0.jpg
357/35775623@N00/4387679624_0.jpg
508/50824803@N04/5101695889_0.jpg
813/81369265@N00/5962625787_1.jpg
849/84987970@N00/6503971169_3.jpg
366/36692718@N00/7508265904_1.jpg
101/101878765@N05/9792203325_2.jpg
149/14994959@N04/3611150762_2.jpg
257/25777683@N04/3781609919_2.jpg
206/20625597@N07/3362909564_1.jpg
768/7686538@N06/1370874019_0.jpg
286/28675521@N05/2677267827_0.jpg
958/95818633@N00/317066357_0.jpg
114/11461909@N06/3569039014_2.jpg
114/11461909@N06/3926753297_2.jpg
827/8271358@N08/4748146669_0.jpg
341/34120602@N05/5979478480_5.jpg
114/11461909@N06/8281364025_1.jpg
467/46721620@N00/3849799981_0.jpg
407/40719493@N06/4008300252_1.jpg
764/76491372@N00/540480752_1.jpg
330/33019425@N00/275100215_2.jpg
316/31677763@N00/273039584_0.jpg
213/21349468@N00/82691007_2.jpg
425/42568333@N05/4079636121_3.jpg
972/97205184@N04/10076409423_0.jpg
827/8279509@N08/2712311284_0.jpg
311/31150907@N03/4133932870_0.jpg
412/41259870@N06/5812928114_0.jpg
332/33213804@N04/7599995760_0.jpg
375/37552553@N03/8157072811_0.jpg
737/7376233@N08/8712184839_0.jpg
665/66598017@N08/9614369266_3.jpg
352/35237099299@N01/16090400_0.jpg
395/39545243@N00/1121668561_11.jpg
529/52968060@N00/4836487807_1.jpg
466/46648278@N00/68839900_0.jpg
768/76841197@N00/349452085_0.jpg
971/97193933@N00/7441014914_1.jpg
711/71164686@N00/2199159152_3.jpg
956/95633051@N00/2504698743_0.jpg
850/85094310@N00/2536647566_0.jpg
850/85094310@N00/2536647566_1.jpg
546/54673576@N00/3231373075_1.jpg
419/41942641@N02/3911619734_0.jpg
706/70654989@N00/435992217_0.jpg
665/66588862@N00/4990604401_0.jpg
665/66588862@N00/4990604401_1.jpg
175/17514301@N00/504360950_0.jpg
242/24256726@N00/2284033395_1.jpg
388/38847947@N03/4278156225_0.jpg
120/12057709@N00/4817523632_5.jpg
958/95876452@N07/8757383318_5.jpg
958/95876452@N07/9136979141_0.jpg
511/51135741@N00/1197314078_2.jpg
732/73257494@N00/254360075_0.jpg
217/21725313@N04/2735944275_4.jpg
859/85928975@N00/3054044988_0.jpg
803/8035175@N05/511570673_2.jpg
169/16922208@N08/5320713367_0.jpg
370/37016273@N02/8089047614_0.jpg
108/10807869@N03/9369308884_2.jpg
859/85928975@N00/3320166109_0.jpg
365/36521958172@N01/100498068_4.jpg
724/7243800@N05/2227611248_0.jpg
724/7243800@N05/2227611248_3.jpg
117/11738031@N00/2998834476_0.jpg
795/7959345@N03/5237906433_0.jpg
236/23634892@N07/8479172294_0.jpg
334/33484476@N00/1631862642_0.jpg
793/7934170@N07/4553285915_3.jpg
603/60370779@N07/12733436605_0.jpg
943/94366076@N00/3048525915_0.jpg
277/27721729@N07/3509070727_2.jpg
759/75933558@N00/3620382660_0.jpg
460/46041863@N08/4441052512_0.jpg
129/12989638@N00/6212397379_0.jpg
337/33757663@N00/7358306448_0.jpg
943/94306126@N05/8585087758_1.jpg
953/95388136@N08/8862410806_0.jpg
223/22320444@N08/5673545350_0.jpg
434/43411679@N00/262399750_0.jpg
635/63534101@N00/2646352652_1.jpg
225/22591084@N00/6196535614_0.jpg
635/63587775@N03/6196638593_25.jpg
353/35399223@N08/6016093673_0.jpg
410/41063459@N02/3864724318_0.jpg
822/8220615@N05/4552969733_3.jpg
549/54949957@N00/5233621265_1.jpg
701/70177760@N04/9477029774_4.jpg
105/10564470@N04/2648385175_0.jpg
199/19909714@N00/3830545099_2.jpg
758/75818171@N02/7146473317_0.jpg
233/23354880@N03/2452852823_0.jpg
399/39915396@N00/5193727577_1.jpg
575/57503924@N07/6296483205_0.jpg
430/43093552@N00/6705048843_0.jpg
417/41739894@N04/4830148462_0.jpg
417/41739894@N04/4830148462_1.jpg
101/101386609@N04/13523151125_0.jpg
381/38117284@N00/1590829110_0.jpg
827/8279509@N08/2712311284_1.jpg
379/37963250@N06/3588816064_0.jpg
510/51035607419@N01/3883605563_0.jpg
311/31150907@N03/4133932870_1.jpg
311/31150907@N03/4333226349_0.jpg
409/40989913@N03/5368897603_1.jpg
332/33213804@N04/7599995760_2.jpg
519/51973188@N06/8553574872_0.jpg
665/66598017@N08/9614369266_1.jpg
131/13117300@N05/2323998041_0.jpg
489/48949906@N00/3917465141_1.jpg
489/48949906@N00/3917465141_2.jpg
251/25117187@N03/9118076515_0.jpg
225/22547477@N05/10576991153_1.jpg
169/16926338@N06/3551147251_1.jpg
120/12057709@N00/4817523632_1.jpg
327/32721085@N04/5095989423_2.jpg
404/40406266@N08/7499062102_1.jpg
227/22766186@N07/5625438347_0.jpg
227/22766186@N07/5626032050_2.jpg
302/30237597@N00/3761331400_0.jpg
412/41259870@N06/5811920381_0.jpg
369/36934384@N07/7153191901_0.jpg
369/36934384@N07/7153191901_1.jpg
332/33213804@N04/7599995760_6.jpg
526/52604186@N03/9982748374_2.jpg
125/12508217@N08/3458308016_0.jpg
793/79383703@N08/8188874944_2.jpg
328/32820037@N04/12550334735_0.jpg
554/55456932@N08/5239999140_0.jpg
193/19323934@N05/5236281857_0.jpg
300/30035643@N03/6318064786_1.jpg
260/26071009@N04/8133430835_0.jpg
395/39545243@N00/1121668561_23.jpg
927/92723020@N00/198034899_0.jpg
732/73257494@N00/254360075_1.jpg
768/76815233@N00/318365457_0.jpg
768/76815233@N00/318365457_1.jpg
758/75818171@N02/6811401849_0.jpg
960/96009072@N00/7213113090_1.jpg
440/44042276@N00/11078882754_1.jpg
563/56379629@N00/231943094_0.jpg
984/98411817@N00/2372250142_0.jpg
984/98411817@N00/2372250142_4.jpg
758/75815807@N00/3141877049_8.jpg
779/77991982@N00/3351774300_1.jpg
956/95668756@N00/9137041215_1.jpg
664/66487272@N00/3175332074_0.jpg
714/71484472@N08/7749429212_0.jpg
622/62292236@N03/12280954993_0.jpg
716/71635685@N00/2171921996_1.jpg
703/70335407@N00/2629913923_0.jpg
375/37526864@N03/3575384689_0.jpg
441/44124482892@N01/4076872185_0.jpg
760/7600622@N07/442516245_2.jpg
923/92399379@N00/3745627039_0.jpg
236/23634892@N07/8479172294_1.jpg
620/62092813@N00/12460977104_8.jpg
486/48600102544@N01/206574155_2.jpg
486/48600102544@N01/206574155_9.jpg
120/12057709@N00/4817523632_4.jpg
421/42197860@N05/7964010316_0.jpg
790/79045485@N00/8312851597_13.jpg
943/94366076@N00/3048525915_2.jpg
904/9047144@N06/4039658431_2.jpg
222/22292214@N00/4243141797_0.jpg
736/73694732@N00/4431487460_0.jpg
527/52706816@N04/4862401074_0.jpg
696/69654695@N04/8112732403_0.jpg
147/14754516@N00/6746387961_0.jpg
497/49703429@N00/487110767_7.jpg
145/14537247@N02/3736211228_8.jpg
286/28629203@N00/3064397634_3.jpg
332/33213624@N05/3106373748_0.jpg
334/33415234@N02/3114165513_1.jpg
314/31492856@N08/3175678730_1.jpg
333/33369864@N07/3244523696_4.jpg
309/30975003@N06/3322588992_1.jpg
262/26212498@N08/3372483710_1.jpg
373/37310116@N04/3434757683_0.jpg
246/24652718@N07/3504274334_0.jpg
311/31170710@N02/3541648434_0.jpg
868/8683186@N05/3611020792_0.jpg
868/8683186@N05/3611020792_6.jpg
145/14537247@N02/3736211228_1.jpg
145/14537247@N02/3736211228_10.jpg
145/14537247@N02/3736211228_3.jpg
145/14537247@N02/3736211228_7.jpg
403/40384578@N06/4101631794_0.jpg
495/49503010002@N01/4159540475_1.jpg
868/8683186@N05/4808516991_6.jpg
412/41275121@N06/4903601396_5.jpg
529/52947003@N08/5062807160_1.jpg
529/52947003@N08/5062807160_10.jpg
529/52947003@N08/5062807160_6.jpg
556/55642376@N02/5907157097_2.jpg
556/55642376@N02/5907157097_3.jpg
294/29475291@N05/6520878321_0.jpg
788/78832981@N04/7439193650_0.jpg
861/86125876@N07/7890416460_0.jpg
495/49503124519@N01/8054014324_8.jpg
170/17040371@N08/8095753999_5.jpg
170/17040371@N08/8095788948_4.jpg
336/33672038@N05/8147806935_1.jpg
340/34085730@N06/8292774555_1.jpg
268/26881063@N08/13878266544_2.jpg
309/30932831@N00/2773069134_2.jpg
276/27674701@N00/306654282_1.jpg
402/40272616@N07/4800636882_1.jpg
980/98055082@N00/992566662_1.jpg
232/23206546@N04/8621794327_0.jpg
232/23206546@N04/8621794327_1.jpg
224/22491837@N08/3626048130_0.jpg
224/22491837@N08/3641245154_2.jpg
950/95026061@N00/2542285242_0.jpg
759/75923111@N02/8430338965_0.jpg
106/10647915@N04/6503063251_1.jpg
759/7598168@N03/5226476291_0.jpg
105/105042823@N05/10224905845_2.jpg
450/45019754@N02/7606879826_2.jpg
943/94324445@N02/8585299005_4.jpg
310/31083236@N06/2986649565_0.jpg
441/44124482892@N01/4076872185_4.jpg
292/29276771@N03/11641854816_0.jpg
363/36382552@N04/5425274524_3.jpg
767/76795962@N03/12297733704_0.jpg
121/121110687@N08/13323427194_2.jpg
229/22969849@N00/1349964647_17.jpg
371/37147296@N03/3720755210_3.jpg
366/36684003@N06/4437979063_0.jpg
533/53384351@N06/4978715463_0.jpg
125/12572929@N05/5221666460_1.jpg
641/64158255@N00/5489160164_0.jpg
299/29912007@N05/5921111759_2.jpg
388/38820321@N06/6281589012_0.jpg
266/26657772@N02/7323904516_0.jpg
812/81253095@N08/7563494124_0.jpg
812/81253095@N08/7563494124_7.jpg
131/13117300@N05/2323998041_1.jpg
239/23927487@N05/4499177940_1.jpg
624/62477948@N02/5691704999_3.jpg
458/45842803@N00/2702028061_3.jpg
213/21385420@N00/9351830159_2.jpg
111/11149280@N02/9354553803_0.jpg
297/29785808@N04/2869578452_0.jpg
581/58167807@N00/4216179051_0.jpg
309/30932831@N00/2773069134_0.jpg
113/113235388@N08/11701952496_5.jpg
431/43152922@N00/3293843245_0.jpg
270/27088911@N08/5601971419_0.jpg
291/29123483@N00/8613949068_1.jpg
619/61992454@N00/119165477_2.jpg
260/26071009@N04/8133430835_1.jpg
561/56198214@N00/11354524454_0.jpg
295/29599105@N00/5802624346_6.jpg
330/33085931@N08/9400799871_0.jpg
341/34128229@N06/3267947070_0.jpg
213/21385420@N00/9351830159_0.jpg
758/75815807@N00/3141877049_7.jpg
529/52909086@N08/4912165639_0.jpg
923/92319630@N00/2022738688_0.jpg
318/31826784@N06/3346271475_0.jpg
437/43791698@N07/4031782636_4.jpg
269/26966164@N08/2699439482_3.jpg
525/52545972@N00/7991923484_0.jpg
250/25030443@N03/2852010154_6.jpg
886/88664590@N00/702044241_0.jpg
658/65873073@N00/8667101819_1.jpg
274/27433266@N00/5972034863_0.jpg
292/29233640@N07/3691901778_5.jpg
122/12254431@N02/5261928850_0.jpg
765/76562640@N00/2561153799_0.jpg
664/66487272@N00/3175332074_3.jpg
349/34946027@N06/3899131678_3.jpg
914/91409706@N00/7296129156_3.jpg
914/91409706@N00/7296129156_5.jpg
329/32996060@N05/7496967290_1.jpg
241/24112094@N00/7545432624_0.jpg
588/58871905@N03/8212289784_0.jpg
284/28426408@N00/4985494194_0.jpg
315/31594932@N00/8242400525_1.jpg
315/31594932@N00/8243469114_0.jpg
500/50016899@N03/4605388504_0.jpg
263/26357527@N05/7223540266_2.jpg
498/49814762@N00/8014123645_0.jpg
498/49814762@N00/8014123645_1.jpg
875/87504239@N08/10670731404_4.jpg
875/87504239@N08/10852751085_3.jpg
372/37244828@N04/13173856803_10.jpg
371/37147296@N03/3720755210_1.jpg
125/12572929@N05/5221666460_2.jpg
641/64158255@N00/5489160164_2.jpg
356/35658425@N08/5726282580_0.jpg
766/76681787@N00/5957052480_2.jpg
812/81253095@N08/7563494124_10.jpg
812/81253095@N08/7563494124_6.jpg
699/69958247@N05/13388922034_0.jpg
748/74896593@N07/6764119963_0.jpg
846/84655869@N08/7775105362_0.jpg
181/18155385@N00/239228291_7.jpg
421/42103613@N08/4040845679_1.jpg
313/31369133@N04/5050193084_4.jpg
785/78573292@N00/2256084892_0.jpg
167/16759096@N00/489481531_0.jpg
957/95723376@N06/8735477642_1.jpg
863/8630870@N02/5322350325_0.jpg
863/8630870@N02/5322350325_2.jpg
863/8630870@N02/5322350325_3.jpg
863/8630870@N02/5322350325_4.jpg
863/8630870@N02/5322350325_5.jpg
735/73531427@N00/218215108_0.jpg
309/30932831@N00/2773069134_3.jpg
727/72707136@N00/33992579_1.jpg
762/76236359@N00/6234006071_5.jpg
736/73626930@N00/9428192473_0.jpg
105/105042823@N05/10224905845_4.jpg
284/28476480@N04/3975041778_0.jpg
943/94324445@N02/8585299005_1.jpg
601/60125017@N00/344049639_2.jpg
876/87619178@N03/8590731823_0.jpg
277/27712137@N04/2623505924_0.jpg
701/70154022@N00/3925362192_1.jpg
459/45975847@N07/4691684655_2.jpg
459/45975847@N07/4692316090_0.jpg
514/51460103@N07/4823559383_0.jpg
220/22072051@N03/5011260955_0.jpg
535/53533856@N08/5361207739_0.jpg
535/53533856@N08/5361207739_1.jpg
535/53533856@N08/5361207739_4.jpg
528/52858230@N08/5564688606_0.jpg
574/57438188@N07/5627487722_0.jpg
176/17694278@N04/6508529521_0.jpg
362/36204621@N08/6698329979_0.jpg
697/69794372@N08/6785690647_2.jpg
100/100739634@N06/9717775343_0.jpg
267/26728047@N05/5524462661_5.jpg
156/15699085@N05/6408711257_0.jpg
327/32721085@N04/5095989423_0.jpg
669/66964839@N00/8741217920_1.jpg
608/60842486@N00/2702417524_0.jpg
206/20625597@N07/3362909564_5.jpg
554/55456932@N08/5239999140_1.jpg
616/61628022@N02/6999143216_0.jpg
685/68558611@N06/6390155109_1.jpg
770/77029195@N00/490108118_4.jpg
258/25827417@N00/2574466319_0.jpg
878/87855339@N00/3244971644_0.jpg
878/87855339@N00/3244971644_1.jpg
654/65497908@N00/6813913952_1.jpg
868/8683186@N05/3611020792_2.jpg
868/8683186@N05/4808516991_9.jpg
294/29475291@N05/6520878321_1.jpg
716/71678139@N05/6807828131_0.jpg
716/71678139@N05/6807828131_1.jpg
716/71678139@N05/6807828131_2.jpg
716/71678139@N05/6807828131_3.jpg
716/71678139@N05/6807828131_4.jpg
716/71678139@N05/6807828131_5.jpg
716/71678139@N05/6807828131_6.jpg
170/17040371@N08/8095753999_3.jpg
170/17040371@N08/8095788948_3.jpg
336/33672038@N05/8147806935_2.jpg
441/44124395142@N01/407637002_0.jpg
795/79543373@N00/2529893768_1.jpg
575/57545119@N04/8673142329_0.jpg
359/35909637@N06/3917967715_0.jpg
407/40719493@N06/4008300252_0.jpg
764/76491372@N00/540480752_0.jpg
221/22132798@N08/8018992056_1.jpg
402/40245280@N00/1936928371_2.jpg
114/114772050@N03/12008186175_0.jpg
636/63601558@N00/199623056_0.jpg
185/18502090@N00/2524917681_47.jpg
793/79398354@N00/2622290309_0.jpg
898/8982863@N07/10257490644_5.jpg
898/8982863@N07/10257490644_8.jpg
458/45861060@N00/7900853588_1.jpg
102/102077743@N07/12190186456_0.jpg
228/22882274@N04/3632475832_2.jpg
233/23357263@N03/3953791578_5.jpg
317/31769130@N03/11011170923_0.jpg
371/37195519@N02/3424150218_0.jpg
795/79589933@N00/3352567863_0.jpg
623/62362697@N00/8577869641_3.jpg
365/36521958172@N01/100498068_1.jpg
898/8982863@N07/10257490644_10.jpg
102/102077743@N07/12190186456_2.jpg
354/35468148224@N01/12347079_0.jpg
905/90516586@N00/159075833_0.jpg
773/77364737@N00/2503183115_0.jpg
975/97584199@N00/2632241655_1.jpg
527/52772894@N00/90756428_0.jpg
527/52772894@N00/90756428_2.jpg
972/97205184@N04/10076409423_0.jpg
101/101386609@N04/13523144805_0.jpg
827/8279509@N08/2712311284_0.jpg
379/37963250@N06/3588816064_1.jpg
379/37963250@N06/3588816064_2.jpg
510/51035607419@N01/3883605563_1.jpg
311/31150907@N03/4133932870_0.jpg
409/40989913@N03/5368897603_0.jpg
412/41259870@N06/5812928114_0.jpg
332/33213804@N04/7599995760_0.jpg
332/33213804@N04/7599995760_1.jpg
375/37552553@N03/8157072811_0.jpg
665/66598017@N08/9614369266_3.jpg
241/24112094@N00/3994684107_2.jpg
388/38847947@N03/4351812234_5.jpg
510/51035620166@N01/237428859_2.jpg
450/45019754@N02/7606879826_0.jpg
664/66474562@N00/19195378_2.jpg
287/28771658@N03/3905862519_0.jpg
123/12360228@N04/7166710688_1.jpg
123/12360228@N04/7166710688_2.jpg
302/30245869@N07/2843650382_4.jpg
972/97205184@N04/10079707226_0.jpg
570/57023246@N00/4623144791_0.jpg
332/33213804@N04/7599995760_4.jpg
487/48782814@N07/13847705683_0.jpg
595/59533494@N04/5479759436_0.jpg
938/93841400@N00/8327059841_1.jpg
824/8240241@N06/4114864483_0.jpg
513/51313580@N08/6077728920_5.jpg
289/28917877@N00/6333929606_0.jpg
395/39545243@N00/1121668561_35.jpg
640/64073015@N00/2831021702_0.jpg
141/14195956@N04/3948300818_3.jpg
539/53906287@N00/5101060235_7.jpg
500/50034633@N05/4837007562_1.jpg
254/25414047@N00/145668608_3.jpg
489/48949906@N00/3917465141_0.jpg
808/80812769@N00/442495313_0.jpg
459/45964884@N08/5242276755_2.jpg
103/10394437@N03/4568233297_5.jpg
169/16989146@N06/7641494140_4.jpg
597/59751999@N00/3289666452_1.jpg
437/43709093@N07/4256796727_0.jpg
445/44521275@N00/506634574_2.jpg
716/71616417@N05/6509071195_2.jpg
716/71616417@N05/6509074321_2.jpg
524/52407821@N00/7984244356_0.jpg
366/36624962@N03/8288304168_3.jpg
697/69756126@N00/4662338037_0.jpg
631/63177605@N08/6792309851_2.jpg
616/61670399@N07/10102978284_1.jpg
105/105042823@N05/10225015423_0.jpg
273/27357514@N00/11343847725_0.jpg
463/46327697@N00/2124534031_4.jpg
984/98411817@N00/2372250142_6.jpg
257/25797798@N07/3211844955_1.jpg
111/11134149@N02/3317710642_0.jpg
388/38847947@N03/4178270889_3.jpg
822/8220615@N05/4552969733_5.jpg
611/61109191@N00/5543733500_2.jpg
806/80604586@N07/9070005912_4.jpg
241/24113869@N07/9379713988_1.jpg
748/74888386@N00/9692493485_0.jpg
695/69501650@N00/46407370_1.jpg
950/95082307@N00/8773335932_0.jpg
510/51035620166@N01/237428859_2.jpg
434/43411679@N00/262399750_3.jpg
634/63465779@N07/6362029047_0.jpg
987/98736785@N00/4499296_3.jpg
715/7155702@N03/2302080410_0.jpg
715/7155702@N03/2302080410_1.jpg
715/7155702@N03/2302080410_3.jpg
715/7155702@N03/2302080410_4.jpg
715/7155702@N03/2302080410_5.jpg
715/7155702@N03/3631806363_2.jpg
874/87472210@N00/3105959620_1.jpg
246/24638567@N00/3321513653_0.jpg
945/94545836@N00/1443145007_1.jpg
362/36298222@N08/5935447071_0.jpg
222/22284790@N06/2176524544_0.jpg
747/7478277@N04/3155354570_0.jpg
747/7478277@N04/3155354570_1.jpg
375/37531198@N00/4174611825_2.jpg
375/37531198@N00/4174611825_4.jpg
768/76841197@N00/349452085_2.jpg
768/76841197@N00/349452085_3.jpg
468/46868174@N08/6511978997_0.jpg
100/10058188@N05/8295748234_0.jpg
108/108285828@N06/10779570026_1.jpg
108/108285828@N06/10779778303_0.jpg
168/16873194@N05/1801191486_0.jpg
857/8572970@N04/2079107678_1.jpg
472/47253165@N00/360990372_0.jpg
647/64767764@N00/450008059_0.jpg
729/72971773@N00/58588039_0.jpg
911/91148289@N00/7916666268_1.jpg
416/41608212@N00/8718283094_0.jpg
911/91113759@N00/2539574881_0.jpg
293/29322132@N08/3569343093_3.jpg
876/87671668@N00/9013803280_0.jpg
381/38176611@N04/8638753913_4.jpg
976/97644214@N00/6173832483_1.jpg
232/23206546@N04/8621794327_6.jpg
563/56379629@N00/231943094_3.jpg
864/86429182@N00/330808508_1.jpg
353/35336901@N00/4353383267_1.jpg
631/63122283@N06/7978644677_2.jpg
932/93211492@N06/8487757725_206.jpg
575/57545119@N04/8673142329_3.jpg
354/35479068@N06/3306075644_0.jpg
277/27721729@N07/3509070727_0.jpg
188/18899983@N00/4100299699_2.jpg
213/21349468@N00/82691007_1.jpg
110/11021333@N02/2957267195_2.jpg
925/9259500@N03/5710775169_0.jpg
486/48600102544@N01/206574155_11.jpg
486/48600102544@N01/206574155_12.jpg
486/48600102544@N01/206574155_7.jpg
339/33959433@N05/8396364213_0.jpg
997/9975353@N03/12630170935_1.jpg
247/24733288@N07/5846541456_0.jpg
872/8729914@N05/5099947628_0.jpg
889/88976184@N05/8244475370_1.jpg
889/88976184@N05/8244475370_3.jpg
630/63095109@N00/1079079769_0.jpg
664/66422694@N00/182828985_0.jpg
645/64503524@N00/2480285692_0.jpg
864/86429182@N00/330808508_0.jpg
447/44754496@N00/4287694240_1.jpg
363/36382552@N04/5425274524_6.jpg
210/21091679@N08/5811404199_2.jpg
562/56213435@N08/9008148399_0.jpg
695/69501650@N00/46407370_0.jpg
889/88976184@N05/8244475370_0.jpg
889/88976184@N05/8244475370_2.jpg
889/88976184@N05/8244475370_4.jpg
889/88976184@N05/8244475370_5.jpg
527/52706816@N04/4862401074_1.jpg
794/79428123@N06/7349516920_1.jpg
790/79024059@N04/7351250586_0.jpg
693/69318970@N00/9266107252_1.jpg
943/94324445@N02/8585410655_1.jpg
599/59947594@N00/5684370261_0.jpg
849/84986567@N00/177640275_0.jpg
345/34514184@N03/3562741086_0.jpg
158/15803691@N00/6914149962_2.jpg
817/81708918@N03/7855914580_5.jpg
309/30975003@N06/3322588992_8.jpg
900/90054085@N00/43987316_0.jpg
136/13675730@N06/2452368334_0.jpg
386/38675455@N00/6803844225_0.jpg
717/71763791@N00/5532357066_0.jpg
606/60604521@N07/5584865343_0.jpg
395/39545243@N00/1121668561_29.jpg
391/39196943@N05/3992501716_2.jpg
207/20719052@N04/8646466859_0.jpg
207/20719052@N04/8646466859_1.jpg
758/75815807@N00/3141877049_0.jpg
471/47170787@N05/6477792561_2.jpg
317/31734244@N00/542792072_0.jpg
931/9319402@N03/3358320101_0.jpg
362/36223735@N03/3784170734_3.jpg
534/53400644@N05/5044502598_0.jpg
513/51313580@N08/6077728920_1.jpg
137/13774680@N04/12313323523_0.jpg
636/63608960@N08/13553141815_2.jpg
434/43463445@N07/5723825501_0.jpg
237/23740675@N05/6877915376_0.jpg
868/8683186@N05/3611020792_4.jpg
216/21653251@N04/5633592631_0.jpg
216/21653251@N04/5633592631_1.jpg
170/17040371@N08/8095753999_1.jpg
170/17040371@N08/8095788948_1.jpg
620/62092813@N00/12460977104_4.jpg
236/23686718@N08/10662589695_3.jpg
264/26451473@N00/1342290947_5.jpg
636/63608960@N08/13553141815_6.jpg
409/40926212@N05/13257463775_7.jpg
449/44915880@N03/4248497494_1.jpg
235/23588194@N00/4494098639_1.jpg
532/53201041@N07/4911217327_0.jpg
532/53201041@N07/4911259327_0.jpg
606/60625084@N04/6450812495_0.jpg
650/65013293@N02/7724906252_3.jpg
560/56021903@N02/8227297222_2.jpg
359/35904083@N08/4345934789_0.jpg
593/59319260@N00/8743143610_2.jpg
271/27125798@N05/2710711437_0.jpg
402/40210933@N02/6043303646_0.jpg
122/12280910@N06/6299940378_1.jpg
207/20775043@N07/3627508299_0.jpg
595/59592751@N08/9096179270_0.jpg
395/39545243@N00/1121668561_14.jpg
296/29625288@N00/12891226005_0.jpg
548/54858071@N00/205845735_1.jpg
751/75148156@N00/3485469298_1.jpg
407/40764492@N08/3797968770_0.jpg
333/33369864@N07/3244523696_0.jpg
312/31236383@N03/3259555928_1.jpg
385/38524878@N04/3563411595_0.jpg
259/25955358@N06/3921002900_2.jpg
788/78832981@N04/7447167480_1.jpg
696/69696568@N05/6872955321_1.jpg
757/75741170@N02/6829396274_0.jpg
724/72448202@N00/359801202_1.jpg
969/96934953@N00/4315376370_0.jpg
133/13361855@N00/989708629_1.jpg
664/66478195@N00/11649050243_3.jpg
122/12276055@N02/4214939371_0.jpg
463/46327697@N00/2124534031_3.jpg
534/53400644@N05/5044502598_1.jpg
669/66944684@N03/6306275408_0.jpg
710/71006820@N00/4037980088_0.jpg
766/76656964@N04/9363467181_3.jpg
112/11262617@N07/12873348265_0.jpg
409/40926212@N05/13257463775_4.jpg
409/40926212@N05/13835647984_0.jpg
528/52858230@N08/5636750038_0.jpg
528/52858230@N08/5636750038_1.jpg
203/20335591@N04/9752849313_1.jpg
350/35034345966@N01/3086429616_1.jpg
736/73694732@N00/4430689233_0.jpg
605/60517117@N00/10370054943_0.jpg
421/42173774@N03/3889203507_0.jpg
511/51135741@N00/1197314078_3.jpg
267/26753167@N04/5922076258_2.jpg
330/33062815@N00/8606375434_1.jpg
108/10807869@N03/9369308884_0.jpg
761/76151808@N00/6945480767_0.jpg
757/75741170@N02/6829396274_1.jpg
220/22057861@N07/2126995093_0.jpg
665/66572814@N00/8242014606_0.jpg
849/84986567@N00/177640275_1.jpg
444/44460493@N03/4085897885_0.jpg
330/33085931@N08/9400799871_1.jpg
533/53314395@N00/5174087013_11.jpg
864/86429182@N00/330808508_2.jpg
151/15133426@N08/3646529532_0.jpg
302/30223854@N00/6535512351_0.jpg
929/92903356@N04/8497572867_0.jpg
412/41232325@N03/9045866185_0.jpg
582/58246614@N00/2842715287_1.jpg
513/51304493@N05/4932744035_0.jpg
301/30120696@N02/3068639840_0.jpg
407/40764492@N08/3797968770_0.jpg
231/23100621@N04/3986465605_0.jpg
288/28891066@N00/4210148052_2.jpg
940/94066910@N00/448278027_1.jpg
532/53282124@N00/3858373020_0.jpg
597/59751999@N00/3289666452_2.jpg
365/36521958172@N01/100498068_4.jpg
293/29322132@N08/3569343093_3.jpg

View File

@@ -0,0 +1,175 @@
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import os.path
import datetime
from easydict import EasyDict as edict
import time
import json
import shutil
import sys
import numpy as np
import importlib
import itertools
import argparse
import struct
import cv2
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import face_preprocess
from sklearn.preprocessing import normalize
import mxnet as mx
from mxnet import ndarray as nd
feature_dim = 512
feature_ext = 1
def load_bin(path, fill = 0.0):
with open(path, 'rb') as f:
bb = f.read(4*4)
#print(len(bb))
v = struct.unpack('4i', bb)
#print(v[0])
bb = f.read(v[0]*4)
v = struct.unpack("%df"%(v[0]), bb)
feature = np.full( (feature_dim+feature_ext,), fill, dtype=np.float32)
feature[0:feature_dim] = v
#feature = np.array( v, dtype=np.float32)
#print(feature.shape)
#print(np.linalg.norm(feature))
return feature
def write_bin(path, feature):
feature = list(feature)
with open(path, 'wb') as f:
f.write(struct.pack('4i', len(feature),1,4,5))
f.write(struct.pack("%df"%len(feature), *feature))
def main(args):
out_algo = args.suffix
if len(args.algo)>0:
out_algo = args.algo
fs_noise_map = {}
for line in open(args.facescrub_noises, 'r'):
if line.startswith('#'):
continue
line = line.strip()
fname = line.split('.')[0]
p = fname.rfind('_')
fname = fname[0:p]
fs_noise_map[line] = fname
print(len(fs_noise_map))
i=0
fname2center = {}
noises = []
for line in open(args.facescrub_lst, 'r'):
if i%1000==0:
print("reading fs",i)
i+=1
image_path, label, bbox, landmark, aligned = face_preprocess.parse_lst_line(line)
assert aligned==True
_path = image_path.split('/')
a, b = _path[-2], _path[-1]
feature_path = os.path.join(args.facescrub_feature_dir, a, "%s_%s.bin"%(b, args.suffix))
feature_dir_out = os.path.join(args.facescrub_feature_dir_out, a)
if not os.path.exists(feature_dir_out):
os.makedirs(feature_dir_out)
feature_path_out = os.path.join(args.facescrub_feature_dir_out, a, "%s_%s.bin"%(b, out_algo))
#print(b)
if not b in fs_noise_map:
#shutil.copyfile(feature_path, feature_path_out)
feature = load_bin(feature_path)
write_bin(feature_path_out, feature)
if not a in fname2center:
fname2center[a] = np.zeros((feature_dim+feature_ext,), dtype=np.float32)
fname2center[a] += feature
else:
#print('n', b)
noises.append( (a,b) )
print(len(noises))
for k in noises:
a,b = k
assert a in fname2center
center = fname2center[a]
g = np.zeros( (feature_dim+feature_ext,), dtype=np.float32)
g2 = np.random.uniform(-0.001, 0.001, (feature_dim,))
g[0:feature_dim] = g2
f = center+g
_norm=np.linalg.norm(f)
f /= _norm
feature_path_out = os.path.join(args.facescrub_feature_dir_out, a, "%s_%s.bin"%(b, out_algo))
write_bin(feature_path_out, f)
mf_noise_map = {}
for line in open(args.megaface_noises, 'r'):
if line.startswith('#'):
continue
line = line.strip()
_vec = line.split("\t")
if len(_vec)>1:
line = _vec[1]
mf_noise_map[line] = 1
print(len(mf_noise_map))
i=0
nrof_noises = 0
for line in open(args.megaface_lst, 'r'):
if i%1000==0:
print("reading mf",i)
i+=1
image_path, label, bbox, landmark, aligned = face_preprocess.parse_lst_line(line)
assert aligned==True
_path = image_path.split('/')
a1, a2, b = _path[-3], _path[-2], _path[-1]
feature_path = os.path.join(args.megaface_feature_dir, a1, a2, "%s_%s.bin"%(b, args.suffix))
feature_dir_out = os.path.join(args.megaface_feature_dir_out, a1, a2)
if not os.path.exists(feature_dir_out):
os.makedirs(feature_dir_out)
feature_path_out = os.path.join(args.megaface_feature_dir_out, a1, a2, "%s_%s.bin"%(b, out_algo))
bb = '/'.join([a1, a2, b])
#print(b)
if not bb in mf_noise_map:
feature = load_bin(feature_path)
write_bin(feature_path_out, feature)
#shutil.copyfile(feature_path, feature_path_out)
else:
feature = load_bin(feature_path, 100.0)
write_bin(feature_path_out, feature)
#g = np.random.uniform(-0.001, 0.001, (feature_dim,))
#print('n', bb)
#write_bin(feature_path_out, g)
nrof_noises+=1
print(nrof_noises)
def parse_arguments(argv):
parser = argparse.ArgumentParser()
parser.add_argument('--facescrub-noises', type=str, help='', default='./facescrub_noises.txt')
parser.add_argument('--megaface-noises', type=str, help='', default='./megaface_noises.txt')
parser.add_argument('--suffix', type=str, help='', default='r100_cm_112x112')
parser.add_argument('--algo', type=str, help='', default='')
parser.add_argument('--megaface-lst', type=str, help='', default='/raid5data/dplearn/megaface/megaface_mtcnn_112x112/lst')
parser.add_argument('--facescrub-lst', type=str, help='', default='/raid5data/dplearn/megaface/facescrubr/small_lst')
parser.add_argument('--megaface-feature-dir', type=str, help='', default='/raid5data/dplearn/megaface/MegaFace_Features')
parser.add_argument('--facescrub-feature-dir', type=str, help='', default='/raid5data/dplearn/megaface/FaceScrub_Features')
#parser.add_argument('--megaface-feature-dir-out', type=str, help='', default='/raid5data/dplearn/megaface/MegaFace_Features_cm')
#parser.add_argument('--facescrub-feature-dir-out', type=str, help='', default='/raid5data/dplearn/megaface/FaceScrub_Features_cm')
parser.add_argument('--megaface-feature-dir-out', type=str, help='', default='/opt/jiaguo/MegaFace_Features_cm')
parser.add_argument('--facescrub-feature-dir-out', type=str, help='', default='/opt/jiaguo/FaceScrub_Features_cm')
return parser.parse_args(argv)
if __name__ == '__main__':
main(parse_arguments(sys.argv[1:]))

View File

@@ -17,6 +17,7 @@ import argparse
import mxnet.optimizer as optimizer
sys.path.append(os.path.join(os.path.dirname(__file__), 'common'))
import face_image
from noise_sgd import NoiseSGD
sys.path.append(os.path.join(os.path.dirname(__file__), 'eval'))
sys.path.append(os.path.join(os.path.dirname(__file__), 'symbols'))
import fresnet
@@ -53,7 +54,7 @@ class AccMetric(mx.metric.EvalMetric):
def update(self, labels, preds):
self.count+=1
if args.loss_type>=2 and args.loss_type<=4 and args.margin_verbose>0:
if args.loss_type>=2 and args.loss_type<=5 and args.margin_verbose>0:
if self.count%args.ctx_num==0:
mbatch = self.count//args.ctx_num
if mbatch==1 or mbatch%args.margin_verbose==0:
@@ -123,10 +124,9 @@ def parse_args():
parser.add_argument('--version-unit', type=int, default=3, help='')
parser.add_argument('--end-epoch', type=int, default=100000,
help='training epoch size.')
parser.add_argument('--lr', type=float, default=0.1,
help='')
parser.add_argument('--wd', type=float, default=0.0005,
help='')
parser.add_argument('--noise-sgd', type=float, default=0.0, help='')
parser.add_argument('--lr', type=float, default=0.1, help='')
parser.add_argument('--wd', type=float, default=0.0005, help='')
parser.add_argument('--mom', type=float, default=0.9,
help='')
parser.add_argument('--emb-size', type=int, default=512,
@@ -176,6 +176,7 @@ def parse_args():
help='')
parser.add_argument('--rand-mirror', type=int, default=1,
help='')
parser.add_argument('--cutoff', type=int, default=0, help='')
parser.add_argument('--patch', type=str, default='0_0_96_112_0',
help='')
parser.add_argument('--lr-steps', type=str, default='', help='')
@@ -300,6 +301,20 @@ def get_symbol(args, arg_params, aux_params):
cos_t = zy/s
if args.margin_verbose>0:
margin_symbols.append(mx.symbol.mean(cos_t))
if m>1.0:
t = mx.sym.arccos(cos_t)
t = t*m
body = mx.sym.cos(t)
new_zy = body*s
if args.margin_verbose>0:
new_cos_t = new_zy/s
margin_symbols.append(mx.symbol.mean(new_cos_t))
diff = new_zy - zy
diff = mx.sym.expand_dims(diff, 1)
gt_one_hot = mx.sym.one_hot(gt_label, depth = args.num_classes, on_value = 1.0, off_value = 0.0)
body = mx.sym.broadcast_mul(gt_one_hot, diff)
fc7 = fc7+body
#threshold = math.cos(args.margin_m)
#cond_v = cos_t - threshold
#cond = mx.symbol.Activation(data=cond_v, act_type='relu')
@@ -376,6 +391,21 @@ def get_symbol(args, arg_params, aux_params):
gt_one_hot = mx.sym.one_hot(gt_label, depth = args.num_classes, on_value = 1.0, off_value = 0.0)
body = mx.sym.broadcast_mul(gt_one_hot, diff)
fc7 = fc7+body
elif args.loss_type==5:
s = args.margin_s
m = args.margin_m
assert s>0.0
assert m>=0.0
assert m<(math.pi/2)
_weight = mx.symbol.Variable("fc7_weight", shape=(args.num_classes, args.emb_size), lr_mult=1.0)
_weight = mx.symbol.L2Normalization(_weight, mode='instance')
nembedding = mx.symbol.L2Normalization(embedding, mode='instance', name='fc1n')
cos_a = mx.sym.FullyConnected(data=nembedding, weight = _weight, no_bias = True, num_hidden=args.num_classes, name='fc7')
theta_a = mx.sym.arccos(cos_a)
gt_one_hot = mx.sym.one_hot(gt_label, depth = args.num_classes, on_value = m, off_value = 0.0)
theta_a = theta_a+gt_one_hot
fc7 = math.pi/2 - theta_a
fc7 = fc7*s
elif args.loss_type==10: #marginal loss
nembedding = mx.symbol.L2Normalization(embedding, mode='instance', name='fc1n')
params = [1.2, 0.3, 1.0]
@@ -700,6 +730,7 @@ def train_net(args):
shuffle = True,
rand_mirror = args.rand_mirror,
mean = mean,
cutoff = args.cutoff,
c2c_threshold = args.c2c_threshold,
output_c2c = args.output_c2c,
c2c_mode = args.c2c_mode,
@@ -723,6 +754,7 @@ def train_net(args):
shuffle = True,
rand_mirror = args.rand_mirror,
mean = mean,
cutoff = args.cutoff,
c2c_threshold = args.c2c_threshold,
output_c2c = args.output_c2c,
c2c_mode = args.c2c_mode,
@@ -752,7 +784,11 @@ def train_net(args):
else:
initializer = mx.init.Xavier(rnd_type='uniform', factor_type="in", magnitude=2)
_rescale = 1.0/args.ctx_num
opt = optimizer.SGD(learning_rate=base_lr, momentum=base_mom, wd=base_wd, rescale_grad=_rescale)
if args.noise_sgd>0.0:
print('use noise sgd')
opt = NoiseSGD(scale = args.noise_sgd, learning_rate=base_lr, momentum=base_mom, wd=base_wd, rescale_grad=_rescale)
else:
opt = optimizer.SGD(learning_rate=base_lr, momentum=base_mom, wd=base_wd, rescale_grad=_rescale)
som = 20
if args.loss_type==12 or args.loss_type==13:
som = 2

View File

@@ -1,377 +0,0 @@
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import sys
import random
import logging
import numpy as np
from data import FaceIter
import mxnet as mx
from mxnet import ndarray as nd
import argparse
import mxnet.optimizer as optimizer
import mxcommon.resnet_dcn as resnet_dcn
import lfw
import sklearn
from sklearn.decomposition import PCA
from center_loss import *
logger = logging.getLogger()
logger.setLevel(logging.INFO)
class AccMetric(mx.metric.EvalMetric):
def __init__(self):
self.axis = 1
super(AccMetric, self).__init__(
'acc', axis=self.axis,
output_names=None, label_names=None)
self.losses = []
def update(self, labels, preds):
#print(len(labels), len(preds))
#print(preds[1].asnumpy())
loss = preds[2].asnumpy()[0]
if len(self.losses)==100:
print('triplet loss', sum(self.losses)/len(self.losses))
self.losses = []
self.losses.append(loss)
preds = [preds[1]] #use softmax output
for label, pred_label in zip(labels, preds):
#print(label.shape, pred_label.shape)
if pred_label.shape != label.shape:
pred_label = mx.ndarray.argmax(pred_label, axis=self.axis)
pred_label = pred_label.asnumpy().astype('int32').flatten()
label = label.asnumpy().astype('int32').flatten()
#print(label)
#print(label, pred_label)
assert label.shape==pred_label.shape
self.sum_metric += (pred_label.flat == label.flat).sum()
self.num_inst += len(pred_label.flat)
def parse_args():
parser = argparse.ArgumentParser(description='Train face network')
# general
parser.add_argument('--prefix', default='../model/face',
help='directory to save model.')
parser.add_argument('--load-epoch', type=int, default=0,
help='load epoch.')
parser.add_argument('--end-epoch', type=int, default=20,
help='training epoch size.')
parser.add_argument('--retrain', action='store_true', default=False,
help='true means continue training.')
args = parser.parse_args()
return args
def get_symbol(args, arg_params, aux_params):
new_args = dict({k:arg_params[k] for k in arg_params if 'fc' not in k})
data_shape = (3,args.image_size,args.image_size)
image_shape = ",".join([str(x) for x in data_shape])
layers = 152
_,_,embeddings,_ = resnet_dcn.get_cls_symbol(128, layers, image_shape, use_deformable=False)
all_layers = embeddings.get_internals()
#print(all_layers)
layer_names = ['_plus10','_plus46', '_plus49']
#layer_names = ['plus2', '_plus10','_plus46', '_plus49']
layers = []
for name in layer_names:
layers.append( all_layers[name+"_output"] )
out_sym = mx.symbol.Group(layers)
out_name = out_sym.list_outputs()
#arg_name = embeddings.list_arguments()
#aux_name = embeddings.list_auxiliary_states()
data_shape_dict = {'data' : (args.batch_size,)+data_shape}
arg_shape, out_shape, aux_shape = out_sym.infer_shape(**data_shape_dict)
#print(out_shape)
out_shape_dict = dict(zip(out_name, out_shape))
for k,v in out_shape_dict.iteritems():
print(k,v)
layers = []
for i in xrange(len(layer_names)):
name = layer_names[i]+"_output"
_layer = all_layers[name]
_kernel = out_shape_dict[name][2]//5
if _kernel>1:
layer = mx.sym.Pooling(data=_layer, kernel=(_kernel, _kernel), stride=(_kernel,_kernel), pad=(0,0), pool_type='max')
else:
layer = _layer
layer = mx.symbol.Convolution(data=layer, kernel=(3, 3), pad=(1,1), num_filter=128)
layers.append(layer)
body = mx.symbol.concat(*layers, dim=1)
body = mx.symbol.Convolution(data=body, kernel=(1, 1), pad=(0,0), num_filter=128)
body = mx.sym.Pooling(data=body, global_pool=True, kernel=(5, 5), pool_type='avg', name='last_pool')
embeddings = mx.sym.Flatten(data=body)
_, out_shape, _= embeddings.infer_shape(**data_shape_dict)
print(out_shape)
#print(arg_shape)
#sys.exit(0)
l2_embeddings = mx.symbol.L2Normalization(embeddings)
batch_size = args.batch_size//args.ctx_num
anchor = mx.symbol.slice_axis(l2_embeddings, axis=0, begin=0, end=batch_size//3)
positive = mx.symbol.slice_axis(l2_embeddings, axis=0, begin=batch_size//3, end=2*batch_size//3)
negative = mx.symbol.slice_axis(l2_embeddings, axis=0, begin=2*batch_size//3, end=batch_size)
ap = anchor - positive
an = anchor - negative
ap = ap*ap
an = an*an
ap = mx.symbol.sum(ap, axis=1, keepdims=1) #(T,1)
an = mx.symbol.sum(an, axis=1, keepdims=1) #(T,1)
loss_scale = [1.0, 0.0, 0.0]
#triplet_loss = mx.symbol.broadcast_maximum(0.0, ap-an+args.margin) #(T,1)
triplet_loss = mx.symbol.Activation(data = (ap-an+args.margin), act_type='relu')
triplet_loss = mx.symbol.sum(triplet_loss)/(batch_size//3)
triplet_loss = mx.symbol.MakeLoss(data = triplet_loss, grad_scale = loss_scale[0])
data = mx.symbol.Variable('data')
gt_label = mx.symbol.Variable('softmax_label')
fc = mx.symbol.FullyConnected(data = embeddings, num_hidden = args.num_classes, name="fc2")
softmax = mx.symbol.SoftmaxOutput(data=fc, label = gt_label, name='softmax', grad_scale = loss_scale[1])
if loss_scale[2]>0.0:
_center_loss = mx.symbol.Custom(data = l2_embeddings, label = gt_label, name='center_loss', op_type='centerloss'
, num_class= args.num_classes, alpha = 0.5, scale=loss_scale[2], batchsize=batch_size)
out = mx.symbol.Group([mx.symbol.BlockGrad(l2_embeddings), softmax, triplet_loss, _center_loss])
else:
out = mx.symbol.Group([mx.symbol.BlockGrad(l2_embeddings), softmax, triplet_loss])
#out = triplet_loss
#out = softmax
return (out, new_args, aux_params)
def train_net(args):
ctx = []
cvd = os.environ['CUDA_VISIBLE_DEVICES'].strip()
if len(cvd)>0:
for i in xrange(len(cvd.split(','))):
ctx.append(mx.gpu(i))
if len(ctx)==0:
ctx = [mx.cpu()]
print('use cpu')
else:
print('gpu num:', len(ctx))
prefix = args.prefix
end_epoch = args.end_epoch
pretrained = '../model/resnet-152'
load_epoch = args.load_epoch
args.image_size = 160
per_batch_size = 60
args.ctx_num = len(ctx)
args.batch_size = per_batch_size*args.ctx_num
#args.all_batch_size = args.batch_size*args.ctx_num
args.bag_size = 3600
args.margin = 0.2
args.num_classes = 10575 #webface
data_shape = (3,args.image_size,args.image_size)
begin_epoch = 0
base_lr = 0.05
base_wd = 0.0002
base_mom = 0.0
lr_decay = 0.98
if not args.retrain:
#load and initialize params
print(pretrained)
_, arg_params, aux_params = mx.model.load_checkpoint(pretrained, load_epoch)
sym, arg_params, aux_params = get_symbol(args, arg_params, aux_params)
#arg_params, aux_params = load_param(pretrained, epoch, convert=True)
data_shape_dict = {'data': (args.batch_size, 3, args.image_size, args.image_size), 'softmax_label': (args.batch_size,)}
resnet_dcn.init_weights(sym, data_shape_dict, arg_params, aux_params)
else:
pretrained = args.prefix
sym, arg_params, aux_params = mx.model.load_checkpoint(pretrained, load_epoch)
begin_epoch = load_epoch
end_epoch = begin_epoch+10
base_wd = 0.00005
lr_decay = 0.5
base_lr = 0.015
# infer max shape
model = mx.mod.Module(
context = ctx,
symbol = sym,
#label_names = [],
#fixed_param_prefix = fixed_param_prefix,
)
train_dataiter = FaceIter(
path_imglist = "/raid5data/dplearn/faceinsight_align_webface.lst",
data_shape = data_shape,
mod = model,
ctx_num = args.ctx_num,
batch_size = args.batch_size,
bag_size = args.bag_size,
images_per_person = 5,
)
#_dice = DiceMetric()
_acc = AccMetric()
eval_metrics = [mx.metric.create(_acc)]
# rpn_eval_metric, rpn_cls_metric, rpn_bbox_metric, eval_metric, cls_metric, bbox_metric
#for child_metric in [fcn_loss_metric]:
# eval_metrics.add(child_metric)
# callback
#batch_end_callback = callback.Speedometer(input_batch_size, frequent=args.frequent)
#epoch_end_callback = mx.callback.module_checkpoint(mod, prefix, period=1, save_optimizer_states=True)
# decide learning rate
#lr_step = '10,20,30'
#train_size = 4848
#nrof_batch_in_epoch = int(train_size/input_batch_size)
#print('nrof_batch_in_epoch:', nrof_batch_in_epoch)
#lr_factor = 0.1
#lr_epoch = [float(epoch) for epoch in lr_step.split(',')]
#lr_epoch_diff = [epoch - begin_epoch for epoch in lr_epoch if epoch > begin_epoch]
#lr = base_lr * (lr_factor ** (len(lr_epoch) - len(lr_epoch_diff)))
#lr_iters = [int(epoch * train_size / batch_size) for epoch in lr_epoch_diff]
#print 'lr', lr, 'lr_epoch_diff', lr_epoch_diff, 'lr_iters', lr_iters
#lr_scheduler = MultiFactorScheduler(lr_iters, lr_factor)
# optimizer
#optimizer_params = {'momentum': 0.9,
# 'wd': 0.0005,
# 'learning_rate': base_lr,
# 'rescale_grad': 1.0,
# 'clip_gradient': None}
initializer = mx.init.Xavier(rnd_type='gaussian', factor_type="in", magnitude=2)
#opt = optimizer.SGD(learning_rate=base_lr, momentum=0.9, wd=base_wd, rescale_grad=(1.0/args.batch_size))
opt = optimizer.SGD(learning_rate=base_lr, momentum=base_mom, wd=base_wd, rescale_grad=1.0)
#opt = optimizer.AdaGrad(learning_rate=base_lr, wd=base_wd, rescale_grad=1.0)
_cb = mx.callback.Speedometer(args.batch_size, 10)
lfw_dir = '/raid5data/dplearn/lfw_mtcnn'
lfw_pairs = lfw.read_pairs(os.path.join(lfw_dir, 'pairs.txt'))
lfw_paths, issame_list = lfw.get_paths(lfw_dir, lfw_pairs, 'png')
imgs = []
lfw_data_list = []
for flip in [0,1]:
lfw_data = nd.empty((len(lfw_paths), 3, args.image_size, args.image_size))
i = 0
for path in lfw_paths:
with open(path, 'rb') as fin:
_bin = fin.read()
img = mx.image.imdecode(_bin)
img = nd.transpose(img, axes=(2, 0, 1))
if flip==1:
img = img.asnumpy()
for c in xrange(img.shape[0]):
img[c,:,:] = np.fliplr(img[c,:,:])
img = nd.array( img )
#print(img.shape)
lfw_data[i][:] = img
i+=1
if i%1000==0:
print('loading lfw', i)
print(lfw_data.shape)
lfw_data_list.append(lfw_data)
def lfw_test(nbatch):
print('testing lfw..')
embeddings_list = []
for i in xrange( len(lfw_data_list) ):
lfw_data = lfw_data_list[i]
embeddings = None
ba = 0
while ba<lfw_data.shape[0]:
bb = min(ba+args.batch_size, lfw_data.shape[0])
_data = nd.slice_axis(lfw_data, axis=0, begin=ba, end=bb)
_label = nd.ones( (bb-ba,) )
db = mx.io.DataBatch(data=(_data,), label=(_label,))
model.forward(db, is_train=False)
net_out = model.get_outputs()
_embeddings = net_out[0].asnumpy()
if embeddings is None:
embeddings = np.zeros( (lfw_data.shape[0], _embeddings.shape[1]) )
embeddings[ba:bb,:] = _embeddings
ba = bb
embeddings_list.append(embeddings)
acc_list = []
embeddings = embeddings_list[0]
_, _, accuracy, val, val_std, far = lfw.evaluate(embeddings, issame_list, nrof_folds=10)
acc_list.append(np.mean(accuracy))
print('[%d]Accuracy: %1.3f+-%1.3f' % (nbatch, np.mean(accuracy), np.std(accuracy)))
print('Validation rate: %2.5f+-%2.5f @ FAR=%2.5f' % (val, val_std, far))
embeddings = np.concatenate(embeddings_list, axis=1)
embeddings = sklearn.preprocessing.normalize(embeddings)
print(embeddings.shape)
_, _, accuracy, val, val_std, far = lfw.evaluate(embeddings, issame_list, nrof_folds=10)
acc_list.append(np.mean(accuracy))
print('[%d]Accuracy-Flip: %1.3f+-%1.3f' % (nbatch, np.mean(accuracy), np.std(accuracy)))
print('Validation rate: %2.5f+-%2.5f @ FAR=%2.5f' % (val, val_std, far))
pca = PCA(n_components=128)
embeddings = pca.fit_transform(embeddings)
embeddings = sklearn.preprocessing.normalize(embeddings)
print(embeddings.shape)
_, _, accuracy, val, val_std, far = lfw.evaluate(embeddings, issame_list, nrof_folds=10)
acc_list.append(np.mean(accuracy))
print('[%d]Accuracy-PCA: %1.3f+-%1.3f' % (nbatch, np.mean(accuracy), np.std(accuracy)))
print('Validation rate: %2.5f+-%2.5f @ FAR=%2.5f' % (val, val_std, far))
return max(*acc_list)
#global_step = 0
highest_acc = [0.0]
last_save_acc = [0.0]
def _batch_callback(param):
#global global_step
mbatch = param.nbatch+1
if mbatch % 4000 == 0:
opt.lr *= lr_decay
#print(param.nbatch, opt.lr)
_cb(param)
if param.nbatch%100==0:
print('lr-batch-epoch:',opt.lr,param.nbatch,param.epoch)
if param.nbatch>=0 and param.nbatch%400==0:
acc = lfw_test(param.nbatch)
if acc>highest_acc[0]:
highest_acc[0] = acc
if acc>0.9 and acc-last_save_acc[0]>=0.01:
print('saving', mbatch, acc, last_save_acc[0])
_arg, _aux = model.get_params()
mx.model.save_checkpoint(args.prefix, mbatch, model.symbol, _arg, _aux)
last_save_acc[0] = acc
print('[%d]highest Accu: %1.3f'%(param.nbatch, highest_acc[0]))
sys.stdout.flush()
sys.stderr.flush()
epoch_cb = mx.callback.do_checkpoint(prefix, 1)
#epoch_cb = None
def _epoch_callback(epoch, sym, arg_params, aux_params):
print('epoch-end', epoch)
model.fit(train_dataiter,
begin_epoch = begin_epoch,
num_epoch = end_epoch,
#eval_data = val_dataiter,
eval_metric = eval_metrics,
kvstore = 'device',
optimizer = opt,
#optimizer_params = optimizer_params,
initializer = initializer,
arg_params = arg_params,
aux_params = aux_params,
allow_missing = True,
batch_end_callback = _batch_callback,
epoch_end_callback = epoch_cb )
def main():
#time.sleep(3600*6.5)
args = parse_args()
print('Called with argument:', args)
train_net(args)
if __name__ == '__main__':
main()

View File

@@ -1,92 +0,0 @@
from __future__ import division
import numpy as np
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'eval'))
import lfw
import sklearn
from sklearn.decomposition import PCA
lfw_dir = '/raid5data/dplearn/lfw_mtcnn2'
lfw_pairs = lfw.read_pairs(os.path.join(lfw_dir, 'pairs.txt'))
lfw_paths, issame_list = lfw.get_paths(lfw_dir, lfw_pairs, 'jpg')
model_dir = '../model'
models = ['sphereface_p0_20-lfw-0006.npy']
models = ['sphereface-64-p0_0_96_95_0-lfw-0001.npy']
models = ['sphereface_p0_20-lfw-0006.npy', 'sphereface-64-p0_0_96_95_0-lfw-0001.npy']
models = ['sphereface-20-p0_0_96_112_0-lfw-0022.npy','sphereface-20-p0_0_96_95_0-lfw-0021.npy', 'sphereface-20-p0_40_96_112_0-lfw-0022.npy']
models = ['sphereface-20-p0_0_96_112_0-lfw-0022.npy','sphereface-20-p0_0_96_95_0-lfw-0021.npy', 'sphereface-36-p0_0_96_112_0-lfw-0022.npy']
models = ['sphereface-20-p0_0_96_112_0-lfw-0022.npy','sphereface-20-p0_0_96_95_0-lfw-0021.npy']
models = ['sphereface-20-p0_0_96_112_0-lfw-0022.npy','sphereface-20-p0_0_96_95_0-lfw-0021.npy', 'sphereface-36-p0_0_96_112_0-lfw-0022.npy']
models = ['sphereface-20-p0_0_96_112_0-lfw-0022.npy','sphereface-20-p0_0_96_95_0-lfw-0021.npy', 'sphereface-36-p0_0_96_95_0-lfw-0021.npy']
models = [
#'sphereface-20-p0_0_96_112_0-lfw-0022.npy',
#'sphereface-20-p0_0_96_95_0-lfw-0021.npy',
#'sphereface-20-p0_0_80_95_0-lfw-0021.npy',
#'sphereface-36-p0_0_96_95_0-lfw-0021.npy',
'sphereface-s60-p0_0_96_112_0-lfw-0031.npy',
'sphereface-s60-p0_0_96_95_0-lfw-0021.npy',
'sphereface2-s60-p0_0_96_112_0-lfw-0021.npy',
'sphereface3-s60-p0_0_96_95_0-lfw-0023.npy',
#'sphereface-s60-p0_0_80_95_0-lfw-0025.npy',
#'sphereface-s60-p16_0_96_112_0-lfw-0023.npy',
#'spherefacec-s60-p0_0_96_112_0-lfw-0021.npy',
]
models = [
'../model31/sphere-m51-p0_0_96_112_0-lfw-0083.npy',
'../model/softmax-m53-p0_0_96_112_0-lfw-0026.npy',
#'../model32/sphere-m30-p0_0_96_112_0-lfw-0092.npy',
]
#models = models[0:3]
concat = True
pca = False
weights = None
#weights = [0.5, 1.0, 0.5]
F = None
ii = 0
for m in models:
model = m
#model = os.path.join(model_dir, m)
X = np.load(model)
X1 = X[0:(X.shape[0]//2),:]
X2 = X[(X.shape[0]//2):,:]
print(X.shape, X1.shape, X2.shape)
#X1 = sklearn.preprocessing.normalize(X1)
#X2 = sklearn.preprocessing.normalize(X2)
XX = X1+X2
XX = sklearn.preprocessing.normalize(XX)
if weights is not None:
weight = weights[ii]
XX *= weight
if F is None:
F = XX
else:
if concat:
F = np.concatenate((F,XX), axis=1)
else:
F += XX
ii+=1
#if concat:
# F = np.concatenate((F,X2), axis=1)
#else:
# F += X2
print(F.shape)
npca = 0
if concat and pca:
#F = sklearn.preprocessing.normalize(F)
npca = 180
#pca = PCA(n_components=512)
#F = pca.fit_transform(F)
for npca in xrange(512,513,1):
_, _, accuracy, val, val_std, far = lfw.evaluate(F, issame_list, nrof_folds=10, pca=npca)
print('[%d]Accuracy: %1.5f+-%1.5f' % (npca, np.mean(accuracy), np.std(accuracy)))
else:
F = sklearn.preprocessing.normalize(F)
_, _, accuracy, val, val_std, far = lfw.evaluate(F, issame_list, nrof_folds=10, pca=npca)
print('[%d]Accuracy: %1.5f+-%1.5f' % (0, np.mean(accuracy), np.std(accuracy)))
print('Validation rate: %2.5f+-%2.5f @ FAR=%2.5f' % (val, val_std, far))