PyTorch1.4.0-torchvision参考(一)

torchvision参考

简介

对于使用pytorch进行CV深度学习而言,torchvision工具包确实很香,可以很方便的进行模型搭建或迁移学习的工作,还支持对视频的操作。Pytorch官方文档做了相当多的工作,对于这一部分的实例演示也很丰富,如果你恰巧学会如何正常使用google云盘,并且能够正常打开colab的话,那还可以更香地体验notebook形式提供的所有用例。
PyTorch1.4.0-torchvision

常用安装方法

PyTorch 1.2及以上:
Anaconda方法:

conda install torchvision -c pytorch

pip方法:

pip install torchvision

详细模块

该软件包目前包括

  • 数据集:torchvision.datasets
    目前包括MNIST,COCO,ImageNet,Cityscapes等在内的24个流行的图像任务数据集。

  • 模型:torchvision.models
    1.Classification基于分类任务:
    AlexNet
    VGG
    ResNet
    SqueezeNet
    DenseNet
    Inception v3
    GoogLeNet
    ShuffleNet v2
    MobileNet v2
    ResNeXt
    Wide ResNet
    MNASNet

    以Inception v3网络为例,演示如何调用:

#实例化模型方法
import torchvision.models as models
inception = models.inception_v3()#1.默认随机初始化权重
inception = models.inception_v3(pretrained=True)#2.pretrained=True表示使用预训练的网络参数,会将其权重下载到缓存目录中
#使用预训练模型需要注意输入图像大小要求,3xHxW格式的RGB mini-batches,Inception,Inception期望的size =Nx3x299x299

#Imagenet数据集的标准化方式,归一化到[0,1]
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])

使用时可以参考官方给出的详细实例化方法:pytorch分类预训练模型实例化方法

2.Semantic Segmentation基于语义分割任务
FCN ResNet101
DeepLabV3 ResNet101

与图像分类模型一样,所提供的预训练模型都要对输入图像以相同的方式归一化。即图像必须满足先转化为[0,1]范围上的值,然后再使用mean = [0.485, 0.456, 0.406] and std = [0.229, 0.224, 0.225]
进行标准化 。这些模型已经在调整大小后的图片上训练过,图片最小尺寸为520。
预训练模型已在Paco VOC数据集中存在的20个类别的COCO train2017的子集中进行了训练。可以查看有关如何选择子集的更多信息 references/segmentation/coco_utils.py。预训练模型输出的类依次为:

['__background__', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus',
 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike',
 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']

模型调用方法:

#FCN ResNet101 图像分割模型的使用,使用ResNet-101作为backbone网络
model1 = torchvision.models.segmentation.fcn_resnet101(pretrained=False, progress=True, num_classes=21, aux_loss=None, **kwargs)
#DeepLabV3 图像分割模型的使用,使用ResNet-101作为backbone网络
model2 = torchvision.models.segmentation.deeplabv3_resnet50(pretrained=False, progress=True, num_classes=21, aux_loss=None, **kwargs)
#pretrained (bool)-False表示随机初始化权重
#progress (bool)-Ture表示展示模型加载进度框

3.Object Detection, Instance Segmentation and Person Keypoint Detection
目标检测,实例分割,人体姿态识别任务。

Faster R-CNN ResNet-50 FPN
Mask R-CNN ResNet-50 FPN

同上面的分类和分割一样,模型的期望输入为[0,1]范围内的值,Tensor[C, H, W],模型默认会在内部调整图像的大小为最小值800,可以通过给模型的构造器传递min_size选项来改变。
对于COCO数据集上的对象检测和实例分割,预训练的模型返回以下类别的预测:

COCO_INSTANCE_CATEGORY_NAMES = [
    '__background__', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
    'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'N/A', 'stop sign',
    'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
    'elephant', 'bear', 'zebra', 'giraffe', 'N/A', 'backpack', 'umbrella', 'N/A', 'N/A',
    'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
    'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
    'bottle', 'N/A', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
    'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
    'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'N/A', 'dining table',
    'N/A', 'N/A', 'toilet', 'N/A', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
    'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'N/A', 'book',
    'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'
]

对于COCO数据集上的人体姿态识别返回如下格式:

COCO_PERSON_KEYPOINT_NAMES = [
    'nose',
    'left_eye',
    'right_eye',
    'left_ear',
    'right_ear',
    'left_shoulder',
    'right_shoulder',
    'left_elbow',
    'right_elbow',
    'left_wrist',
    'right_wrist',
    'left_hip',
    'right_hip',
    'left_knee',
    'right_knee',
    'left_ankle',
    'right_ankle'
]

模型调用方法:

#使用ResNet-50-FPN为网络主干构造一个Faster R-CNN模型。
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=False, progress=True, num_classes=91, pretrained_backbone=True, **kwargs)
#输入格式为[C,H,W]的张量列表,每个图像的像素表示值同样在[0,1]范围内,不同图像可以有不同的尺寸

模型会根据其处于训练或评估模式而调整模式,训练期间,模型期望输入张量以及目标(字典列表)都包含boxes和labels。
模型在训练期间会返回一个Dict[Tensor],其中包含RPN和R-CNN的分类和回归损失。
在推断(Inference)期间,模型仅需要输入张量,并且为每个图片返回预测List[Dict[Tensor]],包含的字段有boxes,labels,scores.
Mask R-CNN,Keypoint R-CNN网络会略有不同,详细参看Mask R-CNN,Keypoint R-CNN

4.Video classification视频分类
这部分提供的模型是在Kinetics-400上预先训练的动作识别模型,包括:
ResNet 3D
ResNet Mixed Convolution
ResNet (2+1)D

调用方式如下:

# ResNet 3D
model1 = torchvision.models.video.r3d_18(pretrained=False, progress=True, **kwargs)
#MC3 Network
model2 = torchvision.models.video.mc3_18(pretrained=False, progress=True, **kwargs)
#R(2+1)D-18 network
model3 = torchvision.models.video.r2plus1d_18(pretrained=False, progress=True, **kwargs)
  • 图像变换torchvision.transforms 图像变换类
  • 实现特殊运算torchvision.ops
  • 图像输出torchvision.utils
#图像排列成网格状
torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)

参数:

  • tensor(Tensor 或 list)– 四维批(batch)Tensor或列表。如果是Tensor,其形状应是(B x C x H x W);如果是列表,元素应为相同大小的图片。
  • nrow(int, 可选)– 最终展示的图片网格中每行摆放的图片数量。网格的长宽应该是(B / nrow, nrow)。默认是8。
  • padding(int, 可选)– 扩展填充的像素宽度。默认是2。
  • normalize(bool, 可选)– 如果设置为True,通过减去最小像素值然后除以最大像素值,把图片移到(0,1)的范围内。
  • range(tuple, 可选)– 元组(min, max),min和max用于对图片进行标准化处理。默认的,min和max由输入的张量计算得到。
  • scale_each(bool, 可选)– 如果设置为True,将批中的每张图片按照各自的最值分别缩放,否则使用当前批中所有图片的最值(min, max)进行统一缩放。
  • pad_value(float, 可选)– 扩展填充的像素值。
#把指定的Tensor保存成图片文件
torchvision.utils.save_image(tensor, filename, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)

参数:

  • tensor(Tensor 或 list)– 需要保存成图片的Tensor。如果Tensor以批的形式给出,则会调用make_grid将这些图片保存成网格的形式。
  • **kwargs – 其他参数同make_grid。
    这部分和1.3.1相比基本没有变化,接下来上Colab进行演练。

你可能感兴趣的:(计算机视觉学习)