예제 #1
0
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)
예제 #2
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)
예제 #3
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)