PASCAL VOC 数据集简介

数据集在语义分割上SOTA模型

1. 简介

1.1 简介

该挑战赛的竞赛项目主要包括 图像分类与检测(Classification/Detection Competitions)、图像分割(Segmentation Competition)、人体动作分类(Action Classification Competition)、人体部位检测(Person Layout Taster Competition)等四项主要的视觉挑战赛。

  1. VOC2007

    包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。 VOC2007的test数据label已经公布, 之后的没有公布(只有图片,没有label)。

  2. VOC2012:

    VOC2012数据集是VOC2007数据集的升级版,一共有11530张图片。

    对于检测任务,VOC2012的trainval/test包含08-11年的所有对应图片。 trainval有11540张图片共27450个物体。

    对于分割任务, VOC2012的trainval包含07-11年的所有对应图片, test只包含08-11。trainval有2913张图片共6929个物体。

数据集分为20类,包括背景为21类,分别如下:
人:人
动物:鸟、猫、牛、狗、马、羊
车辆:飞机、自行车、船、巴士、汽车、摩托车、火车
室内:瓶、椅子、餐桌、盆栽植物、沙发、电视/监视器

1.2 格式介绍

.
├── Annotations 进行 detection 任务时的标签文件,xml 形式,文件名与图片名一一对应
├── ImageSets 包含三个子文件夹 Layout、Main、Segmentation,其中 Main 存放的是分类和检测的数据集分割文件
├── JPEGImages 存放 .jpg 格式的图片文件
├── SegmentationClass 存放按照 class 分割的图片
└── SegmentationObject 存放按照 object 分割的图片├── Main
│   ├── train.txt 写着用于训练的图片名称, 共 2501 个
│   ├── val.txt 写着用于验证的图片名称,共 2510 个
│   ├── trainval.txt train与val的合集。共 5011 个
│   ├── test.txt 写着用于测试的图片名称,共 4952 个

2. 下载

Pascal VOC Dataset Mirror (pjreddie.com)

下载的内容包括训练验证集、测试集、开发工具和文档说明

3. 制作dataloader

import osimport numpy as np
import torch
from torch.utils.data import DataLoader, Dataset
from PIL import Image
from torchvision import transforms
from torchvision.transforms import functional as Ft
import matplotlib.pyplot as plt
import albumentations as A# 接下来,对标签图片进行处理,将其转换为对应的标签矩阵。先列出标签中每个RGB的值及其对应类别,一共21类:
classes = ['background','aeroplane','bicycle','bird','boat','bottle','bus','car','cat','chair','cow','diningtable','dog','horse','motorbike','person','potted plant','sheep','sofa','train','tv/monitor']# RGB color for each class
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, 64, 128]]
colormap = np.asarray(colormap)
cm2lbl = np.zeros(256 ** 3)# 建立一个索引,将标签图片中每个像素的RGB值一对一映射到对应的类别索引:
for i, cm in enumerate(colormap):cm2lbl[(cm[0] * 256 + cm[1]) * 256 + cm[2]] = idef image2label(im):data = np.array(im, dtype='int32')idx = (data[:, :, 0] * 256 + data[:, :, 1]) * 256 + data[:, :, 2]return np.array(cm2lbl[idx], dtype='int64')image_transform = A.Compose([A.PadIfNeeded(min_height=512, min_width=512, border_mode=0, p=1, mask_value=255, value=(255, 255, 255)),A.CenterCrop(height=512, width=512, p=1),A.HorizontalFlip(p=0.5)# , A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225))
])def voc_transform(image, target):result = image_transform(image=np.array(image), mask=np.array(target))image = result["image"].transpose(2, 0, 1) / 255.0target = result["mask"]return image, targetclass VOCSegmentation(Dataset):"""最后,通过torch.utls.data.Dataset自定义数据集类,通过._getitem__函数,访问数据集中索引为idx 的输入图像及其对应的标签矩阵。由于数据集中有些图像的尺寸可能小于随机裁剪所指定的输出尺寸,这些样本需要通过自定义的fiter 函数所移除。此外,还对输入图像的RGB三个通道的值分别做标准化。"""def __init__(self, voc_root, shape=(520, 520), year="2012", transforms=None, txt_name: str = "train.txt"):""":param voc_root: 放置数据集的位置:param year: 年份,我这里只放置了2012年的:param transforms: 是否对图片进行裁剪,transforms =None不进行裁剪:param txt_name:"""self.shape = shapesuper(VOCSegmentation, self).__init__()assert year in ["2007", "2012"], "year must be in ['2007', '2012']"root = os.path.join(voc_root, "VOCdevkit", f"VOC{year}")# 拼接字符串assert os.path.exists(root), "path '{}' does not exist.".format(root)image_dir = os.path.join(root, 'JPEGImages')# 掩膜的路径位置,就是分割好的图片mask_dir = os.path.join(root, 'SegmentationClass')#txt_path = os.path.join(root, "ImageSets", "Segmentation", txt_name)assert os.path.exists(txt_path), "file '{}' does not exist.".format(txt_path)with open(os.path.join(txt_path), "r") as f:file_names = [x.strip() for x in f.readlines() if len(x.strip()) > 0]# 根据Segmentation 文件夹下所以提供的train.txt,来进行图片的加载self.images = [os.path.join(image_dir, x + ".jpg") for x in file_names]# 掩膜图片位置self.masks = [os.path.join(mask_dir, x + ".png") for x in file_names]assert (len(self.images) == len(self.masks))self.transforms = transformsdef __getitem__(self, index):"""Args:index (int): 索引值Returns:返回元祖信息,一个是原始图片信息,一个是分割好的图片信息tuple: (image, target) where target is the image segmentation."""img = Image.open(self.images[index]).convert('RGB')target = Image.open(self.masks[index]).convert('P')img, target = voc_transform(img, target)return img, targetdef __len__(self):return len(self.images)def get_dataloader(mode=True, batch_size=4, shape=(512, 512)):"""获取数据集加载:param mode::return:"""if mode:# 2. 实例化,准备dataloaderdataset = VOCSegmentation(voc_root=r"E:\note\cv\data\VOC_Train",shape=shape,)dataloader = DataLoader(dataset=dataset, batch_size=batch_size, shuffle=True)else:dataset = VOCSegmentation(voc_root=r"E:\note\cv\data\VOC_Train",shape=shape,txt_name="val.txt",)dataloader = DataLoader(dataset=dataset, batch_size=batch_size, shuffle=True)return dataloadercm = np.array(colormap).astype('uint8')def show_image(tensor):plt.figure()image = tensor.numpy().transpose(1, 2, 0)plt.imshow(image)plt.show()def show_label(label):print(label.shape)plt.figure()labels = cm[label]plt.imshow(labels)plt.show()def show_label_2(label):plt.figure()# print(np.unique(label.numpy()))label = label.numpy().astype('uint8')label[label == 255] = 0label = colormap[label]print(label.shape)plt.imshow(label)plt.show()if __name__ == '__main__':train_dataloader = get_dataloader(True, batch_size=2)for images, labels in train_dataloader:show_image(images[0])show_label_2(labels[0])break

pytorch炼金术-DataSet-PASCAL VOC 简介相关推荐

  1. 目标检测数据集PASCAL VOC简介

    简介 PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛, PASCAL全称:Pattern Analysis, Stat ...

  2. 目标检测:PASCAL VOC 数据集简介

    一.简介 PASCAL VOC 挑战赛主要有 Object Classification .Object Detection.Object Segmentation.Human Layout.Acti ...

  3. Dataset之Pascal:Pascal竞赛及其Pascal VOC(VOC 2012、VOC 2007) 数据集的简介、下载、使用方法详细攻略

    Dataset之Pascal VOC:Pascal VOC(VOC 2012.VOC 2007) 数据集的简介.下载.使用方法详细攻略 目录 Pascal 竞赛 1.PASCAL VOC竞赛任务 2. ...

  4. 图像处理基本库的学习笔记5--公共数据集,PASCAL VOC数据集,NYUD V2数据集的简介与提取,COCO2017,医学影像数据集汇总

    目录 公共数据集 计算机视觉标准数据集整理-PASCAL VOC数据集 数据集文件结构 Annotation JPEGImages SegmentationClass SegmentationObje ...

  5. pytorch 图像分割的交并比_Segmentation101系列-最简单的卷积网络语义分割(1)-PASCAL VOC图像分割...

    作者:陈洪瀚 /洪瀚笔记知乎专栏 摘要:介绍了使用PyTorch和torchvision加载训练好的全卷积网络FCN或DeepLab模型,并对PASCAL VOC图像进行分割并显示结果. 网址: gi ...

  6. PASCAL VOC DATASET

    PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge.该挑战的主要目的是识别真实场景中一些类别的物体.在该挑战中,这 ...

  7. 【SSD论文解读】 论文中用到的数据集:Pascal VOC、MS COCO、ImageNet

    [SSD论文解读] 论文中用到的数据集 一.数据集介绍 1.Pascal VOC 2.MS COCO 3.ILSVRC 二.数据集处理函数 1.专门的datasets类 2.论文中的数据集处理函数 三 ...

  8. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——④转换成PASCAL VOC格式数据集

    文章目录 关于PASCAL VOC数据集 目录结构 ①创建VOC数据集的几个相关目录 XML文件的形式 ②读取dcm文件与xml文件的配对关系 ③创建VOC格式数据集 ④创建训练.验证集 本文所用代码 ...

  9. 建立自己的voc数据集_一次将自己的数据集制作成PASCAL VOC格式的惨痛经历

    因为准备训练keras-yolo3,开源代码上给出了voc_annotation.py文件,只要将自己的数据格式处理成PASCAL VOC格式,那么运行voc_annotation.py就可以将自己的 ...

最新文章

  1. 北美欧洲顶级大咖齐聚,在这里读懂 AIoT 未来!
  2. spring secrity(二)
  3. svd协同过滤java实现_利用 SVD 实现协同过滤推荐算法
  4. 智能家居(草纲)v0.1
  5. [react] 请说说react中Portal是什么?
  6. Redis应用场景汇总
  7. hadop 查看DataNode的资源使用情况信息(web接口)
  8. ArcGIS:ArcToolBox工具使用——提取DEM/DSM中的高程点
  9. 国内外主流BI工具介绍和点评
  10. 如果Mac在播放音乐时遇到问题,没有声音或无法调整音量,该怎么办呢?
  11. 用word怎么做c语言框图作业,在Word中绘制简单C语言流程图精.docx
  12. 餐饮点餐外卖小程序源码(外卖订餐系统源码)
  13. Blender 合成节点 中英文对照
  14. php 修改文件的权限_授予PHP写入文件和文件夹的权限
  15. 2021水利水电安全员考试每日一练单选题库
  16. java二元一次方程求极值_二元一次方程的最值怎么求,最大值和最 二元一次方程...
  17. 外文搜索数据库小记(工科)
  18. 使用NOKIA MMS LIBRARY发送中国移动彩信
  19. 说透APP稳定性测试
  20. Caffeine使用篇 - Eviction

热门文章

  1. 因果效应估计:用数据和模型指导决策
  2. C语言计算圆周率到小数点后十七位
  3. alipay支付宝支付的python实现(flask)
  4. 产品经理基础--02需求收集需求管理
  5. 如何用html制作明信片,制作书写明信片的动画效果
  6. 机器人仿真 软件 V-REP 入门教程 (一)简介
  7. reg52.h中文详细注解
  8. ArcGIS Pro 3D模型作为点符号无贴图
  9. 如何在Windows 10上查看哪些应用正在使用您的麦克风
  10. 腾讯信鸽web端测试