对于使用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.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)
参数:
#把指定的Tensor保存成图片文件
torchvision.utils.save_image(tensor, filename, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)
参数: