Python代码实现:基于scikit-image和NumPy计算PRO-AUC指标
Python代码实现:基于scikit-image和NumPy计算PRO-AUC指标
本文提供了一个Python代码示例,用于计算图像分割任务中的PRO-AUC(Per-Region Overlap - Area Under the Curve)指标。该指标可以有效评估分割模型在不同阈值下的性能。
代码pythonimport numpy as npfrom skimage import measurefrom sklearn.metrics import auc
def cal_pro_score(masks, amaps, max_step=200, expect_fpr=0.3): ''' 计算PRO-AUC分数。
参数: masks: 真实掩码,形状为(N, H, W),N为样本数量,H和W为图像高度和宽度。 amaps: 预测的激活映射,形状与masks相同。 max_step: 阈值范围内的步数。 expect_fpr: 期望的假阳性率。
返回值: PRO-AUC分数。 ''' binary_amaps = np.zeros_like(amaps, dtype=bool) min_th, max_th = amaps.min(), amaps.max() delta = (max_th - min_th) / max_step pros, fprs, ths = [], [], [] tp_pixels_sum = 0 # 记录总的tp_pixels总和 fp_pixels_sum = 0 # 记录总的fp_pixels总和 for th in np.arange(min_th, max_th, delta): binary_amaps[amaps <= th], binary_amaps[amaps > th] = 0, 1 pro = [] tp_pixels_sum_th = 0 # 记录当前阈值下的tp_pixels总和 fp_pixels_sum_th = 0 # 记录当前阈值下的fp_pixels总和 for binary_amap, mask in zip(binary_amaps, masks): for region in measure.regionprops(measure.label(mask)): tp_pixels = binary_amap[region.coords[:, 0], region.coords[:, 1]].sum() tp_pixels_sum += tp_pixels tp_pixels_sum_th += tp_pixels # 累加tp_pixels到总和 pro.append(tp_pixels / region.area) inverse_masks = 1 - masks fp_pixels = np.logical_and(inverse_masks, binary_amaps).sum() fp_pixels_sum += fp_pixels fp_pixels_sum_th += fp_pixels # 累加fp_pixels到总和 fpr = fp_pixels_sum_th / inverse_masks.sum() pro_mean = np.array(pro).mean() pros.append(pro_mean) fprs.append(fpr) ths.append(th) pros, fprs, ths = np.array(pros), np.array(fprs), np.array(ths) idxes = fprs < expect_fpr fprs = fprs[idxes] fprs = (fprs - fprs.min()) / (fprs.max() - fprs.min()) pro_auc = auc(fprs, pros[idxes]) print('fpr:', fprs) print('TP:', tp_pixels_sum) print('FP:', fp_pixels_sum) return pro_a
原文地址: https://www.cveoy.top/t/topic/HfM 著作权归作者所有。请勿转载和采集!