diff --git a/.gitignore b/.gitignore index 6caf68a..a67107b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -output \ No newline at end of file +output +__pycache__/ diff --git a/retraining/_converts.py b/retraining/_converts.py new file mode 100644 index 0000000..2631a7b --- /dev/null +++ b/retraining/_converts.py @@ -0,0 +1,176 @@ +# convert rank model encoding to model genotype +rank_0 = [[1, 1], + [1, 1, 1, 1], + [1, 1, 0, 1], + [1, 0, 1, 1], + [1, 1, 0, 1]] + +rank_10 = [[1, 1], + [1, 0, 3, 1], + [1, 3, 0, 1], + [1, 1, 1, 0], + [3, 0, 1, 1]] +rank_20 = [[1, 0], + [1, 2, 3, 1], + [1, 3, 1, 1], + [1, 2, 2, 1], + [3, 1, 3, 1]] +rank_30 = [[1, 0], +[3, 1, 1, 0], +[1, 2, 2, 0], +[1, 0, 0, 0], +[3, 0, 2, 1]] + +rank_40 = [[0, 1], + [3, 1, 0, 0], + [3, 2, 0, 1], + [3, 0, 1, 1], + [0, 3, 0, 1]] +rank_50 = [[0, 0], + [3, 0, 2, 1], + [3, 1, 2, 0], + [3, 3, 1, 1], + [0, 0, 3, 1]] +rank_60 = [[0, 0], +[3, 2, 3, 1], +[3, 3, 3, 1], +[0, 0, 1, 0], +[0, 0, 0, 1]] +rank_70 = [[3, 1], +[2, 1, 1, 1], +[1, 0, 1, 2], +[2, 1, 0, 1], +[3, 2, 1, 0]] + +rank_80 = [[2, 1], + [0, 3, 3, 1], + [1, 0, 3, 3], + [3, 2, 0, 1], + [0, 2, 2, 1]] +rank_90 = [[2, 1], + [2, 1, 3, 1], + [1, 2, 2, 3], + [2, 0, 3, 1], + [1, 2, 0, 0]] +rank_100 = [[3, 0], + [0, 0, 0, 0], + [0, 1, 0, 0], + [2, 3, 2, 1], + [3, 0, 2, 0]] +rank_110 = [[3, 0], + [3, 2, 2, 0], + [3, 0, 1, 3], + [2, 0, 2, 1], + [0, 0, 3, 0]] +rank_120 =[[2, 0], +[0, 3, 2, 0], +[0, 0, 2, 0], +[1, 1, 1, 2], +[0, 0, 0, 0]] + +rank_130 = [[1, 3], + [2, 3, 2, 1], + [0, 2, 0, 1], + [1, 1, 2, 3], + [1, 1, 0, 3]] +rank_140 = [[1, 3], + [3, 1, 0, 3], + [0, 2, 0, 0], + [1, 2, 3, 3], + [1, 3, 3, 3]] +rank_150 =[[1, 2], +[0, 2, 2, 0], +[0, 3, 3, 0], +[1, 0, 0, 2], +[1, 3, 1, 2]] + +rank_160 = [[0, 3], + [2, 0, 2, 0], + [2, 1, 0, 1], + [1, 0, 2, 2], + [3, 2, 3, 3]] +rank_170 = [[0, 3], + [0, 0, 1, 3], + [2, 0, 3, 1], + [0, 3, 1, 2], + [0, 1, 0, 3]] +rank_180 = [[0, 2], + [3, 2, 0, 3], + [2, 3, 1, 1], + [3, 1, 3, 3], + [0, 2, 1, 3]] +rank_190 = [[0, 2], + [3, 0, 3, 2], + [2, 3, 2, 0], + [3, 2, 1, 3], + [0, 3, 0, 3]] +rank_200 = [[3, 3], +[0, 0, 3, 3], +[0, 1, 2, 3], +[3, 3, 3, 3], +[1, 0, 0, 2]] +rank_220 = [[3, 2], + [2, 1, 3, 3], + [2, 1, 0, 2], + [0, 2, 2, 3], + [0, 0, 2, 3]] +rank_250 = [[2, 2], + [2, 2, 0, 2], + [2, 3, 2, 3], + [2, 0, 0, 2], + [0, 0, 2, 2]] + +epoch_0 = [[3, 2], + [2, 1, 0, 2], + [0, 0, 0, 2], + [3, 2, 1, 1], + [1, 1, 0, 0]] +epoch_2 = [[1, 1], + [1, 1, 0, 1], + [1, 1, 0, 0], + [1, 1, 0, 1], + [3, 2, 1, 1]] +epoch_4 = [[1, 1], + [1, 1, 1, 1], + [1, 1, 0, 0], + [1, 1, 3, 1], + [3, 0, 1, 1]] +epoch_6 = [[1, 1], + [1, 1, 1, 1], + [1, 0, 0, 0], + [1, 3, 1, 1], + [1, 3, 1, 1]] +epoch_8 = [[1, 1], + [1, 1, 1, 1], + [1, 1, 0, 0], + [1, 1, 1, 1], + [1, 1, 0, 1]] + +def converter(encoding): + # seting table and model template + table = { + '0': (3, 6), # k=3,e=6 + '1': (5, 6), + '2': (3, 3), + '3': (5, 3) + } + model_geno = [['ir_r1_k{}_s2_e{}_c24_se0.25', 'ir_r1_k{}_s1_e{}_c24_se0.25'], + ['ir_r1_k{}_s2_e{}_c40_se0.25', 'ir_r1_k{}_s1_e{}_c40_se0.25', 'ir_r1_k{}_s1_e{}_c40_se0.25', + 'ir_r1_k{}_s1_e{}_c40_se0.25'], + ['ir_r1_k{}_s2_e{}_c80_se0.25', 'ir_r1_k{}_s1_e{}_c80_se0.25', 'ir_r1_k{}_s1_e{}_c80_se0.25', + 'ir_r1_k{}_s1_e{}_c80_se0.25'], + ['ir_r1_k{}_s1_e{}_c112_se0.25', 'ir_r1_k{}_s1_e{}_c112_se0.25', 'ir_r1_k{}_s1_e{}_c112_se0.25', + 'ir_r1_k{}_s1_e{}_c112_se0.25'], + ['ir_r1_k{}_s2_e{}_c192_se0.25', 'ir_r1_k{}_s1_e{}_c192_se0.25', 'ir_r1_k{}_s1_e{}_c192_se0.25', + 'ir_r1_k{}_s1_e{}_c192_se0.25']] + + model = [['ds_r1_k3_s1_c16_se0.25']] + for b_encoding, b_geno in zip(encoding,model_geno): + block = [] + for num, geno in zip(b_encoding,b_geno): + get_ke = table[str(num)] + block.append(geno.format(get_ke[0],get_ke[1])) + model.append(block) + model.append(['ir_r1_k3_s1_e6_c320_se0.25']) + return model + diff --git a/retraining/model.py b/retraining/model.py index 08248d7..3f994c4 100644 --- a/retraining/model.py +++ b/retraining/model.py @@ -5,7 +5,7 @@ from copy import deepcopy from timm.models import * from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD - +from _converts import * _BN_MOMENTUM_PT_DEFAULT = 0.1 _BN_EPS_PT_DEFAULT = 1e-5 _BN_ARGS_PT = dict(momentum=_BN_MOMENTUM_PT_DEFAULT, eps=_BN_EPS_PT_DEFAULT) @@ -291,3 +291,302 @@ def DNA_d(pretrained=False, num_classes=1000, in_chans=3, **kwargs): if pretrained: raise NotImplementedError return model + + +def DNA_rank0(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_0) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank10(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_10) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank20(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_20) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank30(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_30) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank40(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_40) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank50(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_50) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank60(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_60) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank70(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_70) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + + return model + + + +def DNA_rank80(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_80) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank90(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_90) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank100(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_100) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank110(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_110) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank120(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_120) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank130(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_130) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank140(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_140) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + +def DNA_rank150(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_150) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank160(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_160) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank170(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_170) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank180(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_180) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank190(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_190) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + +def DNA_rank200(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_200) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank220(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_220) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model + + +def DNA_rank250(pretrained=False, num_classes=1000, in_chans=3, **kwargs): + model_arch = converter(rank_250) + default_cfg = _cfg(url='') + # TODO: Add Pretained model in url + kwargs['drop_connect_rate'] = 0.2 # Open in train + model = _gen_dna_net(channel_multiplier=1.0, depth_multiplier=1.0, + num_classes=num_classes, in_chans=in_chans, arch_def=model_arch, **kwargs) + model.default_cfg = default_cfg + if pretrained: + raise NotImplementedError + return model \ No newline at end of file diff --git a/retraining/run_rank.sh b/retraining/run_rank.sh new file mode 100644 index 0000000..cde4e96 --- /dev/null +++ b/retraining/run_rank.sh @@ -0,0 +1,10 @@ +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank10 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank20 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank30 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank40 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank50 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank60 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank70 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank80 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank90 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000 +CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./distributed_train.sh 8 /mnt/truenas/scratch/hzh/datasets/imagenet/ --model DNA_rank100 --epochs 5 --warmup-epochs 0 --batch-size 64 --lr 0.02 --opt sgd --sched step --cooldown-epochs 0 --drop 0.2 -j 8 --num-classes 1000