iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
AI & Data

從 Training 到 Deployment : 原來業界 AI 這樣做系列 第 11

[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 是一個十分好用且資源豐富的資源庫,日後可以各種多方嘗試看看各個功能!!


上一篇
[DAY 10] Pytorch 簡介
下一篇
[DAY 12] CNN 簡介
系列文
從 Training 到 Deployment : 原來業界 AI 這樣做20

尚未有邦友留言

立即登入留言