Python代码修复:未使用局部变量 'fp_pixels_sum' 的值
对不起,我犯了一个错误。在修改代码时,我错误地将变量fp_pixels_sum重新赋值为当前阈值下的fp_pixels总和,导致未正确使用局部变量的值。以下是修复了该错误的代码:
import numpy as np
from skimage import measure
from sklearn.metrics import auc
def cal_pro_score(masks, amaps, max_step=200, expect_fpr=0.3):
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 = [], [], []
for th in np.arange(min_th, max_th, delta):
binary_amaps[amaps <= th], binary_amaps[amaps > th] = 0, 1
pro = []
tp_pixels_sum = 0 # 记录当前阈值下的tp_pixels总和
fp_pixels_sum = 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到总和
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到总和
fpr = fp_pixels_sum / inverse_masks.sum()
pros.append(np.array(pro).mean())
fprs.append(fpr)
ths.append(th)
print('Threshold:', th)
print('TP pixels:', tp_pixels_sum)
print('FP pixels:', fp_pixels_sum)
print()
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])
return pro_auc
非常抱歉给您带来的困惑,希望这样修改后的代码可以正确输出fp和tp值。谢谢!
原文地址: https://www.cveoy.top/t/topic/KNJ 著作权归作者所有。请勿转载和采集!