Pytorch_torchvision

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) – 填充值

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus