为了方便深度学习模型的研究,网络有很多公开的数据集可供下载;对于特殊任务的深度学习任务,如果需要,则可以自行收集 & 标注数据集;根据数据集的大小,可以分为:小型数据集、重型数据集 & 大型数据集

1、小型数据集 (MNIST、CIFAR – 图像分类)

小型数据集在 100MB以内,一般数据量在 pytorch数据集txt pytorch数据集有哪些_dataset

对于小型数据集,代表的有 MNIST、CIFAR数据集,这两个数据集都是分类任务的数据集;

  • MNIST是手写数字数据集,所有的图像都是 28x28 大小的黑白图像,分为训练集 & 测试集两个数据集,训练集有 60000张图像,测试集有10000张图像,图像的内容为 0~9 的手写数字;
  • CIFAR数据集则是物体的分类数据集,包含两个不同的子数据集,分别是 CIFAR-10 & CIFAR-100,这两个数据集均有60000张 32x32 大小的图像,其中每个数据集被分为训练集 & 测试集两类,训练集有50000张图像,测试集有10000张图像;



2、中型数据集 (Pascal VOC – 目标检测)

中型数据集在 100MB - k GB,数据量在 pytorch数据集txt pytorch数据集有哪些_Pytorch_02 张左右;
其中的代表是 Pascal VOC 数据集,这个数据集是目标检测的数据集,一般常用的为 VOC07 & VOC12 两个数据集,分别代表的是 Pascal VOC 目标检测竞赛在 2007年 和 2012年 使用的目标检测数据集;

  • VOC07 数据集比较小,训练集、验证集、测试集加起来一共有 9963张图片,这些图片包含 24640个物体,所有物体被分为 20类;
  • VOC12 数据集相对比较大,一共有 11530张图片,这些图片总共包含 27450个物体,同样,这些物体也被分为 20类;


3、大型数据集 (ImgNet – 图像分类、COCO – 目标检测&图像分割)

大型数据集在 k GB以上,数据量则在 pytorch数据集txt pytorch数据集有哪些_Pytorch_03

大型数据集的代表是 ImgNet & COCO:

  • 对于 ImageNet,比较常用的是其分类的数据集,在 2012年 的比赛数据集来说,一共有 1000类图片,120万张图片作为训练集,12万 张图片作为验证集 & 测试集;
  • 对于 COCO,比较常用的是 其用于目标检测 & 图像分割的数据集,在 COCO2019比赛中,包含训练集、验证集 & 测试集一共20W 张图片,这些图像一共涵盖了 50W 个物体,这些物体被分成 80类;


代码

from torchvision import datasets as dset


# MNIST
train_dataset = dset.MNIST(root, train=True, transform=None, target_transform=None, download=False)

# CIFAR10
train_dataset = dset.CIFAR10(root, train=True, transform=None, target_transform=None, download=False)

# VOCSegmentation
train_dataset = dset.VOCSegmentation(root, year='2012', image_set='train', download=True, 
									 target_transform=None, transforms=None)

# ImageNet
train_dataset = dset.ImageNet(root, split='train', download=True, **kwargs)


# CocoDetection
train_dataset = dset.CocoDetection( root = 'dir where images are',annFile = 'json annotation file',
								    transform=None, target_transform=None)
# CocoCaptions 
cap = dset.CocoCaptions(root = 'dir where images are',annFile = 'json annotation file',
                        transform=transforms.ToTensor())


# 数据加载
train_loader  = dataloader.DataLoader( train_dataset, batch_size=batch_size, shuffle=True )

参数说明:

参数				 				描   述
  root				|	下载保存数据集的根目录地址;
  train				|	决定输出的是训练集还是测试集,True = 训练集, False = 测试集 ;
  transform			|	决定了对输入图像是否变换;
  transforms		|	该参数与transform不同,此参数意味着要传入一个变换,该变换会输入图像 & 预测目标
						并且对这两部分同时做变换,输出变换后的图像和变换后的预测目标;
						
  target_transform	|	对预测目标是否变换;
  download			|	决定是否下载数据集,True = 从互联网上下载数据集,并把数据集放在root目录下
						如果数据集之前下载过,将处理过的数据(minist.py中有相关函数)放在processed文件夹下;
						
  image_set			|	可以使用 train、trainval、val 三个值,分别代表使用训练数据集、验证数据集 & 测试数据集;
  split				|	传入的参数来制定具体要使用的是训练数据集还是测试数据集;
  annFile			|	输入的是包括目标选框标注的 JSON 文件的路径;



Datasets 拥有以下API:
  • __getitem__
  • __len__

由于以上Datasets都是 torch.utils.data.Dataset的子类,所以,他们也可以通过torch.utils.data.DataLoader 使用多线程(python的多进程)

举例说明:

torch.utils.data.DataLoader(coco_cap, batch_size=args.batchSize, shuffle=True, num_workers=args.nThreads)

在构造函数中,不同的数据集直接的构造函数会有些许不同,但是他们共同拥有 keyword 参数。 In the constructor, each dataset has a slightly different API as needed, but they all take the keyword args: - transform: 一个函数,原始图片作为输入,返回一个转换后的图片。(详情请看下面关于torchvision-tranform的部分)

  • target_transform - 一个函数,输入为target,输出对其的转换。
    例子,输入的是图片标注的string,输出为word的索引