code: def pro(masks, scores):
      """
      https://github.com/YoungGod/DFR/blob/a942f344570db91bc7feefc6da31825cf15ba3f9/DFR-source/anoseg_dfr.py#L447
      """
      # per region overlap
      max_step = 4000
      max_th = scores.max()
      min_th = scores.min()
      delta = (max_th - min_th) / max_step
  
      pros_mean = []
      pros_std = []
      threds = []
      fprs = []
      binary_score_maps = np.zeros_like(scores, dtype=np.bool)
      for step in range(max_step):
          thred = max_th - step * delta
          # segmentation
          binary_score_maps[scores <= thred] = 0
          binary_score_maps[scores > thred] = 1
  
          pro = []
          for i in range(len(binary_score_maps)):
              label_map = measure.label(masks[i], connectivity=2)
              props = measure.regionprops(
                  label_map, binary_score_maps[i]
              )
              for prop in props:
                  pro.append(prop.intensity_image.sum() / prop.area)
          pros_mean.append(np.array(pro).mean())
          pros_std.append(np.array(pro).std())
          # fpr
          masks_neg = ~masks
          fpr = (
              np.logical_and(masks_neg, binary_score_maps).sum()
              / masks_neg.sum()
          )
          fprs.append(fpr)
          threds.append(thred)
  
      # as array
      threds = np.array(threds)
      pros_mean = np.array(pros_mean)
      pros_std = np.array(pros_std)
      fprs = np.array(fprs)
  
      expect_fpr = 0.3
      # default 30% fpr vs pro, pro_auc
      idx = fprs <= expect_fpr  # # rescale fpr [0, 0.3] -> [0, 1]
      fprs_selected = fprs[idx]
      fprs_selected = rescale(fprs_selected)
      pros_mean_selected = rescale(pros_mean[idx])  # need scale
      pro_auc_score = auc(fprs_selected, pros_mean_selected)
      # print("pro auc ({}% FPR):".format(int(expect_fpr * 100)), pro_auc_score)
      return pro_auc_score
  
imports: import os
  import argparse
  import numpy
  import matplotlib
  import matplotlib.pyplot
  from sklearn.metrics import roc_curve, auc
  from tqdm import tqdm
  from skimage import measure, morphology
  from skimage.segmentation import mark_boundaries
  import paddle
label_desc: Use image node_id 21 for calling a global function with example usage: pro(masks, scores) and returns: pro_auc_score