本文主要讲述图像分割Segmentation数据集的制作
目录
加载:
在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

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

被折叠的 条评论
为什么被折叠?



