if args.cpu_mode:
        caffe.set_mode_cpu()
    else:
        caffe.set_mode_gpu()
        caffe.set_device(args.gpu_id)

    if args.curr_stage < 0:
        print 'The number of stage must more than or equal to 0!'
        sys.exit()
    current_stage = args.curr_stage

    # ============== stage-pre
    print 'start stage-pre...'
    # calculate ouput size map and prepare anchors
    output_w, output_h = rpn_train.proposal_calc_output_size(
        args.imdb_name, train_cfg.stage1.test_net)
    anchors, anchors_file = rpn_train.proposal_generate_anchors(args.imdb_name)
    anchordb = {
        'anchors': anchors,
        'output_width_map': output_w,
        'output_height_map': output_h
    }

    print 'stage-pre done!'

    # =============== stage-1 training rpn with imagenet parameters
    if current_stage <= 1:
        print 'start stage-1...'
        imdb = get_imdb(args.imdb_name)
        print 'Loaded dataset `{:s}` for training'.format(imdb.name)
        np.random.seed(rpn_config.cfg.RNG_SEED)
        caffe.set_random_seed(rpn_config.cfg.RNG_SEED)

    if args.cpu_mode:
        caffe.set_mode_cpu()
    else:
        caffe.set_mode_gpu()
        caffe.set_device(args.gpu_id)

# ============== stage-pre
    print 'start stage-pre...'
    if not os.path.exists(args.test_def):
        raise IOError(('{:s} not found!').format(args.test_def))

    # calculate ouput size map and prepare anchors
    output_w, output_h = rpn_train.proposal_calc_output_size(
        args.imdb_name, args.test_def)
    anchors, anchors_file = rpn_train.proposal_generate_anchors(args.imdb_name)
    anchordb = {
        'anchors': anchors,
        'output_width_map': output_w,
        'output_height_map': output_h
    }

    print 'stage-pre done!'

    # =============== stage-1 training rpn with imagenet parameters
    print 'start train rpn model...'
    imdb = get_imdb(args.imdb_name)
    print 'Loaded dataset `{:s}` for training'.format(imdb.name)

    roidb = rpn_train.get_training_roidb(imdb)
        np.random.seed(rpn_config.cfg.RNG_SEED)
        caffe.set_random_seed(rpn_config.cfg.RNG_SEED)
    
    if args.cpu_mode:
        caffe.set_mode_cpu()
    else:
        caffe.set_mode_gpu()
        caffe.set_device(args.gpu_id)

# ============== stage-pre
    print 'start stage-pre...'
    if not os.path.exists(args.test_def):
        raise IOError(('{:s} not found!').format(args.test_def))

    # calculate ouput size map and prepare anchors
    output_w, output_h = rpn_train.proposal_calc_output_size(args.imdb_name, 
                                                             args.test_def)
    anchors, anchors_file = rpn_train.proposal_generate_anchors(args.imdb_name)
    anchordb = {'anchors': anchors, 
                'output_width_map': output_w,
                'output_height_map': output_h
                } 
    
    print 'stage-pre done!'
    
# =============== stage-1 training rpn with imagenet parameters 
    print 'start train rpn model...'
    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)
    
    if args.cpu_mode:
        caffe.set_mode_cpu()
    else:
        caffe.set_mode_gpu()
        caffe.set_device(args.gpu_id)

    if args.curr_stage < 0:
        print 'The number of stage must more than or equal to 0!'
        sys.exit()
    current_stage = args.curr_stage

# ============== stage-pre
    print 'start stage-pre...'
    # calculate ouput size map and prepare anchors
    output_w, output_h = rpn_train.proposal_calc_output_size(args.imdb_name, 
                                                    train_cfg.stage1.test_net)
    anchors, anchors_file = rpn_train.proposal_generate_anchors(args.imdb_name)
    anchordb = {'anchors': anchors, 
                'output_width_map': output_w,
                'output_height_map': output_h
                } 
    
    print 'stage-pre done!'

    
# =============== stage-1 training rpn with imagenet parameters 
    if current_stage <= 1:
        print 'start stage-1...'
        imdb = get_imdb(args.imdb_name)
        print 'Loaded dataset `{:s}` for training'.format(imdb.name)