李沐深度学习11-9语义分割小节中voc_colormap2label()和voc_label_indices()函数的理解

def voc_colormap2label():
    """构建从RGB到VOC类别索引的映射"""
    colormap2label = torch.zeros(256 ** 3, dtype=torch.long)
    for i, colormap in enumerate(VOC_COLORMAP):
        colormap2label[
            (colormap[0] * 256 + colormap[1]) * 256 + colormap[2]] = i
    return colormap2label


def voc_label_indices(colormap, colormap2label):
    """将VOC标签中的RGB值映射到它们的类别索引"""
    # 将[C, H, W]变为[H, W, C]
    colormap = colormap.permute(1, 2, 0).numpy().astype('int32')
    # 计算每个像素对应的整数值,idx形状为[H, W]
    idx = ((colormap[:, :, 0] * 256 + colormap[:, :, 1]) * 256
           + colormap[:, :, 2])

    return colormap2label[idx]

1 voc_colormap2label()函数

返回一个一维tensor,构建从RGB到具体分类的映射。该tensor包含256^3个元素,其中只有20个元素分别为1-20,其余均为0。这是由于每个像素的值为(R, G, B)元组,无法与类别直接对应,所以先把一个像素值(R, G, B)映射到一个整数,然后再用这个整数去对应像素类别,为了避免不同(R, G, B)映射到同一个整数,使用f:(R * 256 + G)*256 + B 来映射,像素颜色只有256*256*256种,所以定义了256^3大小的一维tensor容纳类别索引。

变量构成:colormap是包含三个元素的列表,为一个像素的RGB值

2 voc_label_indices()函数

作用:获得投入图片各像素的对应类别。给一张[C, H, W]大小的图片A和单像素(R, G, B)值对应类别关系的一维tensor(由前述函数获取),返回一个大小为[H, W]的二维tesor B,Bij取值范围0-21,表示Aij像素(i, j对应高宽)的类别

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值