mirror of
https://github.com/deepinsight/insightface.git
synced 2026-05-15 04:37:50 +00:00
180 lines
4.9 KiB
Python
180 lines
4.9 KiB
Python
import os
|
|
from easydict import EasyDict as edict
|
|
|
|
config = edict()
|
|
|
|
config.emb_size = 512
|
|
config.net_blocks = [1, 4, 6, 2]
|
|
config.data_format = "NCHW"
|
|
config.bn_is_training = True
|
|
config.val_targets = ['lfw', 'cfp_fp', 'agedb_30']
|
|
config.lfw_total_images_num = 12000
|
|
config.cfp_fp_total_images_num = 14000
|
|
config.agedb_30_total_images_num = 12000
|
|
config.cudnn_conv_heuristic_search_algo = False
|
|
config.enable_fuse_model_update_ops = False
|
|
config.enable_fuse_add_to_output = False
|
|
|
|
# network settings
|
|
network = edict()
|
|
|
|
network.r100 = edict()
|
|
network.r100.net_name = 'fresnet100'
|
|
network.r100.emb_size = 512
|
|
network.r100.fc_type = "E"
|
|
|
|
network.r100_glint360k = edict()
|
|
network.r100_glint360k.net_name = 'fresnet100'
|
|
network.r100_glint360k.emb_size = 512
|
|
network.r100_glint360k.fc_type = "FC"
|
|
|
|
network.y1 = edict()
|
|
network.y1.net_name = 'fmobilefacenet'
|
|
network.y1.emb_size = 128
|
|
network.y1.fc_type = 'GDC'
|
|
network.y1.bn_is_training = True
|
|
network.y1.input_channel = 512
|
|
|
|
# train dataset settings
|
|
dataset = edict()
|
|
|
|
dataset.emore = edict()
|
|
dataset.emore.dataset = 'emore'
|
|
dataset.emore.dataset_dir = "/data/insightface/train_ofrecord/faces_emore"
|
|
dataset.emore.num_classes = 85744
|
|
dataset.emore.total_img_num = 5822653
|
|
dataset.emore.part_name_prefix = "part-"
|
|
dataset.emore.part_name_suffix_length = 5
|
|
dataset.emore.train_data_part_num = 16
|
|
dataset.emore.shuffle = True
|
|
|
|
dataset.glint360k_8GPU = edict()
|
|
dataset.glint360k_8GPU.dataset = "glint360k"
|
|
dataset.glint360k_8GPU.dataset_dir = "/data/glint/glint360k_ofrecord/glint360k"
|
|
dataset.glint360k_8GPU.total_img_num = 17091657
|
|
dataset.glint360k_8GPU.num_classes = 360232
|
|
dataset.glint360k_8GPU.part_name_prefix = "part-"
|
|
dataset.glint360k_8GPU.part_name_suffix_length = 5
|
|
dataset.glint360k_8GPU.train_data_part_num = 200
|
|
dataset.glint360k_8GPU.shuffle = True
|
|
|
|
# loss settings
|
|
loss = edict()
|
|
loss.softmax = edict()
|
|
loss.softmax.loss_name = 'softmax'
|
|
|
|
loss.nsoftmax = edict()
|
|
loss.nsoftmax.loss_name = 'margin_softmax'
|
|
loss.nsoftmax.loss_s = 64.0
|
|
loss.nsoftmax.loss_m1 = 1.0
|
|
loss.nsoftmax.loss_m2 = 0.0
|
|
loss.nsoftmax.loss_m3 = 0.0
|
|
|
|
loss.arcface = edict()
|
|
loss.arcface.loss_name = 'margin_softmax'
|
|
loss.arcface.loss_s = 64.0
|
|
loss.arcface.loss_m1 = 1.0
|
|
loss.arcface.loss_m2 = 0.5
|
|
loss.arcface.loss_m3 = 0.0
|
|
|
|
loss.cosface = edict()
|
|
loss.cosface.loss_name = 'margin_softmax'
|
|
loss.cosface.loss_s = 64.0
|
|
loss.cosface.loss_m1 = 1.0
|
|
loss.cosface.loss_m2 = 0.0
|
|
loss.cosface.loss_m3 = 0.4
|
|
|
|
loss.combined = edict()
|
|
loss.combined.loss_name = 'margin_softmax'
|
|
loss.combined.loss_s = 64.0
|
|
loss.combined.loss_m1 = 1.0
|
|
loss.combined.loss_m2 = 0.3
|
|
loss.combined.loss_m3 = 0.2
|
|
|
|
# default settings
|
|
default = edict()
|
|
|
|
default.dataset = 'emore'
|
|
default.network = 'r100'
|
|
default.loss = 'arcface'
|
|
|
|
default.node_ips = ["192.168.1.13"]
|
|
default.num_nodes = 1
|
|
default.device_num_per_node = 8
|
|
default.model_parallel = 0
|
|
default.partial_fc = 0
|
|
|
|
default.train_batch_size_per_device = 64
|
|
default.train_batch_size = default.train_batch_size_per_device * \
|
|
default.device_num_per_node * default.num_nodes
|
|
default.use_synthetic_data = False
|
|
default.do_validation_while_train = True
|
|
|
|
default.train_unit = "batch"
|
|
default.train_iter = 170586
|
|
default.lr = 0.1
|
|
default.lr_steps = [100000, 140000, 160000]
|
|
default.scales = [1.0, 0.1, 0.01, 0.001]
|
|
default.wd = 0.0005
|
|
default.mom = 0.9
|
|
|
|
default.model_load_dir = ""
|
|
default.models_root = './models'
|
|
default.log_dir = "output/log"
|
|
default.loss_print_frequency = 1
|
|
default.iter_num_in_snapshot = 5000
|
|
|
|
default.use_fp16 = False
|
|
default.nccl_fusion_threshold_mb = 16
|
|
default.nccl_fusion_max_ops = 64
|
|
|
|
default.val_batch_size_per_device = 20
|
|
default.validation_interval = 5000
|
|
default.val_data_part_num = 1
|
|
default.val_dataset_dir = "/data/insightface/eval_ofrecord"
|
|
default.nrof_folds = 10
|
|
default.sample_ratio = 0.1
|
|
|
|
|
|
def generate_config(_network, _dataset, _loss):
|
|
for k, v in loss[_loss].items():
|
|
config[k] = v
|
|
if k in default:
|
|
default[k] = v
|
|
for k, v in network[_network].items():
|
|
config[k] = v
|
|
if k in default:
|
|
default[k] = v
|
|
if _dataset == "glint360k_8GPU":
|
|
default["lr_steps"] = [200000, 400000, 500000, 550000]
|
|
default["scales"] = [0.1, 0.01, 0.001, 0.0001]
|
|
default["train_unit"] = "batch"
|
|
default["train_iter"] = 600000
|
|
default["model_parallel"] = 1
|
|
default["partial_fc"] = 1
|
|
default["sample_ratio"] = 0.1
|
|
elif _dataset == "emore":
|
|
default["lr_steps"] = [100000, 140000, 160000]
|
|
default["scales"] = [0.1, 0.01, 0.001]
|
|
default["train_unit"] = "epoch"
|
|
default["train_iter"] = 17
|
|
default["model_parallel"] = 0
|
|
default["partial_fc"] = 0
|
|
for k, v in dataset[_dataset].items():
|
|
config[k] = v
|
|
if k in default:
|
|
default[k] = v
|
|
|
|
config.loss = _loss
|
|
config.network = _network
|
|
config.dataset = _dataset
|
|
|
|
|
|
def generate_val_config(_network):
|
|
for k, v in network[_network].items():
|
|
config[k] = v
|
|
if k in default:
|
|
default[k] = v
|
|
|
|
config.network = _network
|