From 39d69b5bc24a95eacc3b58eb0676852c7eb90c33 Mon Sep 17 00:00:00 2001 From: nttstar Date: Fri, 2 Mar 2018 22:07:47 +0800 Subject: [PATCH 1/3] tiny --- src/train_softmax.py | 77 +++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/src/train_softmax.py b/src/train_softmax.py index 2bc1529..00ca840 100644 --- a/src/train_softmax.py +++ b/src/train_softmax.py @@ -394,6 +394,40 @@ def get_symbol(args, arg_params, aux_params): 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')*s + #fc7 = mx.sym.FullyConnected(data=nembedding, weight = _weight, no_bias = True, num_hidden=args.num_classes, name='fc7') + #zy = mx.sym.pick(fc7, gt_label, axis=1) + #cos_t = zy/s + #if args.margin_verbose>0: + # margin_symbols.append(mx.symbol.mean(cos_t)) + #if m>0.0: + # a1 = args.margin_a + # r1 = ta-a1 + # r1 = mx.symbol.Activation(data=r1, act_type='relu') + # r1 = r1+a1 + # t = mx.sym.arccos(cos_t) + # cond = t-1.0 + # cond = mx.symbol.Activation(data=cond, act_type='relu') + # r = mx.sym.where(cond, r2, r1) + # t = t+var_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)) + # #margin_symbols.append(mx.symbol.mean(var_m)) + # 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 s = args.margin_s m = args.margin_m assert s>0.0 @@ -401,41 +435,24 @@ def get_symbol(args, arg_params, aux_params): 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 nembedding = mx.symbol.L2Normalization(embedding, mode='instance', name='fc1n')*s fc7 = mx.sym.FullyConnected(data=nembedding, weight = _weight, no_bias = True, num_hidden=args.num_classes, name='fc7') zy = mx.sym.pick(fc7, gt_label, axis=1) cos_t = zy/s + t = mx.sym.arccos(cos_t) if args.margin_verbose>0: - margin_symbols.append(mx.symbol.mean(cos_t)) - if m>0.0: - - a1 = args.margin_a - r1 = ta-a1 - r1 = mx.symbol.Activation(data=r1, act_type='relu') - r1 = r1+a1 - t = mx.sym.arccos(cos_t) - cond = t-1.0 - cond = mx.symbol.Activation(data=cond, act_type='relu') - r = mx.sym.where(cond, r2, r1) - t = t+var_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)) - #margin_symbols.append(mx.symbol.mean(var_m)) - 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 + margin_symbols.append(mx.symbol.mean(t)) + t = t*args.margin_a + t = t+args.margin_m + body = mx.sym.cos(t) + new_zy = body*s + if args.margin_verbose>0: + margin_symbols.append(mx.symbol.mean(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 elif args.loss_type==6: s = args.margin_s m = args.margin_m From ad332694ed41dd9bfb74cd761c2fed0c3f9c5005 Mon Sep 17 00:00:00 2001 From: nttstar Date: Mon, 5 Mar 2018 23:48:19 +0800 Subject: [PATCH 2/3] tiny --- src/data.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/data.py b/src/data.py index 1395a2d..1772397 100644 --- a/src/data.py +++ b/src/data.py @@ -766,6 +766,14 @@ class FaceImageIter(io.DataIter): v = numpy.random.normal(mu, sigma) v = math.abs(v)*-1.0+mrange[1] v = max(v, mrange[0]) + elif self.output_c2c==5: + v = np.random.uniform(0.41, 0.51) + if count>=175: + v = np.random.uniform(0.37, 0.47) + elif self.output_c2c==6: + v = np.random.uniform(0.41, 0.51) + if count>=175: + v = np.random.uniform(0.38, 0.48) else: assert False From ba8662d04faebf623599ce2729dee13219d3824c Mon Sep 17 00:00:00 2001 From: nttstar Date: Wed, 7 Mar 2018 17:55:10 +0800 Subject: [PATCH 3/3] tiny --- src/train_softmax.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/train_softmax.py b/src/train_softmax.py index 00ca840..1353519 100644 --- a/src/train_softmax.py +++ b/src/train_softmax.py @@ -133,12 +133,14 @@ def parse_args(): help='') parser.add_argument('--per-batch-size', type=int, default=128, help='') - parser.add_argument('--margin-m', type=float, default=0.35, + parser.add_argument('--margin-m', type=float, default=0.5, help='') parser.add_argument('--margin-s', type=float, default=64.0, help='') parser.add_argument('--margin-a', type=float, default=0.0, help='') + parser.add_argument('--margin-b', type=float, default=0.0, + help='') parser.add_argument('--easy-margin', type=int, default=0, help='') parser.add_argument('--margin-verbose', type=int, default=0, @@ -170,7 +172,7 @@ def parse_args(): parser.add_argument('--triplet-alpha', type=float, default=0.3, help='') parser.add_argument('--triplet-max-ap', type=float, default=0.0, help='') parser.add_argument('--verbose', type=int, default=2000, help='') - parser.add_argument('--loss-type', type=int, default=1, + parser.add_argument('--loss-type', type=int, default=4, help='') parser.add_argument('--incay', type=float, default=0.0, help='feature incay') @@ -431,8 +433,8 @@ def get_symbol(args, arg_params, aux_params): s = args.margin_s m = args.margin_m assert s>0.0 - assert m>=0.0 - assert m<(math.pi/2) + #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')*s @@ -442,9 +444,13 @@ def get_symbol(args, arg_params, aux_params): t = mx.sym.arccos(cos_t) if args.margin_verbose>0: margin_symbols.append(mx.symbol.mean(t)) - t = t*args.margin_a - t = t+args.margin_m + if args.margin_a>0.0: + t = t*args.margin_a + if args.margin_m>0.0: + t = t+args.margin_m body = mx.sym.cos(t) + if args.margin_b>0.0: + body = body - args.margin_b new_zy = body*s if args.margin_verbose>0: margin_symbols.append(mx.symbol.mean(t))