mirror of
https://github.com/deepinsight/insightface.git
synced 2026-05-18 06:38:19 +00:00
Merge branch 'master' of https://github.com/deepinsight/insightface
This commit is contained in:
@@ -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
38
src/common/noise_sgd.py
Normal 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
302
src/eval/ytf.py
Normal 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
75
src/eval/ytf_badcases.py
Normal 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
6
src/megaface/README.md
Normal 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.
|
||||
606
src/megaface/facescrub_noises.txt
Normal file
606
src/megaface/facescrub_noises.txt
Normal 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
|
||||
720
src/megaface/megaface_noises.txt
Normal file
720
src/megaface/megaface_noises.txt
Normal 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
|
||||
175
src/megaface/remove_noises.py
Normal file
175
src/megaface/remove_noises.py
Normal 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:]))
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
@@ -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))
|
||||
Reference in New Issue
Block a user