From 8f5d1df94698082b8ce0f70719b07a478b3b06fb Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Fri, 20 Mar 2020 11:35:36 +0800 Subject: [PATCH 01/14] run.sh --- .gitignore | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++ run.sh | 5 ++ 2 files changed, 192 insertions(+) create mode 100644 .gitignore create mode 100644 run.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bf0c5a --- /dev/null +++ b/.gitignore @@ -0,0 +1,187 @@ +# Created by https://www.gitignore.io/api/vim,macosPeepOpenython,visualstudiocode +# Edit at https://www.gitignore.io/?templates=vim,macosPeepOpenython,visualstudiocode + +### Compressed ### +*.7z +*.deb +*.gz +*.pkg +*.rar +*.rpm +*.sit +*.sitx +*.tar +*.zip +*.zipx +*.tgz + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ + +# Auto-generated tag files +tags + +# Persistent undo +[._]*.un~ + +# Coc configuration directory +.vim + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.gitignore.io/api/vim,macosPeepOpenython,visualstudiocode diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..90d4b11 --- /dev/null +++ b/run.sh @@ -0,0 +1,5 @@ +python S1/train_search.py \ + --exp_name experiment_name \ + --m 4\ + --data_dir ~/.torch/datasets \ + --seed 2020 From 5a55d907bc543a4f86f943e8df9d89ef90086a28 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Fri, 20 Mar 2020 21:19:20 +0800 Subject: [PATCH 02/14] search the pareto_front by nsga2 --- .gitignore | 2 + S1/eval_search.py | 242 +++++++++++++++++++++++++++++++++++++++++++++ S1/model_search.py | 30 ++++++ S1/wnsga2.py | 1 + run.sh | 15 ++- 5 files changed, 287 insertions(+), 3 deletions(-) create mode 100644 S1/eval_search.py create mode 100644 S1/wnsga2.py diff --git a/.gitignore b/.gitignore index 5bf0c5a..5d86846 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +/super_train/ + # Created by https://www.gitignore.io/api/vim,macosPeepOpenython,visualstudiocode # Edit at https://www.gitignore.io/?templates=vim,macosPeepOpenython,visualstudiocode diff --git a/S1/eval_search.py b/S1/eval_search.py new file mode 100644 index 0000000..8c9d151 --- /dev/null +++ b/S1/eval_search.py @@ -0,0 +1,242 @@ +import os +import numpy as np +import argparse +from utils import * +import autograd.numpy as anp +import pymoo +from pymoo.util.misc import stack +from pymoo.model.problem import Problem +from pymoo.algorithms.nsga2 import NSGA2 +#from wnsga2 import WNSGA2 +from pymoo.factory import get_sampling, get_crossover, get_mutation +from pymoo.optimize import minimize +from pymoo.factory import get_termination +from pymoo.visualization.scatter import Scatter +from model_search import SuperNetwork +import torch +import time +import math +from itertools import combinations +import collections +import torchvision.datasets as dset +import torch.backends.cudnn as cudnn + + +@torch.no_grad() +def naive_latency(model, choice, size:tuple)->float: + tt = time.time() + device = next(model.parameters()).device + input = torch.rand(32, 3, *size).to(device) + for i in range(10): + model(input, choice) + return (time.time() - tt)/10 + + +def combine(n, m): + assert n >= m + f = math.factorial + return int(f(n)/f(m)/f(n-m)) + + +def get_choice_list(path_num, m, rate_num=2): + assert path_num >= m + conv_choices = [] + for i in range(1, m+1): + conv_choices.extend( + combinations(range(path_num), i)) + rate_choices = list(range(rate_num)) + choices = [] + for i in range(rate_num): + for conv_choice in conv_choices: + choices.append( + dict( conv=conv_choice, rate=i ) + ) + return choices + + +class MyProblem(Problem): + def __init__(self, model, valid_queue, device, choices, layers): + self.model = model + self.valid_queue = valid_queue + self.device = device + self.choices = choices + self.generate = 0 + super().__init__(n_var=layers, + n_obj=3, + n_constr=0, + xl=anp.array([0 for i in range(layers)]), + xu=anp.array([len(choices)-1 for i in range(layers)])) + + def intarray2choice(self, x): + choice = collections.OrderedDict() + for i in range(len(x)): + c = self.choices[x[i]] + choice[i] = c + return choice + + def _evaluate(self, x, out, *args, **kwargs): + """ + max acc, parameters + min latency + """ + num_pop = x.shape[0] + f1 = np.zeros(num_pop) + f2 = np.zeros(num_pop) + f3 = np.zeros(num_pop) + for i in range(num_pop): + choice = self.intarray2choice(x[i]) + acc = self.get_accuracy(choice) + f1[i] = 1.0 - acc + para_amount = self.get_para_amount(choice) + f2[i] = - para_amount + latency = self.get_latency(choice) + f3[i] = latency + out["F"] = anp.column_stack([f1, f2, f3]) + self.generate += 1 + + @torch.no_grad() + def get_accuracy(self, choice): + if choice is None: + assert False + self.model.eval() + all_targets = [] + all_outputs = [] + for step, (inputs, targets) in enumerate(self.valid_queue): + inputs, targets = inputs.to(self.device), targets.to(self.device) + all_targets.append(targets) + outputs = self.model(inputs, choice) + all_outputs.append(outputs) + all_targets = torch.cat(all_targets) + all_outputs = torch.cat(all_outputs) + prec1 = accuracy(all_outputs, all_targets, topk=(1,)) + return prec1[0].cpu().item() + + def get_para_amount(self, choice): + return count_parameters_in_MB(self.model.get_submodule(choice)) + + def get_latency(self, choice): + return naive_latency(self.model, choice, size=(32, 32)) + # TODO calculate latency based on + # latency lookup table for SNPE, OPENVINO, etc + + +def get_args(): + parser = argparse.ArgumentParser("Search The MixPath") + parser.add_argument('--exp_name', type=str, required=True, help='search model name') + parser.add_argument('--m', type=int, default=2, required=True, help='num of selected paths as most') + parser.add_argument('--shadow_bn', action='store_false', default=True, help='shadow bn or not, default: True') + parser.add_argument('--data_dir', type=str, default='/home/work/dataset/cifar', help='dataset dir') + parser.add_argument('--classes', type=int, default=10, help='classes') + parser.add_argument('--layers', type=int, default=12, help='num of MB_layers') + parser.add_argument('--kernels', type=list, default=[3, 5, 7, 9], help='selective kernels') + parser.add_argument('--batch_size', type=int, default=96, help='batch size') + parser.add_argument('--epochs', type=int, default=200, help='num of epochs') + parser.add_argument('--seed', type=int, default=2020, help='seed') + parser.add_argument('--search_num', type=int, default=1000, help='num of epochs') + parser.add_argument('--learning_rate', type=float, default=0.025, help='initial learning rate') + parser.add_argument('--learning_rate_min', type=float, default=1e-8, help='min learning rate') + parser.add_argument('--momentum', type=float, default=0.9, help='momentum') + parser.add_argument('--weight_decay', type=float, default=3e-4, help='weight decay') + parser.add_argument('--train_interval', type=int, default=1, help='train to print frequency') + parser.add_argument('--val_interval', type=int, default=5, help='evaluate and save frequency') + parser.add_argument('--dropout_rate', type=float, default=0.2, help='drop out rate') + parser.add_argument('--drop_path_prob', type=float, default=0.0, help='drop_path_prob') + parser.add_argument('--grad_clip', type=float, default=5, help='gradient clipping') + parser.add_argument('--gpu', type=int, default=0, help='gpu id') + parser.add_argument('--resume', type=bool, default=False, help='resume') + # ******************************* dataset *******************************# + parser.add_argument('--dataset', type=str, default='cifar10', help='[cifar10, imagenet]') + parser.add_argument('--cutout', action='store_false', default=True, help='use cutout') + parser.add_argument('--cutout_length', type=int, default=16, help='cutout length') + parser.add_argument('--colorjitter', action='store_true', default=False, help='use colorjitter') + #*************GA*****************# + parser.add_argument('--model_path' , type=str, required=True) + parser.add_argument('--pop_size', type=int, default=40) + parser.add_argument('--n_offsprings', type=int, default=10) + parser.add_argument('--n_generations', type=int, default=40) + + arguments = parser.parse_args() + + + return arguments + + +def main(): + args = get_args() + print(args) + + # prepare dir + if not os.path.exists('./super_train'): + os.mkdir('./super_train') + if not os.path.exists('./super_train/{}'.format(args.exp_name)): + save_path = './super_train/{}'.format(args.exp_name) + os.mkdir(save_path) + + # device + if not torch.cuda.is_available(): + device = torch.device('cpu') + else: + torch.cuda.set_device(args.gpu) + cudnn.benchmark = True + cudnn.enabled = True + device = torch.device("cuda") + + + model = SuperNetwork(shadow_bn=args.shadow_bn, layers=args.layers, classes=args.classes) + model = model.to(device) + print("param size of supernet = %fMB" % count_parameters_in_MB(model)) + checkpoint = torch.load(args.model_path) + model.load_state_dict(checkpoint['supernet_state']) + train_transform, valid_transform = data_transforms_cifar(args) + valset = dset.CIFAR10(root=args.data_dir, train=False, download=False, transform=valid_transform) + valid_queue = torch.utils.data.DataLoader(valset, batch_size=args.batch_size, + shuffle=False, pin_memory=True, num_workers=8) + + choices = get_choice_list(path_num=len(args.kernels), m=args.m) + problem = MyProblem(model, valid_queue, device, choices, args.layers) + + algorithm = NSGA2( + pop_size=args.pop_size, + n_offsprings=args.n_offsprings, + sampling=get_sampling("int_random"), + crossover=get_crossover("int_one_point"), + mutation=get_mutation("int_pm"), + eliminate_duplicates=True, + ) + termination = get_termination("n_gen", args.n_generations) + + res = minimize(problem, + algorithm, + termination, + seed=1, + pf=problem.pareto_front(use_cache=False), + save_history=True, + verbose=True) + print(res) + save_path = './super_train/{}'.format(args.exp_name) + torch.save(res, f"{save_path}/res.pkl") + # TODO plot 3D pareto_front points + ## get the pareto-set and pareto-front for plotting + #ps = problem.pareto_set(use_cache=False, flatten=False) + #pf = problem.pareto_front(use_cache=False, flatten=False) + + ## Design Space + #plot = Scatter(title = "Design Space", axis_labels="x") + #plot.add(res.X, s=30, facecolors='none', edgecolors='r') + #plot.add(ps, plot_type="line", color="black", alpha=0.7) + #plot.do() + #plot.apply(lambda ax: ax.set_xlim(-0.5, 1.5)) + #plot.apply(lambda ax: ax.set_ylim(-2, 2)) + ##plot.show() + #plot.savefig(f"{save_path}/design_space.png") + + ## Objective Space + #plot = Scatter(title = "Objective Space") + #plot.add(res.F) + #plot.add(pf, plot_type="line", color="black", alpha=0.7) + ##plot.show() + #plot.savefig(f"{save_path}/objective_space.png") + + +if __name__ == "__main__": + main() diff --git a/S1/model_search.py b/S1/model_search.py index ac96f89..266b397 100644 --- a/S1/model_search.py +++ b/S1/model_search.py @@ -50,6 +50,29 @@ def __init__(self, inplanes, outplanes, shadow_bn, stride, activation=nn.ReLU6): self.mix_bn.append(nn.BatchNorm2d(outplanes)) del bn_list + def get_submodule(self, choice) -> nn.ModuleList: + # choice: {'conv', 'rate'} + conv_ids = choice['conv'] # conv_ids, e.g. [0], [1], [2], [0, 1], [0, 2], [1, 2], [0, 1, 2] + m_ = len(conv_ids) # num of selected paths + rate_id = choice['rate'] # rate_ids, e.g. 0, 1 + assert m_ in [1, 2, 3, 4] + assert rate_id in [0, 1] + + submodule = nn.ModuleList() + submodule.append( self.pw[rate_id] ) + if m_ == 1: + submodule.append(self.mix_conv[rate_id][conv_ids[0]]) + else: + for id in conv_ids: + submodule.append(self.mix_conv[rate_id][id]) + # pw + submodule.append(self.pw_linear[rate_id]) + if self.shadow_bn: + submodule.append( self.mix_bn[rate_id][m_ - 1]) + else: + submodule.append(self.mix_bn[rate_id]) + return submodule + def forward(self, x, choice): # choice: {'conv', 'rate'} conv_ids = choice['conv'] # conv_ids, e.g. [0], [1], [2], [0, 1], [0, 2], [1, 2], [0, 1, 2] @@ -128,6 +151,13 @@ def _initialize_weights(self): m.weight.data.uniform_(-init_range, init_range) m.bias.data.zero_() + def get_submodule(self, choice) -> nn.ModuleList: + submodule = nn.ModuleList( + [self.stem, self.last_conv,self.global_pooling, self.classifier ]) + for i in range(self.layers): + submodule.extend( self.Inverted_Block[i].get_submodule(choice[i]) ) + return submodule + def forward(self, x, choice=None): x = self.stem(x) for i in range(self.layers): diff --git a/S1/wnsga2.py b/S1/wnsga2.py new file mode 100644 index 0000000..2ae2839 --- /dev/null +++ b/S1/wnsga2.py @@ -0,0 +1 @@ +pass diff --git a/run.sh b/run.sh index 90d4b11..1772fa9 100644 --- a/run.sh +++ b/run.sh @@ -1,5 +1,14 @@ -python S1/train_search.py \ - --exp_name experiment_name \ +#python S1/train_search.py \ +# --exp_name experiment_name \ +# --m 4\ +# --data_dir ~/.torch/datasets \ +# --seed 2020 + +python S1/eval_search.py \ + --exp_name search_cifar\ --m 4\ --data_dir ~/.torch/datasets \ - --seed 2020 + --model_path ./super_train/experiment_name/super_train_states.pt.tar\ + --n_generations 200\ + --pop_size 40\ + --n_offsprings 10 From 638696cfe04574598adb5741f0a1bc52d0d09373 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Fri, 20 Mar 2020 21:24:43 +0800 Subject: [PATCH 03/14] :meme: readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 85e94af..2989181 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ +# Finish the MixPath +limingyao@ainirobot.com + +Done: +- NSGA-II (use [pymoo](https://pymoo.org)) + +TODO: +- SNPE/OPENVINO's LookupTable +- plot the pareto_front + + # MixPath: A Unified Approach for One-shot Neural Architecture Search This repo provides the supernet of S1 and our confirmatory experiments on NAS-Bench-101. From 8716e47b9c76bee6a6f6c0ba2e00a32118260e93 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Fri, 20 Mar 2020 21:26:39 +0800 Subject: [PATCH 04/14] :memo: readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2989181..fc05019 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # Finish the MixPath +To finish the MixPath code + limingyao@ainirobot.com Done: @@ -6,7 +8,7 @@ Done: TODO: - SNPE/OPENVINO's LookupTable -- plot the pareto_front +- Plot the pareto_front # MixPath: A Unified Approach for One-shot Neural Architecture Search From 60013f2f3fce4190d64c41c99cdb62c2124fd03a Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Fri, 20 Mar 2020 21:38:06 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E6=8C=96=E4=B8=AAWeigthed=20NSGA-II?= =?UTF-8?q?=E7=9A=84=E5=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- S1/wnsga2.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/S1/wnsga2.py b/S1/wnsga2.py index 2ae2839..bd229ff 100644 --- a/S1/wnsga2.py +++ b/S1/wnsga2.py @@ -1 +1,4 @@ +""" +Weighted NSGA-II mentioned by MoGA +""" pass From e35d23fdf40ec5cc24043bd0237cd6b4362dfb0d Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Fri, 20 Mar 2020 21:49:28 +0800 Subject: [PATCH 06/14] big batch size --- S1/eval_search.py | 3 ++- run.sh | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/S1/eval_search.py b/S1/eval_search.py index 8c9d151..629dc78 100644 --- a/S1/eval_search.py +++ b/S1/eval_search.py @@ -20,6 +20,7 @@ import collections import torchvision.datasets as dset import torch.backends.cudnn as cudnn +from tqdm import tqdm @torch.no_grad() @@ -101,7 +102,7 @@ def get_accuracy(self, choice): self.model.eval() all_targets = [] all_outputs = [] - for step, (inputs, targets) in enumerate(self.valid_queue): + for step, (inputs, targets) in tqdm(enumerate(self.valid_queue), total=len(self.valid_queue)): inputs, targets = inputs.to(self.device), targets.to(self.device) all_targets.append(targets) outputs = self.model(inputs, choice) diff --git a/run.sh b/run.sh index 1772fa9..850fef7 100644 --- a/run.sh +++ b/run.sh @@ -9,6 +9,7 @@ python S1/eval_search.py \ --m 4\ --data_dir ~/.torch/datasets \ --model_path ./super_train/experiment_name/super_train_states.pt.tar\ + --batch_size 1000\ --n_generations 200\ --pop_size 40\ --n_offsprings 10 From fc1d0f4a0b31150d1a846f789f1d4e51bf570fc7 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Mon, 23 Mar 2020 15:56:09 +0800 Subject: [PATCH 07/14] cifar ok ~ --- S1/eval_search.py | 5 +++-- run.sh | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/S1/eval_search.py b/S1/eval_search.py index 629dc78..d0886f8 100644 --- a/S1/eval_search.py +++ b/S1/eval_search.py @@ -87,7 +87,7 @@ def _evaluate(self, x, out, *args, **kwargs): for i in range(num_pop): choice = self.intarray2choice(x[i]) acc = self.get_accuracy(choice) - f1[i] = 1.0 - acc + f1[i] = 100.0 - acc para_amount = self.get_para_amount(choice) f2[i] = - para_amount latency = self.get_latency(choice) @@ -102,7 +102,8 @@ def get_accuracy(self, choice): self.model.eval() all_targets = [] all_outputs = [] - for step, (inputs, targets) in tqdm(enumerate(self.valid_queue), total=len(self.valid_queue)): + #for step, (inputs, targets) in tqdm(enumerate(self.valid_queue), total=len(self.valid_queue)): + for step, (inputs, targets) in enumerate(self.valid_queue): inputs, targets = inputs.to(self.device), targets.to(self.device) all_targets.append(targets) outputs = self.model(inputs, choice) diff --git a/run.sh b/run.sh index 850fef7..24bc097 100644 --- a/run.sh +++ b/run.sh @@ -9,7 +9,7 @@ python S1/eval_search.py \ --m 4\ --data_dir ~/.torch/datasets \ --model_path ./super_train/experiment_name/super_train_states.pt.tar\ - --batch_size 1000\ - --n_generations 200\ + --batch_size 500\ + --n_generations 40\ --pop_size 40\ --n_offsprings 10 From 3ceb7cbbce53219fafbdf05b91de84a82bf2843f Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Mon, 23 Mar 2020 15:58:09 +0800 Subject: [PATCH 08/14] :memo: readme acc in cifar --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fc05019..f69d2e0 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,13 @@ To finish the MixPath code limingyao@ainirobot.com +Get **95.29%** Accuracy in Cifar10 + Done: - NSGA-II (use [pymoo](https://pymoo.org)) TODO: - SNPE/OPENVINO's LookupTable -- Plot the pareto_front # MixPath: A Unified Approach for One-shot Neural Architecture Search From f26362bb6d842094d7be2a2bf7b9e00364ecf82e Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Mon, 23 Mar 2020 16:18:54 +0800 Subject: [PATCH 09/14] plot result --- README.md | 1 + super_train/search_cifar/res_high_tradeoff.png | Bin 0 -> 100580 bytes 2 files changed, 1 insertion(+) create mode 100644 super_train/search_cifar/res_high_tradeoff.png diff --git a/README.md b/README.md index f69d2e0..eb555fb 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Get **95.29%** Accuracy in Cifar10 Done: - NSGA-II (use [pymoo](https://pymoo.org)) +- Plot the result TODO: - SNPE/OPENVINO's LookupTable diff --git a/super_train/search_cifar/res_high_tradeoff.png b/super_train/search_cifar/res_high_tradeoff.png new file mode 100644 index 0000000000000000000000000000000000000000..9286561607411ad367bec3a65a5725e5fa9a473b GIT binary patch literal 100580 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

5v@Quq=x6ZvwwoCLX{pV36zR3?^9E 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 P!oTco9IX#Zy(9h~wv#x< literal 0 HcmV?d00001 From 8aee162ef2851c09c4e9cd559cda43f411217849 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Mon, 23 Mar 2020 16:27:34 +0800 Subject: [PATCH 10/14] :memo: readme --- README.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eb555fb..7b3331a 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ To finish the MixPath code limingyao@ainirobot.com -Get **95.29%** Accuracy in Cifar10 - Done: - NSGA-II (use [pymoo](https://pymoo.org)) - Plot the result @@ -13,6 +11,22 @@ TODO: - SNPE/OPENVINO's LookupTable +## Accuracy +According to https://github.com/kuangliu/pytorch-cifar +| Model | Acc. | +| ----------------- | ----------- | +| [VGG16](https://arxiv.org/abs/1409.1556) | 92.64% | +| [ResNet18](https://arxiv.org/abs/1512.03385) | 93.02% | +| [ResNet50](https://arxiv.org/abs/1512.03385) | 93.62% | +| [ResNet101](https://arxiv.org/abs/1512.03385) | 93.75% | +| [MobileNetV2](https://arxiv.org/abs/1801.04381) | 94.43% | +| [ResNeXt29(32x4d)](https://arxiv.org/abs/1611.05431) | 94.73% | +| [ResNeXt29(2x64d)](https://arxiv.org/abs/1611.05431) | 94.82% | +| [DenseNet121](https://arxiv.org/abs/1608.06993) | 95.04% | +| [PreActResNet18](https://arxiv.org/abs/1603.05027) | 95.11% | +| [DPN92](https://arxiv.org/abs/1707.01629) | 95.16% | +| **MixPath_S1(my)** |**95.29%** | + # MixPath: A Unified Approach for One-shot Neural Architecture Search This repo provides the supernet of S1 and our confirmatory experiments on NAS-Bench-101. From d7465defbcb86901eae2ab3ad7d23922ed1a9e3d Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Wed, 25 Mar 2020 11:44:33 +0800 Subject: [PATCH 11/14] :memo: readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7b3331a..5a8f5d6 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ To finish the MixPath code limingyao@ainirobot.com +![plot the result](super_train/search_cifar/res_high_tradeoff.png) + Done: - NSGA-II (use [pymoo](https://pymoo.org)) - Plot the result From 4919ae8d9e2615e81b2fb7bf8861ca40272489d1 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Wed, 25 Mar 2020 11:49:13 +0800 Subject: [PATCH 12/14] :memo: readme and plot in 2d --- README.md | 7 ++++++- .../res_high_tradeoff_acc_latency.png | Bin 0 -> 16275 bytes 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 super_train/search_cifar/res_high_tradeoff_acc_latency.png diff --git a/README.md b/README.md index 5a8f5d6..be75f95 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,12 @@ To finish the MixPath code limingyao@ainirobot.com -![plot the result](super_train/search_cifar/res_high_tradeoff.png) +![plot the result 3d](super_train/search_cifar/res_high_tradeoff.png) +result of search, f1: Accuracy, f2: parameter amount, f3: GPU latency + +![plot the result 2d](super_train/search_cifar/res_high_tradeoff_acc_latency.png) +result of search, f1: Accuracy, f2: GPU latency + Done: - NSGA-II (use [pymoo](https://pymoo.org)) diff --git a/super_train/search_cifar/res_high_tradeoff_acc_latency.png b/super_train/search_cifar/res_high_tradeoff_acc_latency.png new file mode 100644 index 0000000000000000000000000000000000000000..218d5b78a5c7e55e3bedabac34d6d8624330a3d9 GIT binary patch literal 16275 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 Date: Wed, 25 Mar 2020 11:50:10 +0800 Subject: [PATCH 13/14] :memo: readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index be75f95..dda6135 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,11 @@ To finish the MixPath code limingyao@ainirobot.com ![plot the result 3d](super_train/search_cifar/res_high_tradeoff.png) + result of search, f1: Accuracy, f2: parameter amount, f3: GPU latency ![plot the result 2d](super_train/search_cifar/res_high_tradeoff_acc_latency.png) + result of search, f1: Accuracy, f2: GPU latency From 4ba303112dbb6b3ac86848b5b0c5b8bc81258a48 Mon Sep 17 00:00:00 2001 From: "Neo.Li" Date: Wed, 25 Mar 2020 11:59:58 +0800 Subject: [PATCH 14/14] :memo: readme how to re-implement --- README.md | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dda6135..cc59af6 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,38 @@ To finish the MixPath code limingyao@ainirobot.com +Done: +- NSGA-II (use [pymoo](https://pymoo.org)) +- Plot the result + +TODO: +- SNPE/OPENVINO's LookupTable + +## Cifar +### run +**Train** +```python +python S1/train_search.py \ + --exp_name experiment_name \ + --m 4\ + --data_dir ~/.torch/datasets \ + --seed 2020 +``` +**Search** +```python +python S1/eval_search.py \ + --exp_name search_cifar\ + --m 4\ + --data_dir ~/.torch/datasets \ + --model_path ./super_train/experiment_name/super_train_states.pt.tar\ + --batch_size 500\ + --n_generations 40\ + --pop_size 40\ + --n_offsprings 10 +``` + +### Result + ![plot the result 3d](super_train/search_cifar/res_high_tradeoff.png) result of search, f1: Accuracy, f2: parameter amount, f3: GPU latency @@ -12,13 +44,6 @@ result of search, f1: Accuracy, f2: parameter amount, f3: GPU latency result of search, f1: Accuracy, f2: GPU latency -Done: -- NSGA-II (use [pymoo](https://pymoo.org)) -- Plot the result - -TODO: -- SNPE/OPENVINO's LookupTable - ## Accuracy According to https://github.com/kuangliu/pytorch-cifar