def METHOD_NAME():
    place = paddle.CUDAPlace(0) if FLAGS.devices == 'gpu' else paddle.CPUPlace()
    exe = paddle.static.Executor(place)
    val_program, feed_target_names, fetch_targets = load_inference_model(
        config["model_dir"].rstrip('/'),
        exe,
        model_filename=config["model_filename"],
        params_filename=config["params_filename"])
    print('Loaded model from: {}'.format(config["model_dir"]))
    metric = config['metric']
    for batch_id, data in enumerate(val_loader):
        data_all = convert_numpy_data(data, metric)
        data_input = {}
        for k, v in data.items():
            if isinstance(config['input_list'], list):
                if k in config['input_list']:
                    data_input[k] = np.array(v)
            elif isinstance(config['input_list'], dict):
                if k in config['input_list'].keys():
                    data_input[config['input_list'][k]] = np.array(v)
        outs = exe.run(val_program,
                       feed=data_input,
                       fetch_list=fetch_targets,
                       return_numpy=False)
        res = {}
        if 'arch' in config and config['arch'] == 'keypoint':
            res = keypoint_post_process(data, data_input, exe, val_program,
                                        fetch_targets, outs)
        if 'arch' in config and config['arch'] == 'PPYOLOE':
            postprocess = PPYOLOEPostProcess(
                score_threshold=0.01, nms_threshold=0.6)
            res = postprocess(np.array(outs[0]), data_all['scale_factor'])
        else:
            for out in outs:
                v = np.array(out)
                if len(v.shape) > 1:
                    res['bbox'] = v
                else:
                    res['bbox_num'] = v
        metric.update(data_all, res)
        if batch_id % 100 == 0:
            print('Eval iter:', batch_id)
    metric.accumulate()
    metric.log()
    metric.reset()