[DAY 11] Torchvision 简介

前言


再想要快速测试一个想法时,固然我们已经有 Pytorch 可以帮我们快速一层一层地搭建一个可以跑得模型,但这个仍然不是一个非常快速的选择,若是我们今天想要使用一个有 152 层的 ResNet152 的话,傻傻的一层一层打不是要很久QQ 我们未来其实会去介绍如何使用一些技巧去写这样的结构,但目前的我们还没有这样的能力。
另外举个实际例子,若我们要训练一个蛮深的深度学习网路像是 Resnet-152 , dataset 用 ImageNet 来 Training, 想要 train 到像是 paper 或者网路上宣称的准度,如果你试用一般家用主机上的 GPU train 的话,你怕是把显卡烧了或者 AMD 都 Yes 了一段时间都还 Train 不完QQ
那难道要这样直接开始打吗?在此请冷静,我们可以快速地使用一个很有用的官方 Library Torchvision 去使用一些常见的 Model,甚至,一些常见的 Dataset 或者 Data Argumentation 的方法都可以配我们这样快速使用喔!!

Torchvision


简介以及安装

https://ithelp.ithome.com.tw/upload/images/20190921/201205499vgwnU2Hvf.png
Torchvision 是一个 Pytorch 官方维护的资源库,里面主要收录三大类资源:

  1. 有名、常用的 Dataset
    • 像是 cifar-10 、 COCO 等等
  2. 常见的 Image transform 工具
  3. 有名、常用的 Model Architecture
    • 例如 Alexnet 、 ResNe2 等等
      利用 Torchvision 这个资源库,我们可以快速使用不需自行处理的常用dataset、使用方便有效的image transform函式对我们的dataset做处理以及使用已经Pretrain 好的 model 等等。
      安装的方法可以很简单,像是之前安装 Pytorch 一样:
pip install torchvision

一些document跟各别function或者提供的内容可见官网

基本使用


好啦我知道你们碗真的要敲破了XDDD难得的来写一下基本的使用情况吧。我分成4步来示范一下使用 Torchvision 大概会长啥样:

  1. 引入 (import) Torchvision
  2. 使用 dataset
  3. 使用 Transform
  4. 使用 Model

使用/引入 Torchvision 资源库


在安装完或者已经有现成的环境中,我这边以开启 Colab 做示范, 使用下方程序码来引入 Pytorch 跟 Torchvision :

import torch
import torchvision

接下来按下执行没有报错基本上就是有成功引入,当然我们也可以藉由查询版本的方式再一次确认真的有抓到:

torch.__version__
torchvision.__version__

执行完的结果如下:
https://ithelp.ithome.com.tw/upload/images/20190921/20120549oKb9xITFMv.png

使用Dataset

在 Torchvision 上有非常多的Dataset可以使用详可见官网连结,那我们今天举个最简单的例子"Cifar 10"来给大家看看,这是一个小小的dataset,每张照片为32 X 32 RGB照片并且有相对应的 Label,我们以官网的tutorial来说明:
https://ithelp.ithome.com.tw/upload/images/20190921/20120549C3aA5qddIw.png
0. Import 必须资料库

import torch
import torchvision
import torchvision.transforms as transforms

1.使用下面指令可以下载Cifar 10 的Training dataset 以及 Testing dataset

trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)

画面会长成这样:
https://ithelp.ithome.com.tw/upload/images/20190921/20120549OQ9KVovVir.png
2.使用 Dataloder 读进这些 dataset 并加上 label
Dataloder是用来读这些dataset的工具,目前我们先使用 pytorch 本身的dataloder即可,我们若有空会在实务篇讲解一下dataloder内部细节以及如何自订义 dataloder来读自己的dataset
预先打 transform 的形式,这个用来把dataset做转换,这边只是先转换成 Tensor 的型态

transform = transforms.Compose(
    [transforms.ToTensor()])

先打 Tarining 跟 Testing dataset 的 dataloder

trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
                                         shuffle=False, num_workers=2)                           

接者加入label 种类

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

3.我们让dataset 显示
使用 matplot 来显示:

import matplotlib.pyplot as plt
import numpy as np

# functions to show an image


def imshow(img):
    img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))
    plt.show()


# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()

# show images
imshow(torchvision.utils.make_grid(images))
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))

并可以得到以下结果:
https://ithelp.ithome.com.tw/upload/images/20190921/20120549KZEsSGEnzS.png

使用 Transform

如上节所看到的,我们可以藉由设置 "transform" 来设定我们想对 dataset做甚麽多的处理
例如:

transform = transforms.Compose(
    [transforms.ToTensor(),
    transform.Translation(),
    transforms.RandomHorizontalFlip(p=0.5)
    ])

我们可以得到类似以下效果:
https://ithelp.ithome.com.tw/upload/images/20190921/20120549WKFXfHeV9J.png

导入 Pretrain Model

这个我们下一章会再讲,但现在可以先给大家看看效果:
1.导入 torchvision 中的 models

import torchvision.models as models

2.雕选自己想要的 Pretrain model,这里以 Renet 18 当例子:

resnet18 = models.resnet18(pretrained = True)

3.印出来看看是否成功导入model

print(resnet18)

没错的话应该会长以下画面:
https://ithelp.ithome.com.tw/upload/images/20190921/20120549dIjsVG6YSM.png

结语

Torchvision 是一个十分好用且资源丰富的资源库,日後可以各种多方尝试看看各个功能!!


<<:  【Day26】 音乐如何引起人的情绪

>>:  Day11 - 物理模拟篇 - 弹跳球世界II - 成为Canvas Ninja ~ 理解2D渲染的精髓

检查资讯内容(我也不知道我在做啥,不要理我T^T)

我好像找到之前明明有连接到并且取得资料後,结果却为空值的因素了! 不过这只是我觉得而已,我也不是很确...

DAY18 - 踩坑纪录 : 填了坑又有新的坑

前言 铁人赛进入第十八天,今天原本是要开始讲网页前端的部分 没想到碰到自己挖的坑...所以这篇变成踩...

配置管理(Configuration management)是编排器(orchestrator )管理容器化(containerized)应用程序的最关键推动力

在部署基於容器的应用程序时,我们可以使用容器编排器来配置和管理容器。这意味着变更请求已获批准和实施,...

Day61 (Vue)

影片Vue01 1.Vue (Part_1 > Lab_HelloVueJS > hel...

[Day25] swift & kotlin 游戏篇!(7) 小鸡BB-游戏制作-API与游戏动画

游戏示意 swift - 游戏功能 接下来当我们点击按钮 我们来打个API 并告知道有没有猜对 来看...