torchvision.models
torchvision不仅提供了常用图片数据集,还提供了训练好的模型,可以加载之后,直接使用,或者在进行迁移学习 torchvision.models模块的 子模块中包含以下模型结构。
- AlexNet
- VGG
- ResNet
- SqueezeNet
- DenseNet
torchvision.datasets
这其中所有的数据集都是torch.utils.data.Dataset
的子类,它们都具有__getitem__
和__len__
实现的方法。因此,它们都可以传递给torch.utils.data.DataLoader
,它使用torch.multiprocessing
并行加载多个样本。
torchvision.transforms
提供了一般的图像转换操作类,用作数据处理和数据增强
其中都是常见的图像转换,可以通过Compose
将他们链接在一起
from torchvision import transforms as transforms
transform = transforms.Compose([
transforms.RandomCrop(32, padding=4), #先四周填充0,在把图像随机裁剪成32*32
transforms.RandomHorizontalFlip(), #图像一半的概率翻转,一半的概率不翻转
transforms.RandomRotation((-45,45)), #随机旋转
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.229, 0.224, 0.225)), #R,G,B每层的归一化用到的均值和方差
])
此外还有torchvision.transforms.functional
模块,可对转换进行细粒度控制,这对于要构建一个更复杂的 transformation pipeline(例如在segmentation tasks分段任务中)很有帮助
torchvision.transforms.Normalize(mean, std, inplace=False)
用均值和标准差对张量图像进行归一化。
给定n
个通道的均值: (M1,...,Mn)
和标准差: (S1,..,Sn)
, 这个转换将归一化输入torch.*Tensor
的每个通道。例如: input[channel] = (input[channel] - mean[channel]) / std[channel]
Note: 这种变换的作用不适当,即它不会改变输入张量
torchvision.utils
torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)
创建图像网格,即将若干幅图像拼成一幅图像
-
tensor
(Tensor or list) – 四维 mini-batch Tensor 尺寸为 (B x C x H x W) 或一个所有图像大小相同的list -
nrow
(python:int, optional) – 网格中每行展示图像的数量。最后一行size为 (B / nrow, nrow) -
padding
(python:int, optional) – 填充量(多幅图像间距) -
normalize
(bool, optional) – 若为True
, 根据由range范围指定的最大最小值,将图像归一化到(0, 1) -
range
(tuple, optional) – tuple (min, max) 用于归一化图像. min和max默认通过tensor计算 -
scale_each
(bool, optional) – 若为True
, 分别缩放该批图像中的每个图像,而不是缩放所有图像的(min, max) -
pad_value
(python:float, optional) – 填充值