roidb = rpn_train.get_training_roidb(imdb)
        output_dir = rpn_config.get_output_dir(imdb, None)
        print 'Output will be saved to `{:s}`'.format(output_dir)

        ### mix anothor dataset
        if args.mix_imdb_name != None:
            imdb_mix = get_imdb(args.mix_imdb_name)
            print 'Loaded dataset `{:s}` for training'.format(imdb_mix.name)
            roidb_mix = rpn_train.get_training_roidb(imdb_mix)
            roidb.extend(roidb_mix)
        ###

        stage1_model = rpn_train.train_net(
            train_cfg.stage1.solver,
            roidb,
            anchordb,
            output_dir,
            final_name=imdb.name,
            pretrained_model=train_cfg.common.pretrained_model,
            max_iters=train_cfg.stage1.max_iters)
        print 'Stage-1: training rpn finished!'

        print 're-store stage-1 final model...'
        dest_path = train_cfg.stage1.model_path.format(imdb.name)
        os.system('cp {:s} {:s}'.format(stage1_model, dest_path))
        print 'done!'
        print 'stage-1 done!'

# =============== stage-2 training fast-rcnn with proposals generated by rpn
    if current_stage <= 2:
        print 'start stage-2...'
        imdb = get_imdb(args.imdb_name)
    roidb = rpn_train.get_training_roidb(imdb)
    output_dir = rpn_config.get_output_dir(imdb, None)
    print 'Output will be saved to `{:s}`'.format(output_dir)

    ### mix anothor dataset
    if args.mix_imdb_name != None:
        imdb_mix = get_imdb(args.mix_imdb_name)
        roidb_mix = rpn_train.get_training_roidb(imdb_mix)
        roidb.extend(roidb_mix)
    ###

    rpn_model = rpn_train.train_net(args.solver,
                                    roidb,
                                    anchordb,
                                    output_dir,
                                    final_name=imdb.name,
                                    pretrained_model=args.pretrained_model,
                                    max_iters=args.max_iters)
    print 'training rpn finished!'

    print 're-store rpn final model...'
    # dest_path = train_cfg.stage1.model_path.format(imdb.name)
    # os.system('cp {:s} {:s}'.format(rpn_model, dest_path))
    print 'done!'

    # =============== stage-2 testing
    final_test_imdbname = args.test_imdb
    if not final_test_imdbname:
        print 'have no image set to test!\nexit!'
        sys.exit()
    imdb = get_imdb(args.imdb_name)
    print 'Loaded dataset `{:s}` for training'.format(imdb.name)

    roidb = rpn_train.get_training_roidb(imdb)
    output_dir = rpn_config.get_output_dir(imdb, None)
    print 'Output will be saved to `{:s}`'.format(output_dir)
    
    ### mix anothor dataset
    if args.mix_imdb_name != None:
        imdb_mix = get_imdb(args.mix_imdb_name)
        roidb_mix = rpn_train.get_training_roidb(imdb_mix)
        roidb.extend(roidb_mix)
    ### 

    rpn_model = rpn_train.train_net(args.solver, 
              roidb, anchordb, output_dir, final_name=imdb.name,
              pretrained_model=args.pretrained_model,
              max_iters=args.max_iters)
    print 'training rpn finished!'
    
    print 're-store rpn final model...'
    # dest_path = train_cfg.stage1.model_path.format(imdb.name)
    # os.system('cp {:s} {:s}'.format(rpn_model, dest_path))
    print 'done!'
        
# =============== stage-2 testing
    final_test_imdbname = args.test_imdb
    if not final_test_imdbname:
        print 'have no image set to test!\nexit!'
        sys.exit()

    print 'start test...'
        print 'Loaded dataset `{:s}` for training'.format(imdb.name)
        
        roidb = rpn_train.get_training_roidb(imdb)
        output_dir = rpn_config.get_output_dir(imdb, None)
        print 'Output will be saved to `{:s}`'.format(output_dir)

        ### mix anothor dataset
        if args.mix_imdb_name != None:
            imdb_mix = get_imdb(args.mix_imdb_name)
            print 'Loaded dataset `{:s}` for training'.format(imdb_mix.name)
            roidb_mix = rpn_train.get_training_roidb(imdb_mix)
            roidb.extend(roidb_mix)
        ### 
 
        stage1_model = rpn_train.train_net(train_cfg.stage1.solver, 
                  roidb, anchordb, output_dir, final_name=imdb.name,
                  pretrained_model=train_cfg.common.pretrained_model,
                  max_iters=train_cfg.stage1.max_iters)
        print 'Stage-1: training rpn finished!'
    
        print 're-store stage-1 final model...'
        dest_path = train_cfg.stage1.model_path.format(imdb.name)
        os.system('cp {:s} {:s}'.format(stage1_model, dest_path))
        print 'done!'
        print 'stage-1 done!'
        
# =============== stage-2 training fast-rcnn with proposals generated by rpn
    if current_stage <= 2:
        print 'start stage-2...'
        imdb = get_imdb(args.imdb_name)
        print 'Loaded dataset `{:s}` for training'.format(imdb.name)