np.unique的return_counts=True计数异常,掩码含0、1、2仍无法保存如何解决?
问题修复方案
根因说明
np.unique的return_counts参数本身不存在计数错误,你遇到的现象是由以下原因导致的:
- 你的判定逻辑统计的是所有非0标签的总占比,哪怕掩码中存在标签2,只要标签1+标签2的像素总占比≤1%,就会命中else分支输出
nope,你日志中编号26的样本就属于这种情况 - 额外注意:你当前代码中
to_categorical的num_classes参数设为2,和实际存在3类标签(0、1、2)的场景不符,就算通过保存判定也会出现标签截断错误
修复步骤
- 首先添加打印确认实际占比,验证计数是否符合预期,在
val, counts = np.unique(temp_mask, return_counts=True)后添加如下代码:
print(f"标签值:{val},对应计数:{counts},非0总占比:{1 - (counts[0]/counts.sum()):.4%}")
- 根据你的实际需求调整判定逻辑:
- 若需求为只要存在非0标签就保存,将判定条件改为:
if len(val) > 1:- 若需求为只要存在标签2就保存,将判定条件改为:
if 2 in val:- 若只是阈值设置过高,将原判定中的0.01调整为更小的数值(比如0.001对应0.1%)即可
- 修正分类数参数,将
to_categorical行改为:
temp_mask= to_categorical(temp_mask, num_classes=3)
- 额外检查:你代码中保存的
temp_combined_images变量在贴出的代码片段中没有定义,需要确认该变量已正确赋值,避免保存的图像文件内容错误
内容的提问来源于stack exchange,提问作者Sehreen Zehra
相关产品推荐
相关产品推荐

