为了方便深度学习模型的研究,网络有很多公开的数据集可供下载;对于特殊任务的深度学习任务,如果需要,则可以自行收集 & 标注数据集;根据数据集的大小,可以分为:小型数据集、重型数据集 & 大型数据集
1、小型数据集 (MNIST、CIFAR – 图像分类)
小型数据集在 100MB以内,一般数据量在
对于小型数据集,代表的有 MNIST、CIFAR数据集,这两个数据集都是分类任务的数据集;
- MNIST是手写数字数据集,所有的图像都是 28x28 大小的黑白图像,分为训练集 & 测试集两个数据集,训练集有 60000张图像,测试集有10000张图像,图像的内容为 0~9 的手写数字;
- CIFAR数据集则是物体的分类数据集,包含两个不同的子数据集,分别是 CIFAR-10 & CIFAR-100,这两个数据集均有60000张 32x32 大小的图像,其中每个数据集被分为训练集 & 测试集两类,训练集有50000张图像,测试集有10000张图像;
2、中型数据集 (Pascal VOC – 目标检测)
中型数据集在 100MB - k GB,数据量在 张左右;
其中的代表是 Pascal VOC 数据集,这个数据集是目标检测的数据集,一般常用的为 VOC07 & VOC12 两个数据集,分别代表的是 Pascal VOC 目标检测竞赛在 2007年 和 2012年 使用的目标检测数据集;
- VOC07 数据集比较小,训练集、验证集、测试集加起来一共有 9963张图片,这些图片包含 24640个物体,所有物体被分为 20类;
- VOC12 数据集相对比较大,一共有 11530张图片,这些图片总共包含 27450个物体,同样,这些物体也被分为 20类;
3、大型数据集 (ImgNet – 图像分类、COCO – 目标检测&图像分割)
大型数据集在 k GB以上,数据量则在
大型数据集的代表是 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的索引