def alternate_train( image_set, year, root_path, devkit_path, pretrained, epoch, ctx, begin_epoch, rpn_epoch, rcnn_epoch, frequent, kv_store, work_load_list=None, ): # set up logger logger = logging.getLogger() logger.setLevel(logging.INFO) config.TRAIN.BG_THRESH_LO = 0.0 logging.info("########## TRAIN RPN WITH IMAGENET INIT") config.TRAIN.HAS_RPN = True config.TRAIN.BATCH_SIZE = 1 train_rpn( image_set, year, root_path, devkit_path, pretrained, epoch, "model/rpn1", ctx, begin_epoch, rpn_epoch, frequent, kv_store, work_load_list, ) logging.info("########## GENERATE RPN DETECTION") config.TEST.HAS_RPN = True config.TEST.RPN_PRE_NMS_TOP_N = -1 config.TEST.RPN_POST_NMS_TOP_N = 2000 test_rpn(image_set, year, root_path, devkit_path, "model/rpn1", rpn_epoch, ctx) logging.info("########## TRAIN RCNN WITH IMAGENET INIT AND RPN DETECTION") config.TRAIN.HAS_RPN = False config.TRAIN.BATCH_SIZE = 128 train_rcnn( image_set, year, root_path, devkit_path, pretrained, epoch, "model/rcnn1", ctx, begin_epoch, rcnn_epoch, frequent, kv_store, work_load_list, ) logging.info("########## TRAIN RPN WITH RCNN INIT") config.TRAIN.HAS_RPN = True config.TRAIN.BATCH_SIZE = 1 config.TRAIN.FINETUNE = True train_rpn( image_set, year, root_path, devkit_path, "model/rcnn1", rcnn_epoch, "model/rpn2", ctx, begin_epoch, rpn_epoch, frequent, kv_store, work_load_list, ) logging.info("########## GENERATE RPN DETECTION") config.TEST.HAS_RPN = True config.TEST.RPN_PRE_NMS_TOP_N = -1 config.TEST.RPN_POST_NMS_TOP_N = 2000 test_rpn(image_set, year, root_path, devkit_path, "model/rpn2", rpn_epoch, ctx) logger.info("########## COMBINE RPN2 WITH RCNN1") combine_model("model/rpn2", rpn_epoch, "model/rcnn1", rcnn_epoch, "model/rcnn2", 0) logger.info("########## TRAIN RCNN WITH RPN INIT AND DETECTION") config.TRAIN.HAS_RPN = False config.TRAIN.BATCH_SIZE = 128 train_rcnn( image_set, year, root_path, devkit_path, "model/rcnn2", 0, "model/rcnn2", ctx, begin_epoch, rcnn_epoch, frequent, kv_store, work_load_list, ) logger.info("########## COMBINE RPN2 WITH RCNN2") combine_model("model/rpn2", rpn_epoch, "model/rcnn2", rcnn_epoch, "model/final", 0)
def alternate_train(image_set, test_image_set, year, root_path, devkit_path, pretrained, epoch, ctx, begin_epoch, rpn_epoch, rcnn_epoch, frequent, kv_store, work_load_list=None): # set up logger logger = logging.getLogger() logger.setLevel(logging.INFO) config.TRAIN.BG_THRESH_LO = 0.0 logging.info('########## TRAIN RPN WITH IMAGENET INIT') config.TRAIN.HAS_RPN = True config.TRAIN.BATCH_SIZE = 1 train_rpn(image_set, year, root_path, devkit_path, pretrained, epoch, 'model/rpn1', ctx, begin_epoch, rpn_epoch, frequent, kv_store, work_load_list) logging.info('########## GENERATE RPN DETECTION') config.TEST.HAS_RPN = True config.TEST.RPN_PRE_NMS_TOP_N = -1 config.TEST.RPN_POST_NMS_TOP_N = 2000 test_rpn(image_set, year, root_path, devkit_path, 'model/rpn1', rpn_epoch, ctx[0]) logging.info('########## TRAIN RCNN WITH IMAGENET INIT AND RPN DETECTION') config.TRAIN.HAS_RPN = False config.TRAIN.BATCH_SIZE = 128 train_rcnn(image_set, year, root_path, devkit_path, pretrained, epoch, 'model/rcnn1', ctx, begin_epoch, rcnn_epoch, frequent, kv_store, work_load_list) logging.info('########## TRAIN RPN WITH RCNN INIT') config.TRAIN.HAS_RPN = True config.TRAIN.BATCH_SIZE = 1 config.TRAIN.FINETUNE = True train_rpn(image_set, year, root_path, devkit_path, 'model/rcnn1', rcnn_epoch, 'model/rpn2', ctx, begin_epoch, rpn_epoch, frequent, kv_store, work_load_list) logging.info('########## GENERATE RPN DETECTION') config.TEST.HAS_RPN = True config.TEST.RPN_PRE_NMS_TOP_N = -1 config.TEST.RPN_POST_NMS_TOP_N = 2000 test_rpn(image_set, year, root_path, devkit_path, 'model/rpn2', rpn_epoch, ctx[0]) logger.info('########## COMBINE RPN2 WITH RCNN1') combine_model('model/rpn2', rpn_epoch, 'model/rcnn1', rcnn_epoch, 'model/rcnn2', 0) logger.info('########## TRAIN RCNN WITH RPN INIT AND DETECTION') config.TRAIN.HAS_RPN = False config.TRAIN.BATCH_SIZE = 128 train_rcnn(image_set, year, root_path, devkit_path, 'model/rcnn2', 0, 'model/rcnn2', ctx, begin_epoch, rcnn_epoch, frequent, kv_store, work_load_list) logger.info('########## COMBINE RPN2 WITH RCNN2') combine_model('model/rpn2', rpn_epoch, 'model/rcnn2', rcnn_epoch, 'model/final', 0)
def alternate_train(args, ctx, pretrained, epoch): # set up logger logger, output_path = create_logger(config.output_path, args.cfg, config.dataset.image_set) # basic config begin_epoch = 0 # logging.info('########## TRAIN RPN WITH IMAGENET INIT') rpn1_prefix = os.path.join(output_path, 'rpn1') if not os.path.exists(rpn1_prefix): os.makedirs(rpn1_prefix) config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RPN_BATCH_IMAGES train_rpn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, pretrained, epoch, rpn1_prefix, begin_epoch, config.TRAIN.ALTERNATE.rpn1_epoch, train_shared=False, lr=config.TRAIN.ALTERNATE.rpn1_lr, lr_step=config.TRAIN.ALTERNATE.rpn1_lr_step, logger=logger, output_path=output_path) logging.info('########## GENERATE RPN DETECTION') image_sets = [iset for iset in config.dataset.image_set.split('+')] image_sets.extend( [iset for iset in config.dataset.test_image_set.split('+')]) for image_set in image_sets: test_rpn(config, config.dataset.dataset, image_set, config.dataset.root_path, config.dataset.dataset_path, ctx, rpn1_prefix, config.TRAIN.ALTERNATE.rpn1_epoch, vis=False, shuffle=False, thresh=0, logger=logger, output_path=rpn1_prefix) logging.info('########## TRAIN rfcn WITH IMAGENET INIT AND RPN DETECTION') rfcn1_prefix = os.path.join(output_path, 'rfcn1') config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RCNN_BATCH_IMAGES train_rcnn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, pretrained, epoch, rfcn1_prefix, begin_epoch, config.TRAIN.ALTERNATE.rfcn1_epoch, train_shared=False, lr=config.TRAIN.ALTERNATE.rfcn1_lr, lr_step=config.TRAIN.ALTERNATE.rfcn1_lr_step, proposal='rpn', logger=logger, output_path=rpn1_prefix) logging.info('########## TRAIN RPN WITH rfcn INIT') rpn2_prefix = os.path.join(output_path, 'rpn2') if not os.path.exists(rpn2_prefix): os.makedirs(rpn2_prefix) config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RPN_BATCH_IMAGES train_rpn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, rfcn1_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, rpn2_prefix, begin_epoch, config.TRAIN.ALTERNATE.rpn2_epoch, train_shared=True, lr=config.TRAIN.ALTERNATE.rpn2_lr, lr_step=config.TRAIN.ALTERNATE.rpn2_lr_step, logger=logger, output_path=output_path) logging.info('########## GENERATE RPN FIXED_PARAMS_SHAREDDETECTION') image_sets = [iset for iset in config.dataset.image_set.split('+')] for image_set in image_sets: test_rpn(config, config.dataset.dataset, image_set, config.dataset.root_path, config.dataset.dataset_path, ctx, rpn2_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, vis=False, shuffle=False, thresh=0, logger=logger, output_path=rpn2_prefix) logger.info('########## COMBINE RPN2 WITH rfcn1') rfcn2_prefix = os.path.join(output_path, 'rfcn2') combine_model(rpn2_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, rfcn1_prefix, config.TRAIN.ALTERNATE.rfcn1_epoch, rfcn2_prefix, 0) logger.info('########## TRAIN rfcn WITH RPN INIT AND DETECTION') config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RCNN_BATCH_IMAGES train_rcnn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, rfcn2_prefix, 0, rfcn2_prefix, begin_epoch, config.TRAIN.ALTERNATE.rfcn2_epoch, train_shared=True, lr=config.TRAIN.ALTERNATE.rfcn2_lr, lr_step=config.TRAIN.ALTERNATE.rfcn2_lr_step, proposal='rpn', logger=logger, output_path=rpn2_prefix) logger.info('########## COMBINE RPN2 WITH rfcn2') final_prefix = os.path.join(output_path, 'final') combine_model(rpn2_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, rfcn2_prefix, config.TRAIN.ALTERNATE.rfcn2_epoch, final_prefix, 0)
def alternate_train(args, ctx, pretrained, epoch): # set up logger logger, output_path = create_logger(config.output_path, args.cfg, config.dataset.image_set) # basic config begin_epoch = 0 # logging.info('########## TRAIN RPN WITH IMAGENET INIT') rpn1_prefix = os.path.join(output_path, 'rpn1') if not os.path.exists(rpn1_prefix): os.makedirs(rpn1_prefix) config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RPN_BATCH_IMAGES train_rpn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, pretrained, epoch, rpn1_prefix, begin_epoch, config.TRAIN.ALTERNATE.rpn1_epoch, train_shared=False, lr=config.TRAIN.ALTERNATE.rpn1_lr, lr_step=config.TRAIN.ALTERNATE.rpn1_lr_step, logger=logger, output_path=output_path) logging.info('########## GENERATE RPN DETECTION') image_sets = [iset for iset in config.dataset.image_set.split('+')] image_sets.extend([iset for iset in config.dataset.test_image_set.split('+')]) for image_set in image_sets: test_rpn(config, config.dataset.dataset, image_set, config.dataset.root_path, config.dataset.dataset_path, ctx, rpn1_prefix, config.TRAIN.ALTERNATE.rpn1_epoch, vis=False, shuffle=False, thresh=0, logger=logger, output_path=rpn1_prefix) logging.info('########## TRAIN rfcn WITH IMAGENET INIT AND RPN DETECTION') rfcn1_prefix = os.path.join(output_path, 'rfcn1') config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RCNN_BATCH_IMAGES train_rcnn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, pretrained, epoch, rfcn1_prefix, begin_epoch, config.TRAIN.ALTERNATE.rfcn1_epoch, train_shared=False, lr=config.TRAIN.ALTERNATE.rfcn1_lr, lr_step=config.TRAIN.ALTERNATE.rfcn1_lr_step, proposal='rpn', logger=logger, output_path=rpn1_prefix) logging.info('########## TRAIN RPN WITH rfcn INIT') rpn2_prefix = os.path.join(output_path, 'rpn2') if not os.path.exists(rpn2_prefix): os.makedirs(rpn2_prefix) config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RPN_BATCH_IMAGES train_rpn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, rfcn1_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, rpn2_prefix, begin_epoch, config.TRAIN.ALTERNATE.rpn2_epoch, train_shared=True, lr=config.TRAIN.ALTERNATE.rpn2_lr, lr_step=config.TRAIN.ALTERNATE.rpn2_lr_step, logger=logger, output_path=output_path) logging.info('########## GENERATE RPN DETECTION') image_sets = [iset for iset in config.dataset.image_set.split('+')] for image_set in image_sets: test_rpn(config, config.dataset.dataset, image_set, config.dataset.root_path, config.dataset.dataset_path, ctx, rpn2_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, vis=False, shuffle=False, thresh=0, logger=logger, output_path=rpn2_prefix) logger.info('########## COMBINE RPN2 WITH rfcn1') rfcn2_prefix = os.path.join(output_path, 'rfcn2') combine_model(rpn2_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, rfcn1_prefix, config.TRAIN.ALTERNATE.rfcn1_epoch, rfcn2_prefix, 0) logger.info('########## TRAIN rfcn WITH RPN INIT AND DETECTION') config.TRAIN.BATCH_IMAGES = config.TRAIN.ALTERNATE.RCNN_BATCH_IMAGES train_rcnn(config, config.dataset.dataset, config.dataset.image_set, config.dataset.root_path, config.dataset.dataset_path, args.frequent, config.default.kvstore, config.TRAIN.FLIP, config.TRAIN.SHUFFLE, config.TRAIN.RESUME, ctx, rfcn2_prefix, 0, rfcn2_prefix, begin_epoch, config.TRAIN.ALTERNATE.rfcn2_epoch, train_shared=True, lr=config.TRAIN.ALTERNATE.rfcn2_lr, lr_step=config.TRAIN.ALTERNATE.rfcn2_lr_step, proposal='rpn', logger=logger, output_path=rpn2_prefix) logger.info('########## COMBINE RPN2 WITH rfcn2') final_prefix = os.path.join(output_path, 'final') combine_model(rpn2_prefix, config.TRAIN.ALTERNATE.rpn2_epoch, rfcn2_prefix, config.TRAIN.ALTERNATE.rfcn2_epoch, final_prefix, 0)