コード例 #1
0
        hd.close()

        embeddings = tf.nn.l2_normalize(prelogits, 1, 1e-10, name='embeddings')

        # Norm for the prelogits
        eps = 1e-5
        prelogits_norm = tf.reduce_mean(
            tf.norm(tf.abs(prelogits) + eps, ord=args.prelogits_norm_p,
                    axis=1))
        tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES,
                             prelogits_norm * args.prelogits_norm_loss_factor)

        # inference_loss, logit = cos_loss(prelogits, labels, args.class_number)
        w_init_method = slim.initializers.xavier_initializer()
        inference_loss, logit = arcface_loss(embedding=embeddings,
                                             labels=labels,
                                             w_init=w_init_method,
                                             out_num=args.class_number)
        tf.add_to_collection('losses', inference_loss)

        # total losses
        regularization_losses = tf.get_collection(
            tf.GraphKeys.REGULARIZATION_LOSSES)
        total_loss = tf.add_n([inference_loss] + regularization_losses,
                              name='total_loss')

        # define the learning rate schedule
        learning_rate = tf.train.piecewise_constant(
            epoch,
            boundaries=args.lr_schedule,
            values=[0.1, 0.01, 0.001, 0.0001, 0.00001],
            name='lr_schedule')
コード例 #2
0
ファイル: train_nets.py プロジェクト: IMCGU/deepLearning
         db, args.image_size,
         args)  #預設是lfw,image size 27行 112*112,得到dataset BGR  [112, 112, 3]
     ver_list.append(data_set)  #把驗證集加到ver_list裡
     ver_name_list.append(db)  #把驗證集path加到ver_name_list裡
 # 3. define network, loss, optimize method, learning rate schedule, summary writer, saver
 # 3.1 inference phase
 w_init_method = tf.contrib.layers.xavier_initializer(uniform=False)
 net = get_resnet(images,
                  args.net_depth,
                  type='ir',
                  w_init=w_init_method,
                  trainable=True,
                  keep_rate=dropout_rate)
 # 3.2 get arcface loss
 logit = arcface_loss(embedding=net.outputs,
                      labels=labels,
                      w_init=w_init_method,
                      out_num=args.num_output)
 # test net  because of batch normal layer
 tl.layers.set_name_reuse(True)
 test_net = get_resnet(images,
                       args.net_depth,
                       type='ir',
                       w_init=w_init_method,
                       trainable=False,
                       reuse=True,
                       keep_rate=dropout_rate)
 embedding_tensor = test_net.outputs
 # 3.3 define the cross entropy
 inference_loss = tf.reduce_mean(
     tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logit,
                                                    labels=labels))
コード例 #3
0
def custom_insightface_evaluation(args):
    tf.reset_default_graph()
    # Read the directory containing images
    pairs = read_pairs(args.insightface_pair)
    image_list, issame_list = get_paths_with_pairs(
        args.insightface_dataset_dir, pairs)

    #  Evaluate custom dataset with facenet pre-trained model
    print("Getting embeddings with facenet pre-trained model")

    # Getting batched images by TF dataset
    tf_dataset = facenet.tf_gen_dataset(
        image_list=image_list,
        label_list=None,
        nrof_preprocess_threads=args.nrof_preprocess_threads,
        image_size=args.insightface_dataset_dir,
        method='cache_slices',
        BATCH_SIZE=args.batch_size,
        repeat_count=1,
        to_float32=True,
        shuffle=False)
    # tf_dataset = facenet.tf_gen_dataset(image_list, label_list, args.nrof_preprocess_threads, args.facenet_image_size, method='cache_slices',
    #                                     BATCH_SIZE=args.batch_size, repeat_count=1, shuffle=False)
    tf_dataset_iterator = tf_dataset.make_initializable_iterator()
    tf_dataset_next_element = tf_dataset_iterator.get_next()

    images = tf.placeholder(name='img_inputs',
                            shape=[
                                None, args.insightface_image_size,
                                args.insightface_image_size, 3
                            ],
                            dtype=tf.float32)
    labels = tf.placeholder(name='img_labels', shape=[
        None,
    ], dtype=tf.int64)
    dropout_rate = tf.placeholder(name='dropout_rate', dtype=tf.float32)

    w_init_method = tf.contrib.layers.xavier_initializer(uniform=False)
    net = L_Resnet_E_IR_fix_issue9.get_resnet(images,
                                              args.net_depth,
                                              type='ir',
                                              w_init=w_init_method,
                                              trainable=False,
                                              keep_rate=dropout_rate)
    embeddings = net.outputs
    # mv_mean = tl.layers.get_variables_with_name('resnet_v1_50/bn0/moving_mean', False, True)[0]
    # 3.2 get arcface loss
    logit = arcface_loss(embedding=net.outputs,
                         labels=labels,
                         w_init=w_init_method,
                         out_num=args.num_output)

    sess = tf.Session()
    saver = tf.train.Saver()

    feed_dict = {}
    feed_dict_flip = {}
    path = args.ckpt_file + args.ckpt_index_list[0]
    saver.restore(sess, path)
    print('ckpt file %s restored!' % args.ckpt_index_list[0])
    feed_dict.update(tl.utils.dict_to_one(net.all_drop))
    feed_dict_flip.update(tl.utils.dict_to_one(net.all_drop))
    feed_dict[dropout_rate] = 1.0
    feed_dict_flip[dropout_rate] = 1.0

    batch_size = args.batch_size
    input_placeholder = images

    sess.run(tf_dataset_iterator.initializer)
    print('getting embeddings..')

    total_time = 0
    batch_number = 0
    embeddings_array = None
    embeddings_array_flip = None
    while True:
        try:
            images = sess.run(tf_dataset_next_element)

            data_tmp = images.copy()  # fix issues #4

            for i in range(data_tmp.shape[0]):
                data_tmp[i, ...] -= 127.5
                data_tmp[i, ...] *= 0.0078125
                data_tmp[i, ...] = cv2.cvtColor(data_tmp[i, ...],
                                                cv2.COLOR_RGB2BGR)

            # Getting flip to left_right batched images by TF dataset
            data_tmp_flip = images.copy()  # fix issues #4
            for i in range(data_tmp_flip.shape[0]):
                data_tmp_flip[i, ...] = np.fliplr(data_tmp_flip[i, ...])
                data_tmp_flip[i, ...] -= 127.5
                data_tmp_flip[i, ...] *= 0.0078125
                data_tmp_flip[i, ...] = cv2.cvtColor(data_tmp_flip[i, ...],
                                                     cv2.COLOR_RGB2BGR)

            start_time = time.time()

            feed_dict[input_placeholder] = data_tmp
            _embeddings = sess.run(embeddings, feed_dict)

            feed_dict_flip[input_placeholder] = data_tmp_flip
            _embeddings_flip = sess.run(embeddings, feed_dict_flip)

            if embeddings_array is None:
                embeddings_array = np.zeros(
                    (len(image_list), _embeddings.shape[1]))
                embeddings_array_flip = np.zeros(
                    (len(image_list), _embeddings_flip.shape[1]))
            try:
                embeddings_array[batch_number *
                                 batch_size:min((batch_number + 1) *
                                                batch_size, len(image_list)),
                                 ...] = _embeddings
                embeddings_array_flip[batch_number * batch_size:min(
                    (batch_number + 1) * batch_size, len(image_list)),
                                      ...] = _embeddings_flip
                # print('try: ', batch_number * batch_size, min((batch_number + 1) * batch_size, len(image_list)), ...)
            except ValueError:
                print(
                    'batch_number*batch_size value is %d min((batch_number+1)*batch_size, len(image_list)) %d,'
                    ' batch_size %d, data.shape[0] %d' %
                    (batch_number * batch_size,
                     min((batch_number + 1) * batch_size,
                         len(image_list)), batch_size, images.shape[0]))
                print('except: ', batch_number * batch_size,
                      min((batch_number + 1) * batch_size, images.shape[0]),
                      ...)

            duration = time.time() - start_time
            batch_number += 1
            total_time += duration
        except tf.errors.OutOfRangeError:
            print(
                'tf.errors.OutOfRangeError, Reinitialize tf_dataset_iterator')
            sess.run(tf_dataset_iterator.initializer)
            break

    print(f"total_time: {total_time}")

    _xnorm = 0.0
    _xnorm_cnt = 0
    for embed in [embeddings_array, embeddings_array_flip]:
        for i in range(embed.shape[0]):
            _em = embed[i]
            _norm = np.linalg.norm(_em)
            # print(_em.shape, _norm)
            _xnorm += _norm
            _xnorm_cnt += 1
    _xnorm /= _xnorm_cnt

    final_embeddings_output = embeddings_array + embeddings_array_flip
    final_embeddings_output = sklearn.preprocessing.normalize(
        final_embeddings_output)
    print(final_embeddings_output.shape)

    tpr, fpr, accuracy, val, val_std, far = verification.evaluate(
        final_embeddings_output, issame_list, nrof_folds=10)
    acc2, std2 = np.mean(accuracy), np.std(accuracy)

    auc = metrics.auc(fpr, tpr)
    print('XNorm: %f' % (_xnorm))
    print('Accuracy-Flip: %1.5f+-%1.5f' % (acc2, std2))
    print('TPR: ', np.mean(tpr), 'FPR: ', np.mean(fpr))
    print('Area Under Curve (AUC): %1.3f' % auc)

    tpr_lfw, fpr_lfw, accuracy_lfw, val_lfw, val_std_lfw, far_lfw = lfw.evaluate(
        final_embeddings_output,
        issame_list,
        nrof_folds=10,
        distance_metric=0,
        subtract_mean=False)

    print('accuracy_lfw: %2.5f+-%2.5f' %
          (np.mean(accuracy_lfw), np.std(accuracy_lfw)))
    print(
        f"val_lfw: {val_lfw}, val_std_lfw: {val_std_lfw}, far_lfw: {far_lfw}")

    print('val_lfw rate: %2.5f+-%2.5f @ FAR=%2.5f' %
          (val_lfw, val_std_lfw, far_lfw))
    auc_lfw = metrics.auc(fpr_lfw, tpr_lfw)
    print('TPR_LFW:', np.mean(tpr_lfw), 'FPR_LFW: ', np.mean(fpr_lfw))

    print('Area Under Curve LFW (AUC): %1.3f' % auc_lfw)

    sess.close()

    return acc2, std2, _xnorm, [embeddings_array, embeddings_array_flip]
コード例 #4
0
    loss_keys = []
    with tf.variable_scope(tf.get_variable_scope()):
      for i in range(args.num_gpus):
        with tf.device('/gpu:%d' % i):
          with tf.name_scope('%s_%d' % (args.tower_name, i)) as scope:
            # net = get_resnet(images_s[i], args.net_depth, type='ir', w_init=w_init_method, trainable=True, keep_rate=dropout_rate)
            prelogits, net_points = inference(images_s[i], bottleneck_layer_size=512,
                                              phase_train=True, weight_decay=args.weight_decay)

            embeddings = tf.nn.l2_normalize(prelogits, 1, 1e-10, name='embeddings')
            eps = 1e-5
            prelogits_norm = tf.reduce_mean(tf.norm(tf.abs(prelogits) + eps, ord=1.0, axis=1))
            tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES, prelogits_norm * 2e-5)
            w_init_method = slim.initializers.xavier_initializer()

            logit = arcface_loss(embedding=embeddings, labels=labels_s[i], w_init=w_init_method, out_num=args.num_output)

            # Reuse variables for the next tower.
            tf.get_variable_scope().reuse_variables()
            # define the cross entropy
            inference_loss = tf.reduce_mean(
                tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logit, labels=labels_s[i]))
            tf.add_to_collection('losses', inference_loss)

            regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
            reg_loss = tf.add_n(regularization_losses,name='reg_loss')
            total_loss = tf.add_n([inference_loss] + regularization_losses, name='total_loss')

            # define weight deacy losses

            loss_dict[('inference_loss_%s_%d' % ('gpu', i))] = inference_loss
コード例 #5
0
                                  ],
                                  dtype=tf.int64)

        t_model_path = args.teacher_model_path
        w_init_method = tf.contrib.layers.xavier_initializer(uniform=False)
        net_t = get_resnet(images_t,
                           args.net_depth,
                           type='ir',
                           w_init=w_init_method,
                           trainable=False,
                           keep_rate=dropout_keep_rate)
        embedding_tensor_t = net_t.outputs

        logit_t = arcface_loss(embedding=embedding_tensor_t,
                               labels=labels_t,
                               var_scope='arcface_loss',
                               w_init=w_init_method,
                               out_num=args.num_output)
        t_tau = tf.scalar_mul(1.0 / args.tau, logit_t)
        pred_t = tf.nn.softmax(logit_t)
        acc_t = tf.reduce_mean(
            tf.cast(tf.equal(tf.argmax(pred_t, axis=1), labels_t),
                    dtype=tf.float32))

        print('########################')
        print('teacher model start to restore')
        saver_restore_t = tf.train.Saver()
        config = tf.ConfigProto(allow_soft_placement=True,
                                log_device_placement=args.log_device_mapping)
        config.gpu_options.allow_growth = True
        sess_t = tf.Session(config=config)
コード例 #6
0
def get_insightface_embeddings(args):
    tf.reset_default_graph()
    # Read the directory containing images
    dataset = facenet.get_dataset(args.insightface_dataset_dir)
    nrof_classes = len(dataset)

    #  Evaluate custom dataset with facenet pre-trained model
    print("Getting embeddings with facenet pre-trained model")

    # Get a list of image paths and their labels
    image_list, label_list = facenet.get_image_paths_and_labels(dataset)
    assert len(image_list) > 0, 'The  dataset should not be empty'
    print('Number of classes in  dataset: %d' % nrof_classes)
    print('Number of examples in dataset: %d' % len(image_list))

    # Getting batched images by TF dataset
    tf_dataset = facenet.tf_gen_dataset(
        image_list=image_list,
        label_list=None,
        nrof_preprocess_threads=args.nrof_preprocess_threads,
        image_size=args.insightface_dataset_dir,
        method='cache_slices',
        BATCH_SIZE=args.batch_size,
        repeat_count=1,
        to_float32=True,
        shuffle=False)
    tf_dataset_iterator = tf_dataset.make_initializable_iterator()
    tf_dataset_next_element = tf_dataset_iterator.get_next()

    images = tf.placeholder(name='img_inputs',
                            shape=[
                                None, args.insightface_image_size,
                                args.insightface_image_size, 3
                            ],
                            dtype=tf.float32)
    labels = tf.placeholder(name='img_labels', shape=[
        None,
    ], dtype=tf.int64)
    dropout_rate = tf.placeholder(name='dropout_rate', dtype=tf.float32)

    w_init_method = tf.contrib.layers.xavier_initializer(uniform=False)
    net = L_Resnet_E_IR_fix_issue9.get_resnet(images,
                                              args.net_depth,
                                              type='ir',
                                              w_init=w_init_method,
                                              trainable=False,
                                              keep_rate=dropout_rate)
    embeddings = net.outputs
    # mv_mean = tl.layers.get_variables_with_name('resnet_v1_50/bn0/moving_mean', False, True)[0]
    # 3.2 get arcface loss
    logit = arcface_loss(embedding=net.outputs,
                         labels=labels,
                         w_init=w_init_method,
                         out_num=args.num_output)

    sess = tf.Session()
    saver = tf.train.Saver()

    feed_dict = {}
    feed_dict_flip = {}
    path = args.ckpt_file + args.ckpt_index_list[0]
    saver.restore(sess, path)
    print('ckpt file %s restored!' % args.ckpt_index_list[0])
    feed_dict.update(tl.utils.dict_to_one(net.all_drop))
    feed_dict_flip.update(tl.utils.dict_to_one(net.all_drop))
    feed_dict[dropout_rate] = 1.0
    feed_dict_flip[dropout_rate] = 1.0

    batch_size = args.batch_size
    input_placeholder = images

    sess.run(tf_dataset_iterator.initializer)
    # sess.run(tf_dataset_iterator_flip.initializer)
    print('getting embeddings..')

    total_time = 0
    batch_number = 0
    embeddings_array = None
    embeddings_array_flip = None
    while True:
        try:
            images = sess.run(tf_dataset_next_element)

            data_tmp = images.copy()  # fix issues #4

            for i in range(data_tmp.shape[0]):
                data_tmp[i, ...] -= 127.5
                data_tmp[i, ...] *= 0.0078125
                data_tmp[i, ...] = cv2.cvtColor(data_tmp[i, ...],
                                                cv2.COLOR_RGB2BGR)

            # Getting flip to left_right batched images by TF dataset
            data_tmp_flip = images.copy()  # fix issues #4
            for i in range(data_tmp_flip.shape[0]):
                data_tmp_flip[i, ...] = np.fliplr(data_tmp_flip[i, ...])
                data_tmp_flip[i, ...] -= 127.5
                data_tmp_flip[i, ...] *= 0.0078125
                data_tmp_flip[i, ...] = cv2.cvtColor(data_tmp_flip[i, ...],
                                                     cv2.COLOR_RGB2BGR)

            start_time = time.time()

            feed_dict[input_placeholder] = data_tmp
            _embeddings = sess.run(embeddings, feed_dict)

            feed_dict_flip[input_placeholder] = data_tmp_flip
            _embeddings_flip = sess.run(embeddings, feed_dict_flip)

            if embeddings_array is None:
                embeddings_array = np.zeros(
                    (len(image_list), _embeddings.shape[1]))
                embeddings_array_flip = np.zeros(
                    (len(image_list), _embeddings_flip.shape[1]))
            try:
                embeddings_array[batch_number *
                                 batch_size:min((batch_number + 1) *
                                                batch_size, len(image_list)),
                                 ...] = _embeddings
                embeddings_array_flip[batch_number * batch_size:min(
                    (batch_number + 1) * batch_size, len(image_list)),
                                      ...] = _embeddings_flip
                # print('try: ', batch_number * batch_size, min((batch_number + 1) * batch_size, len(image_list)), ...)
            except ValueError:
                print(
                    'batch_number*batch_size value is %d min((batch_number+1)*batch_size, len(image_list)) %d,'
                    ' batch_size %d, data.shape[0] %d' %
                    (batch_number * batch_size,
                     min((batch_number + 1) * batch_size,
                         len(image_list)), batch_size, images.shape[0]))
                print('except: ', batch_number * batch_size,
                      min((batch_number + 1) * batch_size, images.shape[0]),
                      ...)

            duration = time.time() - start_time
            batch_number += 1
            total_time += duration
        except tf.errors.OutOfRangeError:
            print(
                'tf.errors.OutOfRangeError, Reinitialize tf_dataset_iterator')
            sess.run(tf_dataset_iterator.initializer)
            break

    print(f"total_time: {total_time}")

    _xnorm = 0.0
    _xnorm_cnt = 0
    for embed in [embeddings_array, embeddings_array_flip]:
        for i in range(embed.shape[0]):
            _em = embed[i]
            _norm = np.linalg.norm(_em)
            # print(_em.shape, _norm)
            _xnorm += _norm
            _xnorm_cnt += 1
    _xnorm /= _xnorm_cnt

    final_embeddings_output = embeddings_array + embeddings_array_flip
    final_embeddings_output = sklearn.preprocessing.normalize(
        final_embeddings_output)
    print(final_embeddings_output.shape)

    sess.close()

    return embeddings_array, embeddings_array_flip, final_embeddings_output, _xnorm
コード例 #7
0
                                     name='lr_schedule')
    # 3.3 define the optimize method
    opt = tf.train.MomentumOptimizer(learning_rate=lr, momentum=args.momentum)

    # Calculate the gradients for each model tower.
    tower_grads = []
    tl.layers.set_name_reuse(True)
    loss_dict = {}
    drop_dict = {}
    loss_keys = []
    with tf.variable_scope(tf.get_variable_scope()):
      for i in range(args.num_gpus):
        with tf.device('/gpu:%d' % i):
          with tf.name_scope('%s_%d' % (args.tower_name, i)) as scope:
            net = get_resnet(images_s[i], args.net_depth, type='ir', w_init=w_init_method, trainable=True, keep_rate=dropout_rate)
            logit = arcface_loss(embedding=net.outputs, labels=labels_s[i], w_init=w_init_method, out_num=args.num_output)
            # Reuse variables for the next tower.
            tf.get_variable_scope().reuse_variables()
            # define the cross entropy
            inference_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logit, labels=labels_s[i]))
            # define weight deacy losses
            wd_loss = 0
            for weights in tl.layers.get_variables_with_name('W_conv2d', True, True):
                wd_loss += tf.contrib.layers.l2_regularizer(args.weight_deacy)(weights)
            for W in tl.layers.get_variables_with_name('resnet_v1_50/E_DenseLayer/W', True, True):
                wd_loss += tf.contrib.layers.l2_regularizer(args.weight_deacy)(W)
            for weights in tl.layers.get_variables_with_name('embedding_weights', True, True):
                wd_loss += tf.contrib.layers.l2_regularizer(args.weight_deacy)(weights)
            for gamma in tl.layers.get_variables_with_name('gamma', True, True):
                wd_loss += tf.contrib.layers.l2_regularizer(args.weight_deacy)(gamma)
            for alphas in tl.layers.get_variables_with_name('alphas', True, True):
コード例 #8
0
    w_init_method = tf.contrib.layers.xavier_initializer(
        uniform=False)  # 随机初始化权重先把空架子搭起来,后续再往里面restore train好的权重
    net = get_resnet(
        images,
        args.net_depth,
        type='ir',
        w_init=w_init_method,
        trainable=False,
        keep_rate=dropout_rate)  # L_Resnet_E_IR (?, 112,112,3)>(?, 512)
    embedding_tensor = net.outputs
    # mv_mean = tl.layers.get_variables_with_name('resnet_v1_50/bn0/moving_mean', False, True)[0]
    # 3.2 get arcface loss
    logit = arcface_loss(
        embedding=net.outputs,
        labels=labels,
        w_init=w_init_method,
        out_num=args.num_output)  # (?, 512),(?,),initializer ,85164

    gpu_config = tf.ConfigProto()
    gpu_config.gpu_options.allow_growth = True
    sess = tf.Session(config=gpu_config)
    saver = tf.train.Saver()

    result_index = []
    for file_index in args.ckpt_index_list:
        feed_dict_test = {}
        path = args.ckpt_file + file_index
        saver.restore(sess, path)
        print('ckpt file %s restored!' % file_index)
        feed_dict_test.update(tl.utils.dict_to_one(net.all_drop))
コード例 #9
0
    exclusions = None
    if checkpoint_exclude_scopes:
        exclusions = [
            scope.strip() for scope in checkpoint_exclude_scopes.split(',')]
    variables_to_restore = []
    for var in slim.get_model_variables():
        excluded = False
        for exclusion in exclusions:
            if var.op.name.startswith(exclusion):
                excluded = True
        if not excluded:
            variables_to_restore.append(var)
    print('################################')
    print('variables in ori model to restore are set')

    logit = arcface_loss(embedding=net, labels=labels, var_scope='arcface_loss', w_init=w_init_method, out_num=args.num_output)
    # test net  because of batch normal layera
    # tl.layers.set_name_reuse(True)
    # test_net = get_resnet(images, args.net_depth, type='ir', w_init=w_init_method, trainable=False, reuse=True, keep_rate=dropout_rate)
    # embedding_tensor = test_net.outputs
    # 3.3 define the cross entropy
    inference_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logit, labels=labels))
    # inference_loss_avg = tf.reduce_mean(inference_loss)
    # 3.4 define weight deacy losses
    # for var in tf.trainable_variables():
    #     print(var.name)
    # print('##########'*30)
    # wd_loss = tf.convert_to_tensor(np.array([0.,], dtype=np.float32))

    # 3.5 total losses
    # total_loss = inference_loss + wd_loss
コード例 #10
0
        # Norm for the prelogits
        prelogits_norm = tf.reduce_mean(
            tf.norm(tf.abs(prelogits) + 1e-5,
                    ord=args.prelogits_norm_p,
                    axis=1))
        tf.add_to_collection(tf.GraphKeys.REGULARIZATION_LOSSES,
                             prelogits_norm * args.prelogits_norm_loss_factor)

        if args.loss_type == 'softmax':
            inference_loss, logit = softmax_loss(prelogits, labels,
                                                 args.num_output)
        elif args.loss_type == 'arcface':
            inference_loss, logit = arcface_loss(
                embeddings,
                labels,
                args.num_output,
                w_init=slim.initializers.xavier_initializer())
        else:
            print('loss_type is invalid, you can use softmax or arcface.')
            exit(0)

        # total losses
        regularization_losses = tf.get_collection(
            tf.GraphKeys.REGULARIZATION_LOSSES)
        total_loss = tf.add_n([inference_loss] + regularization_losses,
                              name='total_loss')

        # define the learning rate schedule
        learning_rate = tf.train.piecewise_constant(
            global_step,
コード例 #11
0
 drop_dict = {}
 loss_keys = []
 with tf.variable_scope(tf.get_variable_scope()):
     for iter_gpus in num_gpus:
         with tf.device('/gpu:%d' % iter_gpus):
             with tf.name_scope('%s_%d' % (tower_name, iter_gpus)) as scope:
                 net = get_resnet(images_s[iter_gpus],
                                  net_depth,
                                  type=is_seblock,
                                  w_init=w_init_method,
                                  trainable=True,
                                  keep_rate=dropout_rate)
                 if is_arcloss == 1:
                     logit = arcface_loss(embedding=net.outputs,
                                          labels=labels[iter_gpus],
                                          w_init=w_init_method,
                                          out_num=num_output,
                                          s=loss_s,
                                          m=loss_m)
                 else:
                     logit = cosineface_losses(embedding=net.outputs,
                                               labels=labels_s[iter_gpus],
                                               w_init=w_init_method,
                                               out_num=num_output,
                                               s=loss_s,
                                               m=loss_m)
                 # Reuse variables for the next tower.
                 tf.get_variable_scope().reuse_variables(
                 )  # 同名变量将会复用,假设现在gpu0上创建了两个变量var0,var1,那么在gpu1上创建计算图的时候,如果还有var0和var1,则默认复用之前gpu0上的创建的那两个值
                 # define the cross entropy
                 inference_loss = tf.reduce_mean(
                     tf.nn.sparse_softmax_cross_entropy_with_logits(