弱监督语义分割WSSS中cam生成的npy文件是如何转换成ir label的

def _work(process_id, infer_dataset, args):
    visualize_intermediate_cam = False
    databin = infer_dataset[process_id]
    infer_data_loader = DataLoader(databin, shuffle=False, num_workers=0, pin_memory=False)

    for iter, pack in enumerate(infer_data_loader):
        img_name = voc12.dataloader.decode_int_filename(pack['name'][0])
        img = pack['img'][0].numpy()
        cam_dict = np.load(os.path.join(args.cam_out_dir, img_name + '.npy'), allow_pickle=True).item()

        cams = cam_dict['high_res']  # cams 是一个高分辨率的CAM
        keys = np.pad(cam_dict['keys'] + 1, (1, 0), mode='constant')
		# keys 是类别标识,经过从1开始的增量处理并在前面添加一个额外的0(填充)
		
        # 1. find confident fg & bg
        fg_conf_cam = np.pad(cams, ((1, 0), (0, 0), (0, 0)), mode='constant', constant_values=args.conf_fg_thres)
        # 使用numpy的 pad 函数在 cams 数组前添加一层,该层所有值为 args.conf_fg_thres(前景置信度阈值),用于处理前景置信度
        fg_conf_cam = np.argmax(fg_conf_cam, axis=0)  # 取argmax来确定每个像素最有可能的前景类别。
        pred = imutils.crf_inference_label(img, fg_conf_cam, n_labels=keys.shape[0])  # 使用CRF对前景置信度结果进行精细化
        fg_conf = keys[pred]
        
        bg_conf_cam = np.pad(cams, ((1, 0), (0, 0), (0, 0)), mode='constant', constant_values=args.conf_bg_thres)
        bg_conf_cam = np.argmax(bg_conf_cam, axis=0)  # 对背景重复相同的过程,但使用 args.conf_bg_thres 作为填充值
        pred = imutils.crf_inference_label(img, bg_conf_cam, n_labels=keys.shape[0])  # 使用CRF对背景置信度结果进行精细化
        bg_conf = keys[pred]

        # 2. combine confident fg & bg
        conf = fg_conf.copy()  # 创建一个 conf 数组作为最终输出,初始值为 fg_conf 的拷贝
        conf[fg_conf == 0] = 255  # 对于前景信任度为0的区域,设置 conf 为255(通常代表未知或边界)
        conf[bg_conf + fg_conf == 0] = 0  # 对于既不属于前景也不属于背景的区域,设置 conf 为0(背景)

        imageio.imwrite(os.path.join(args.ir_label_out_dir, img_name + '.png'), conf.astype(np.uint8))
		# 将 conf 数组保存为图像,命名规则为 {img_name}.png,保存在指定的输出目录

        if process_id == args.num_workers - 1 and iter % (len(databin) // 20) == 0:
            print("%d " % ((5 * iter + 1) // (len(databin) // 20)), end='')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Env1sage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值