TorchVision数据集子包是一个方便的工具,用于访问著名的公共图像和视频数据集。你可以使用这些工具来快速开始训练新的计算机视觉模型。
TorchVision数据集实例
要开始使用,你所要做的就是导入其中一个Dataset 类。然后,将其实例化并访问其中一个带索引的样本。
from torchvision import datasets
dataset = datasets.MNIST(root="./", download=True)
img, label = dataset[10]
img.size
# Expected result
# (28, 28)
你会得到一个带有Pillow图像和一个整数标签的元组回来。

TorchVision数据集实现了__len__() 和__getitem__() 方法,这意味着除了通过索引获得特定元素外,你还可以通过len() 函数获得样本的数量。
len(dataset)
# Expected result
# 60000
此外。 [DataLoader](/pytorch-dataloader/)类可以使用TorchVision数据集对象来创建用于训练的自动批处理。
由于它们大多返回Pillow图像,你确实需要传入一个转换,将图像转换为张量。
import torch
from torchvision import transforms
dataset = datasets.MNIST(
root="./",
transform=transforms.ToTensor()
)
data_loader = torch.utils.data.DataLoader(dataset, batch_size=4)
x, y = next(iter(data_loader))
x.shape
# Expected result
# torch.Size([4, 1, 28, 28])
API
TorchVision数据集类的接口有些不一致,因为每个数据集都有一套稍微不同的约束。例如,许多数据集返回(PIL.Image, int) 图元,但这显然对视频不起作用(TorchVision将它们打包成张量)。
但一般来说,构造函数需要以下参数。
root:在哪里下载原始数据集,或者数据集类应该在哪里找到已经下载过的原始数据集。split:使用哪一个暂存器。可以是train、test、val、extra......最好看一下你要使用的数据集的文档。download:一个布尔值,表示TorchVision是否应该为你下载原始数据。尽管对于像ImageNet这样的数据集来说,将这个参数设置为 "true "会引发一个错误。下面会有更多关于这个的内容。transform: 一个TorchVision转换,应用于输入图像或视频。
关于ImageNet的一句话
ImageNet已不再适用于小公司或独立研究人员。这是一个真正的耻辱,因为模型动物园里的预训练分类器几乎都是在ImageNet上训练的。
然而,可以从Academic Torrents下载大部分的ImageNet数据集。我不能赞同这个策略,因为我不知道它是否被允许。
如果你确实想从ImageNet 2012下载训练和验证集,你可以遵循以下步骤。
- 启动一个亚马逊Linux EC2实例,至少有200GB的存储空间。整个过程在c5.xlarge实例上需要大约2小时。
2.2. 安装aria2c 命令行工具
3.3. 下载tar文件。
# Download the validation set
aria2c https://academictorrents.com/download/dfa9ab2528ce76b907047aa8cf8fc792852facb9.torrent
# Download the train set
aria2c https://academictorrents.com/download/a306397ccf9c2ead27155983c254227c0fd938e2.torrent
4.确保文件与MD5哈希值相符(由TorchVision团队帮助提供)。
# Check the validation file
md5sum ILSVRC2012_img_val.tar
# Expected result
# 29b22e2961454d5413ddabcf34fc5622
# Check the train file
md5sum ILSVRC2012_img_train.tar
# Expected result
# 1d675b47d978889d74fa0da5fadfb00e
5.将文件上传到S3--托管文件的费用为每月3美元多一点。
6.6. 终止该实例。
7.给[Academic Torrents团队]发送一些比特币表示感谢。
总结
这就是你开始使用TorchVision数据集所需要知道的一切。对于生产型机器学习管道,你可能想实现你自己的数据集类,但TorchVision开箱即用的数据集是一个快速实验的好方法。