d2l图像分割数据集制作

本文详细介绍了如何处理VOC数据集的图像分割任务,包括从RGB通道转换为类别索引,使用torchvision库进行图像和标签的读取,以及实现随机裁剪的数据增强方法。此外,还展示了如何构建VOC数据集的自定义PyTorch数据集类,用于训练和测试过程。

本文主要讲述图像分割Segmentation数据集的制作

目录

加载:

实现从RGB三个通道到类别索引单int值:

图像增广

集成用法


加载:

  在Segmentation里面有三个txt,里面写的是JPEG文件夹里面的图片的名称
  将图片转为RGB,然后提取images的图片名,读取对应文件中的图片作为features
  这里注意,对于语义分割,其label是对每个像素进行标注,所以标注可以为一张与features等大小的图片,是png文件是为了防止jpg图片格式会压缩:

def read_voc_images(voc_dir, is_train=True):
    """读取所有VOC图像并标注"""
    txt_fname = os.path.join(voc_dir, 'ImageSets', 'Segmentation',
                            'train.txt' if is_train else 'val.txt')
    mode = torchvision.io.image.ImageReadMode.RGB
    with open(txt_fname, 'r') as f:
        images = f.read().split()
    features, labels = [], []
    for i, fname in enumerate(images):
        features.append(torchvision.io.read_image(os.path.join(
            voc_dir, 'JPEGImages', f'{fname}.jpg')))
        labels.append(torchvision.io.read_image(os.path.join(
            voc_dir, 'SegmentationClass' ,f'{fname}.png'), mode))
    return features, labels
voc_dir = '/CV/xhr/VOCdevkit/VOC2012'

train_features, train_labels = read_voc_images(voc_dir, True)
len(train_features), train_features[1].shape, train_labels[1].shape

'''
(1464, torch.Size([3, 375, 500]), torch.Size([3, 375, 500]))
'''

由此可见,该函数得到的是list,里面的每个元素对应的是每个图片的tensor(c,w,h)

显示一下:

n = 5
imgs = train_features[0:n] + train_labels[0:n]
imgs = [img.permute(1,2,0) for img in imgs]
d2l.show_images(imgs, 2, n);

对于Segmentation中的标记,为对各个像素的标记,每个类别对应不同的颜色,具体颜色与label标签对应见下:

VOC_COLORMAP = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0],
                [0, 0, 128], [128, 0, 128], [0, 128, 128], [128, 128, 128],
                [64, 0, 0], [192, 0, 0], [64, 128, 0], [192, 128, 0],
                [64, 0, 128], [192, 0, 128], [64, 128, 128], [192, 128, 128],
                [0, 64, 0], [128, 64, 0], [0, 192, 0], [128, 192, 0],
                [0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值