对不起,我犯了一个错误。在修改代码时,我错误地将变量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值。谢谢!

Python代码修复:未使用局部变量 'fp_pixels_sum' 的值

原文地址: https://www.cveoy.top/t/topic/KNJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录