def prepare_args(): # parse args parser = argparse.ArgumentParser(description="train cifar10", formatter_class=argparse.ArgumentDefaultsHelpFormatter) fit.add_fit_args(parser) data.add_data_args(parser) data.add_data_aug_args(parser) # uncomment to set standard cifar augmentations # set_cifar_aug(parser) parser.set_defaults( # network network = 'resnet', num_layers = 110, # data data_train = train_fname, data_val = val_fname, num_classes = 10, num_examples = 50000, image_shape = '3,28,28', pad_size = 4, # train batch_size = 128, num_epochs = 300, lr = .05, lr_step_epochs = '200,250', ) return parser.parse_args(), fit, data
return (net, new_args) def set_imagenet_aug(aug): # standard data augmentation setting for imagenet training aug.set_defaults(rgb_mean='123.68,116.779,103.939', rgb_std='58.393,57.12,57.375') aug.set_defaults(random_crop=0, random_resized_crop=1, random_mirror=1) aug.set_defaults(min_random_area=0.08) aug.set_defaults(max_random_aspect_ratio=4./3., min_random_aspect_ratio=3./4.) aug.set_defaults(brightness=0.4, contrast=0.4, saturation=0.4, pca_noise=0.1) if __name__ == "__main__": # parse args parser = argparse.ArgumentParser(description="fine-tune a dataset", formatter_class=argparse.ArgumentDefaultsHelpFormatter) train = fit.add_fit_args(parser) data.add_data_args(parser) aug = data.add_data_aug_args(parser) parser.add_argument('--pretrained-model', type=str, help='the pre-trained model') parser.add_argument('--layer-before-fullc', type=str, default='flatten0', help='the name of the layer before the last fullc layer') # use less augmentations for fine-tune data.set_data_aug_level(parser, 1) set_imagenet_aug(parser) # use a small learning rate and less regularizations parser.set_defaults(image_shape='3,224,224', num_epochs=30, lr=.01, lr_step_epochs='20', wd=0, mom=0) args = parser.parse_args()
import os import argparse import logging logging.basicConfig(level=logging.DEBUG) from common import find_mxnet, data, fit from common.util import download_file import mxnet as mx if __name__ == '__main__': # parse args parser = argparse.ArgumentParser( description="train cifar10", formatter_class=argparse.ArgumentDefaultsHelpFormatter) fit.add_fit_args(parser) data.add_data_args(parser) data.add_data_aug_args(parser) # use a large aug level data.set_data_aug_level(parser, 3) parser.set_defaults( # network network='resnet', num_layers=50, # data num_classes=1000, num_examples=1281167, image_shape='3,224,224', min_random_scale=1, # if input image has min size k, suggest to use # 256.0/x, e.g. 0.533 for 480 # train num_epochs=80, lr_step_epochs='30,60',
# specific language governing permissions and limitations # under the License. import os import argparse import logging logging.basicConfig(level=logging.DEBUG) from common import find_mxnet, data, fit from common.util import download_file import mxnet as mx if __name__ == '__main__': # parse args parser = argparse.ArgumentParser(description="train imagenet-1k", formatter_class=argparse.ArgumentDefaultsHelpFormatter) fit.add_fit_args(parser) data.add_data_args(parser) data.add_data_aug_args(parser) # uncomment to set standard augmentation for resnet training # data.set_resnet_aug(parser) parser.set_defaults( # network network = 'resnet', num_layers = 50, # data num_classes = 1000, num_examples = 1281167, image_shape = '3,224,224', min_random_scale = 1, # if input image has min size k, suggest to use # 256.0/x, e.g. 0.533 for 480 # train
step_epochs = [int(l) for l in args.lr_step_epochs.split(',')] lr = args.lr for s in step_epochs: if begin_epoch >= s: lr *= args.lr_factor if lr != args.lr: logging.info('Adjust learning rate to %e for epoch %d' %(lr, begin_epoch)) steps = [epoch_size * (x-begin_epoch) for x in step_epochs if x-begin_epoch > 0] return (lr, mx.lr_scheduler.MultiFactorScheduler(step=steps, factor=args.lr_factor)) if __name__ == "__main__": # parse args parser = argparse.ArgumentParser(description="fine-tune a dataset", formatter_class=argparse.ArgumentDefaultsHelpFormatter) train = fit.add_fit_args(parser) data.add_data_args(parser) aug = data.add_data_aug_args(parser) parser.add_argument('--pretrained-model', type=str, help='the pre-trained model') parser.add_argument('--layer-before-fullc', type=str, default='flatten0', help='the name of the layer before the last fullc layer') # use less augmentations for fine-tune data.set_data_aug_level(parser, 3) # use a small learning rate and less regularizations parser.set_defaults( # network network = 'inception-bn', # data num_classes = 1000,
def start_new_training(): # binding signals SUPPORTED_SIGNALS = ( signal.SIGINT, signal.SIGTERM, ) for signum in SUPPORTED_SIGNALS: try: signal.signal(signum, signal_handler) logger.info("Bind signal '%s' success to %s", signum, signal_handler) except Exception as identifier: logger.warning("Bind signal '%s' failed, err: %s", signum, identifier) try: # parse args parser = argparse.ArgumentParser( description="train imagenet-1k", formatter_class=argparse.ArgumentDefaultsHelpFormatter) fit.add_fit_args(parser) data.add_data_args(parser) data.add_data_aug_args(parser) # use a large aug level data.set_data_aug_level(parser, 3) parser.set_defaults( # network network='resnet', num_layers=50, # data num_classes=10, num_examples=60000, image_shape='3,28,28', min_random_scale=1, # if input image has min size k, suggest to use # 256.0/x, e.g. 0.533 for 480 # train num_epochs=80, lr_step_epochs='30,60', dtype='float32', batch_size=32) args = parser.parse_args() # AVA-SDK new an Instance train_ins = train.TrainInstance() # add CALLBACK batch_end_cb = train_ins.get_monitor_callback( "mxnet", batch_size=args.batch_size, batch_freq=10) args.batch_end_callback = batch_end_cb # load network from importlib import import_module net = import_module('symbols.' + args.network) sym = net.get_symbol(**vars(args)) # train fit.fit(args, sym, data.get_rec_iter) logger.info("training finish") err_msg = "" if train_ins == None: return train_ins.done(err_msg=err_msg) except Exception as err: err_msg = "training failed, err: %s" % (err) logger.info(err_msg) traceback.print_exc(file=sys.stderr) if train_ins == None: return train_ins.done(err_msg=err_msg)