def evaluate_from_pred_dict(predictions,
                            refvg_split,
                            analyze_subset=True,
                            exp_name_in_summary=None,
                            save_result_to_path=None,
                            update_predictions=False,
                            verbose=False):

    evaluator = Evaluator(refvg_split=refvg_split,
                          analyze_subset=analyze_subset)
    mb = list()
    for img_id, im_preds in predictions.items():
        pred_mask_tag = None
        pred_boxes_tag = None
        correct_tag = None
        for task_id, task_pred in im_preds.items():
            if 'pred_mask' in task_pred:
                pred_mask_tag = 'pred_mask'
            if 'pred_boxlist' in task_pred:
                pred_boxes_tag = 'pred_boxlist'
            if 'correct' in task_pred:
                correct_tag = 'correct'
            break
        if len(mb) == 0:
            if pred_mask_tag is not None:
                mb.append('mask')
            if pred_boxes_tag is not None:
                mb.append('box')
        im, ib = evaluator.eval_single_img(img_id=img_id,
                                           im_pred_dict=im_preds,
                                           pred_mask_tag=pred_mask_tag,
                                           pred_boxes_tag=pred_boxes_tag,
                                           correct_tag=correct_tag,
                                           verbose=verbose)
        if update_predictions:
            for task_id, task_pred in im_preds.items():
                if task_id in im:
                    task_pred['mask_iou'] = im[task_id]
                if task_id in ib:
                    task_pred['box_iou'] = ib[task_id]

    evaluator.analyze_stats(mask_box=mb,
                            exp_name_in_summary=exp_name_in_summary,
                            save_result_to_path=save_result_to_path)

    return predictions
def evaluate_from_pred_folder(pred_folder,
                              refvg_split,
                              analyze_subset=True,
                              exp_name_in_summary=None,
                              save_result_to_path=None,
                              verbose=False):
    print(exp_name_in_summary)
    evaluator = Evaluator(refvg_split=refvg_split,
                          analyze_subset=analyze_subset)
    fnames = os.listdir(pred_folder)
    fnames.sort()
    img_preds = dict()
    cur_img_id = ''
    for fname in fnames:
        if not fname.endswith('.png'):
            continue
        task_id = fname.split('.')[0]
        img_id = task_id.split('__')[0]
        pred_mask = png_to_pred_mask(os.path.join(pred_folder, fname))

        if img_id == cur_img_id:
            img_preds[task_id] = {'pred_mask': pred_mask}

        else:
            if len(img_preds) > 0:
                # print(img_preds)
                evaluator.eval_single_img(img_id=int(cur_img_id),
                                          im_pred_dict=img_preds,
                                          pred_mask_tag='pred_mask',
                                          verbose=verbose)
            cur_img_id = img_id
            img_preds = dict()
            img_preds[task_id] = {'pred_mask': pred_mask}

    if len(img_preds) > 0:
        evaluator.eval_single_img(img_id=int(cur_img_id),
                                  im_pred_dict=img_preds,
                                  pred_mask_tag='pred_mask',
                                  verbose=verbose)

    evaluator.analyze_stats(mask_box=['mask'],
                            exp_name_in_summary=exp_name_in_summary,
                            save_result_to_path=save_result_to_path)

    return