iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
AI & Data

從零開始或許曾經想過但想想還是算了的深度雜技系列 第 5

[DAY 05] 從頭訓練大Model?想多了 : Torchvision 簡介

前言


一天一度的阿峻名(ㄈㄟˋ)言(ㄨㄣˊ)又來了

有那個時間練Model,不如拿來打Tenno
-----阿峻 20190921

你們想想,GPU買來,不挖礦、不打Game,暴殄天物(?
要訓練一個蠻深的深度學習網路像是 Resnet-152 , dataset 用 ImageNet 來 Training, 想要 train 到像是 paper 或者網路上宣稱的準度,如果你試用一般家用主機上的 GPU train 的話,你怕是把顯卡燒了或者 AMD 都 Yes 了一段時間都還 Train 不完QQ,最重要的是你在 Train 的時後還不能拿來破 Tenno 的任務QQQQ但我們卻又需要這些已經 Train 好的 Model 來做我們想做的應用或者實驗,像是想利用用ImageNet dataset Train完的 Resnet-152 來做 Classification 等等。
那要怎麼辦呢?
是不是也有一個東西像是之前介紹 Jupyter 跟 Colab 一樣,可以讓我們快速的試用或者使用一下這些已經 Train (Pretrain)好的 Model 呢?當然有齁XDDD我們可以使用 Pytorch 官方維護的資源庫-- Torchvision

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 04] 自己刻底層Function?不存在的 : Pytorch 簡介
下一篇
[DAY 06] 薛丁格貓的其他工作 : CNN 簡介
系列文
從零開始或許曾經想過但想想還是算了的深度雜技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言